From 24bddc6eb8e4c5a824f76bc458dbb2a086f4e7b0 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Mon, 6 Aug 2007 21:05:39 +0000 Subject: [PATCH] Commit generated files for binutils 2.17.90. --- bfd/doc/aoutx.texi | 213 + bfd/doc/archive.texi | 99 + bfd/doc/archures.texi | 599 ++ bfd/doc/bfd.info | 10669 ++++++++++++++++++++++++ bfd/doc/bfdio.texi | 72 + bfd/doc/bfdt.texi | 785 ++ bfd/doc/bfdver.texi | 4 + bfd/doc/bfdwin.texi | 2 + bfd/doc/cache.texi | 65 + bfd/doc/coffcode.texi | 608 ++ bfd/doc/core.texi | 60 + bfd/doc/elf.texi | 22 + bfd/doc/elfcode.texi | 0 bfd/doc/format.texi | 112 + bfd/doc/hash.texi | 247 + bfd/doc/init.texi | 16 + bfd/doc/libbfd.texi | 179 + bfd/doc/linker.texi | 381 + bfd/doc/mmo.texi | 365 + bfd/doc/opncls.texi | 372 + bfd/doc/reloc.texi | 2644 ++++++ bfd/doc/section.texi | 983 +++ bfd/doc/syms.texi | 469 ++ bfd/doc/targets.texi | 557 ++ bfd/po/da.gmo | Bin 0 -> 60556 bytes bfd/po/es.gmo | Bin 0 -> 87772 bytes bfd/po/fr.gmo | Bin 0 -> 71749 bytes bfd/po/ja.gmo | Bin 0 -> 38616 bytes bfd/po/ro.gmo | Bin 0 -> 69038 bytes bfd/po/rw.gmo | Bin 0 -> 429 bytes bfd/po/sv.gmo | Bin 0 -> 67266 bytes bfd/po/tr.gmo | Bin 0 -> 69529 bytes bfd/po/vi.gmo | Bin 0 -> 39617 bytes bfd/po/zh_CN.gmo | Bin 0 -> 28132 bytes binutils/arlex.c | 2035 +++++ binutils/arparse.c | 1770 ++++ binutils/arparse.h | 102 + binutils/deflex.c | 2061 +++++ binutils/defparse.c | 1943 +++++ binutils/defparse.h | 121 + binutils/doc/addr2line.1 | 265 + binutils/doc/ar.1 | 390 + binutils/doc/binutils.info | 4057 +++++++++ binutils/doc/cxxfilt.man | 345 + binutils/doc/dlltool.1 | 478 ++ binutils/doc/nlmconv.1 | 243 + binutils/doc/nm.1 | 449 + binutils/doc/objcopy.1 | 857 ++ binutils/doc/objdump.1 | 635 ++ binutils/doc/ranlib.1 | 188 + binutils/doc/readelf.1 | 376 + binutils/doc/size.1 | 268 + binutils/doc/strings.1 | 253 + binutils/doc/strip.1 | 391 + binutils/doc/windmc.1 | 352 + binutils/doc/windres.1 | 354 + binutils/mcparse.c | 2156 +++++ binutils/mcparse.h | 103 + binutils/nlmheader.c | 2698 ++++++ binutils/nlmheader.h | 135 + binutils/po/da.gmo | Bin 0 -> 80846 bytes binutils/po/es.gmo | Bin 0 -> 137588 bytes binutils/po/fi.gmo | Bin 0 -> 127911 bytes binutils/po/fr.gmo | Bin 0 -> 134234 bytes binutils/po/ja.gmo | Bin 0 -> 97376 bytes binutils/po/ro.gmo | Bin 0 -> 20265 bytes binutils/po/ru.gmo | Bin 0 -> 130197 bytes binutils/po/rw.gmo | Bin 0 -> 615 bytes binutils/po/sv.gmo | Bin 0 -> 103077 bytes binutils/po/tr.gmo | Bin 0 -> 129842 bytes binutils/po/uk.gmo | Bin 0 -> 161480 bytes binutils/po/vi.gmo | Bin 0 -> 147286 bytes binutils/po/zh_CN.gmo | Bin 0 -> 75903 bytes binutils/po/zh_TW.gmo | Bin 0 -> 121475 bytes binutils/rcparse.c | 4584 +++++++++++ binutils/rcparse.h | 297 + binutils/sysinfo.c | 1968 +++++ binutils/sysinfo.h | 77 + binutils/syslex.c | 1903 +++++ etc/configure.info | 2773 +++++++ etc/standards.info | 4930 +++++++++++ gas/bfin-lex.c | 3543 ++++++++ gas/bfin-parse.c | 7659 +++++++++++++++++ gas/bfin-parse.h | 416 + gas/doc/as.1 | 1134 +++ gas/doc/as.info | 19163 +++++++++++++++++++++++++++++++++++++++++++ gas/doc/asconfig.texi | 91 + gas/itbl-lex.c | 1888 +++++ gas/itbl-parse.c | 2006 +++++ gas/itbl-parse.h | 87 + gas/m68k-parse.c | 2835 +++++++ gas/po/es.gmo | Bin 0 -> 305962 bytes gas/po/fr.gmo | Bin 0 -> 288175 bytes gas/po/rw.gmo | Bin 0 -> 438 bytes gas/po/tr.gmo | Bin 0 -> 254790 bytes gprof/bsd_callg_bl.c | 120 + gprof/config.texi | 1 + gprof/flat_bl.c | 39 + gprof/fsf_callg_bl.c | 95 + gprof/gprof.1 | 745 ++ gprof/gprof.info | 2340 ++++++ gprof/po/da.gmo | Bin 0 -> 9586 bytes gprof/po/de.gmo | Bin 0 -> 9762 bytes gprof/po/es.gmo | Bin 0 -> 10062 bytes gprof/po/fr.gmo | Bin 0 -> 10062 bytes gprof/po/ga.gmo | Bin 0 -> 9819 bytes gprof/po/id.gmo | Bin 0 -> 9735 bytes gprof/po/ms.gmo | Bin 0 -> 9757 bytes gprof/po/pt_BR.gmo | Bin 0 -> 9984 bytes gprof/po/rw.gmo | Bin 0 -> 486 bytes gprof/po/sv.gmo | Bin 0 -> 9586 bytes gprof/po/tr.gmo | Bin 0 -> 11331 bytes gprof/po/vi.gmo | Bin 0 -> 11621 bytes ld/configdoc.texi | 25 + ld/ld.1 | 2185 +++++ ld/ld.info | 7041 ++++++++++++++++ ld/ldgram.c | 4405 ++++++++++ ld/ldgram.h | 323 + ld/ldlex.c | 4171 ++++++++++ ld/po/da.gmo | Bin 0 -> 40607 bytes ld/po/es.gmo | Bin 0 -> 48316 bytes ld/po/fr.gmo | Bin 0 -> 49474 bytes ld/po/ga.gmo | Bin 0 -> 47391 bytes ld/po/sv.gmo | Bin 0 -> 43131 bytes ld/po/tr.gmo | Bin 0 -> 41339 bytes ld/po/vi.gmo | Bin 0 -> 53249 bytes ld/po/zh_CN.gmo | Bin 0 -> 24796 bytes ld/po/zh_TW.gmo | Bin 0 -> 44839 bytes opcodes/po/da.gmo | Bin 0 -> 8332 bytes opcodes/po/de.gmo | Bin 0 -> 16919 bytes opcodes/po/es.gmo | Bin 0 -> 21084 bytes opcodes/po/fi.gmo | Bin 0 -> 21547 bytes opcodes/po/fr.gmo | Bin 0 -> 16408 bytes opcodes/po/ga.gmo | Bin 0 -> 20664 bytes opcodes/po/id.gmo | Bin 0 -> 8307 bytes opcodes/po/nl.gmo | Bin 0 -> 20463 bytes opcodes/po/pt_BR.gmo | Bin 0 -> 8467 bytes opcodes/po/ro.gmo | Bin 0 -> 15986 bytes opcodes/po/sv.gmo | Bin 0 -> 16004 bytes opcodes/po/tr.gmo | Bin 0 -> 16094 bytes opcodes/po/vi.gmo | Bin 0 -> 22606 bytes opcodes/po/zh_CN.gmo | Bin 0 -> 9050 bytes 142 files changed, 119392 insertions(+) create mode 100644 bfd/doc/aoutx.texi create mode 100644 bfd/doc/archive.texi create mode 100644 bfd/doc/archures.texi create mode 100644 bfd/doc/bfd.info create mode 100644 bfd/doc/bfdio.texi create mode 100644 bfd/doc/bfdt.texi create mode 100644 bfd/doc/bfdver.texi create mode 100644 bfd/doc/bfdwin.texi create mode 100644 bfd/doc/cache.texi create mode 100644 bfd/doc/coffcode.texi create mode 100644 bfd/doc/core.texi create mode 100644 bfd/doc/elf.texi create mode 100644 bfd/doc/elfcode.texi create mode 100644 bfd/doc/format.texi create mode 100644 bfd/doc/hash.texi create mode 100644 bfd/doc/init.texi create mode 100644 bfd/doc/libbfd.texi create mode 100644 bfd/doc/linker.texi create mode 100644 bfd/doc/mmo.texi create mode 100644 bfd/doc/opncls.texi create mode 100644 bfd/doc/reloc.texi create mode 100644 bfd/doc/section.texi create mode 100644 bfd/doc/syms.texi create mode 100644 bfd/doc/targets.texi create mode 100644 bfd/po/da.gmo create mode 100644 bfd/po/es.gmo create mode 100644 bfd/po/fr.gmo create mode 100644 bfd/po/ja.gmo create mode 100644 bfd/po/ro.gmo create mode 100644 bfd/po/rw.gmo create mode 100644 bfd/po/sv.gmo create mode 100644 bfd/po/tr.gmo create mode 100644 bfd/po/vi.gmo create mode 100644 bfd/po/zh_CN.gmo create mode 100644 binutils/arlex.c create mode 100644 binutils/arparse.c create mode 100644 binutils/arparse.h create mode 100644 binutils/deflex.c create mode 100644 binutils/defparse.c create mode 100644 binutils/defparse.h create mode 100644 binutils/doc/addr2line.1 create mode 100644 binutils/doc/ar.1 create mode 100644 binutils/doc/binutils.info create mode 100644 binutils/doc/cxxfilt.man create mode 100644 binutils/doc/dlltool.1 create mode 100644 binutils/doc/nlmconv.1 create mode 100644 binutils/doc/nm.1 create mode 100644 binutils/doc/objcopy.1 create mode 100644 binutils/doc/objdump.1 create mode 100644 binutils/doc/ranlib.1 create mode 100644 binutils/doc/readelf.1 create mode 100644 binutils/doc/size.1 create mode 100644 binutils/doc/strings.1 create mode 100644 binutils/doc/strip.1 create mode 100644 binutils/doc/windmc.1 create mode 100644 binutils/doc/windres.1 create mode 100644 binutils/mcparse.c create mode 100644 binutils/mcparse.h create mode 100644 binutils/nlmheader.c create mode 100644 binutils/nlmheader.h create mode 100644 binutils/po/da.gmo create mode 100644 binutils/po/es.gmo create mode 100644 binutils/po/fi.gmo create mode 100644 binutils/po/fr.gmo create mode 100644 binutils/po/ja.gmo create mode 100644 binutils/po/ro.gmo create mode 100644 binutils/po/ru.gmo create mode 100644 binutils/po/rw.gmo create mode 100644 binutils/po/sv.gmo create mode 100644 binutils/po/tr.gmo create mode 100644 binutils/po/uk.gmo create mode 100644 binutils/po/vi.gmo create mode 100644 binutils/po/zh_CN.gmo create mode 100644 binutils/po/zh_TW.gmo create mode 100644 binutils/rcparse.c create mode 100644 binutils/rcparse.h create mode 100644 binutils/sysinfo.c create mode 100644 binutils/sysinfo.h create mode 100644 binutils/syslex.c create mode 100644 etc/configure.info create mode 100644 etc/standards.info create mode 100644 gas/bfin-lex.c create mode 100644 gas/bfin-parse.c create mode 100644 gas/bfin-parse.h create mode 100644 gas/doc/as.1 create mode 100644 gas/doc/as.info create mode 100644 gas/doc/asconfig.texi create mode 100644 gas/itbl-lex.c create mode 100644 gas/itbl-parse.c create mode 100644 gas/itbl-parse.h create mode 100644 gas/m68k-parse.c create mode 100644 gas/po/es.gmo create mode 100644 gas/po/fr.gmo create mode 100644 gas/po/rw.gmo create mode 100644 gas/po/tr.gmo create mode 100644 gprof/bsd_callg_bl.c create mode 100644 gprof/config.texi create mode 100644 gprof/flat_bl.c create mode 100644 gprof/fsf_callg_bl.c create mode 100644 gprof/gprof.1 create mode 100644 gprof/gprof.info create mode 100644 gprof/po/da.gmo create mode 100644 gprof/po/de.gmo create mode 100644 gprof/po/es.gmo create mode 100644 gprof/po/fr.gmo create mode 100644 gprof/po/ga.gmo create mode 100644 gprof/po/id.gmo create mode 100644 gprof/po/ms.gmo create mode 100644 gprof/po/pt_BR.gmo create mode 100644 gprof/po/rw.gmo create mode 100644 gprof/po/sv.gmo create mode 100644 gprof/po/tr.gmo create mode 100644 gprof/po/vi.gmo create mode 100644 ld/configdoc.texi create mode 100644 ld/ld.1 create mode 100644 ld/ld.info create mode 100644 ld/ldgram.c create mode 100644 ld/ldgram.h create mode 100644 ld/ldlex.c create mode 100644 ld/po/da.gmo create mode 100644 ld/po/es.gmo create mode 100644 ld/po/fr.gmo create mode 100644 ld/po/ga.gmo create mode 100644 ld/po/sv.gmo create mode 100644 ld/po/tr.gmo create mode 100644 ld/po/vi.gmo create mode 100644 ld/po/zh_CN.gmo create mode 100644 ld/po/zh_TW.gmo create mode 100644 opcodes/po/da.gmo create mode 100644 opcodes/po/de.gmo create mode 100644 opcodes/po/es.gmo create mode 100644 opcodes/po/fi.gmo create mode 100644 opcodes/po/fr.gmo create mode 100644 opcodes/po/ga.gmo create mode 100644 opcodes/po/id.gmo create mode 100644 opcodes/po/nl.gmo create mode 100644 opcodes/po/pt_BR.gmo create mode 100644 opcodes/po/ro.gmo create mode 100644 opcodes/po/sv.gmo create mode 100644 opcodes/po/tr.gmo create mode 100644 opcodes/po/vi.gmo create mode 100644 opcodes/po/zh_CN.gmo diff --git a/bfd/doc/aoutx.texi b/bfd/doc/aoutx.texi new file mode 100644 index 000000000..7cf9787f1 --- /dev/null +++ b/bfd/doc/aoutx.texi @@ -0,0 +1,213 @@ +@section a.out backends + + +@strong{Description}@* +BFD supports a number of different flavours of a.out format, +though the major differences are only the sizes of the +structures on disk, and the shape of the relocation +information. + +The support is split into a basic support file @file{aoutx.h} +and other files which derive functions from the base. One +derivation file is @file{aoutf1.h} (for a.out flavour 1), and +adds to the basic a.out functions support for sun3, sun4, 386 +and 29k a.out files, to create a target jump vector for a +specific target. + +This information is further split out into more specific files +for each machine, including @file{sunos.c} for sun3 and sun4, +@file{newsos3.c} for the Sony NEWS, and @file{demo64.c} for a +demonstration of a 64 bit a.out format. + +The base file @file{aoutx.h} defines general mechanisms for +reading and writing records to and from disk and various +other methods which BFD requires. It is included by +@file{aout32.c} and @file{aout64.c} to form the names +@code{aout_32_swap_exec_header_in}, @code{aout_64_swap_exec_header_in}, etc. + +As an example, this is what goes on to make the back end for a +sun4, from @file{aout32.c}: + +@example + #define ARCH_SIZE 32 + #include "aoutx.h" +@end example + +Which exports names: + +@example + ... + aout_32_canonicalize_reloc + aout_32_find_nearest_line + aout_32_get_lineno + aout_32_get_reloc_upper_bound + ... +@end example + +from @file{sunos.c}: + +@example + #define TARGET_NAME "a.out-sunos-big" + #define VECNAME sunos_big_vec + #include "aoutf1.h" +@end example + +requires all the names from @file{aout32.c}, and produces the jump vector + +@example + sunos_big_vec +@end example + +The file @file{host-aout.c} is a special case. It is for a large set +of hosts that use ``more or less standard'' a.out files, and +for which cross-debugging is not interesting. It uses the +standard 32-bit a.out support routines, but determines the +file offsets and addresses of the text, data, and BSS +sections, the machine architecture and machine type, and the +entry point address, in a host-dependent manner. Once these +values have been determined, generic code is used to handle +the object file. + +When porting it to run on a new system, you must supply: + +@example + HOST_PAGE_SIZE + HOST_SEGMENT_SIZE + HOST_MACHINE_ARCH (optional) + HOST_MACHINE_MACHINE (optional) + HOST_TEXT_START_ADDR + HOST_STACK_END_ADDR +@end example + +in the file @file{../include/sys/h-@var{XXX}.h} (for your host). These +values, plus the structures and macros defined in @file{a.out.h} on +your host system, will produce a BFD target that will access +ordinary a.out files on your host. To configure a new machine +to use @file{host-aout.c}, specify: + +@example + TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec + TDEPFILES= host-aout.o trad-core.o +@end example + +in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in} +to use the +@file{@var{XXX}.mt} file (by setting "@code{bfd_target=XXX}") when your +configuration is selected. + +@subsection Relocations + + +@strong{Description}@* +The file @file{aoutx.h} provides for both the @emph{standard} +and @emph{extended} forms of a.out relocation records. + +The standard records contain only an +address, a symbol index, and a type field. The extended records +(used on 29ks and sparcs) also have a full integer for an +addend. + +@subsection Internal entry points + + +@strong{Description}@* +@file{aoutx.h} exports several routines for accessing the +contents of an a.out file, which are gathered and exported in +turn by various format specific files (eg sunos.c). + +@findex aout_@var{size}_swap_exec_header_in +@subsubsection @code{aout_@var{size}_swap_exec_header_in} +@strong{Synopsis} +@example +void aout_@var{size}_swap_exec_header_in, + (bfd *abfd, + struct external_exec *bytes, + struct internal_exec *execp); +@end example +@strong{Description}@* +Swap the information in an executable header @var{raw_bytes} taken +from a raw byte stream memory image into the internal exec header +structure @var{execp}. + +@findex aout_@var{size}_swap_exec_header_out +@subsubsection @code{aout_@var{size}_swap_exec_header_out} +@strong{Synopsis} +@example +void aout_@var{size}_swap_exec_header_out + (bfd *abfd, + struct internal_exec *execp, + struct external_exec *raw_bytes); +@end example +@strong{Description}@* +Swap the information in an internal exec header structure +@var{execp} into the buffer @var{raw_bytes} ready for writing to disk. + +@findex aout_@var{size}_some_aout_object_p +@subsubsection @code{aout_@var{size}_some_aout_object_p} +@strong{Synopsis} +@example +const bfd_target *aout_@var{size}_some_aout_object_p + (bfd *abfd, + struct internal_exec *execp, + const bfd_target *(*callback_to_real_object_p) (bfd *)); +@end example +@strong{Description}@* +Some a.out variant thinks that the file open in @var{abfd} +checking is an a.out file. Do some more checking, and set up +for access if it really is. Call back to the calling +environment's "finish up" function just before returning, to +handle any last-minute setup. + +@findex aout_@var{size}_mkobject +@subsubsection @code{aout_@var{size}_mkobject} +@strong{Synopsis} +@example +bfd_boolean aout_@var{size}_mkobject, (bfd *abfd); +@end example +@strong{Description}@* +Initialize BFD @var{abfd} for use with a.out files. + +@findex aout_@var{size}_machine_type +@subsubsection @code{aout_@var{size}_machine_type} +@strong{Synopsis} +@example +enum machine_type aout_@var{size}_machine_type + (enum bfd_architecture arch, + unsigned long machine, + bfd_boolean *unknown); +@end example +@strong{Description}@* +Keep track of machine architecture and machine type for +a.out's. Return the @code{machine_type} for a particular +architecture and machine, or @code{M_UNKNOWN} if that exact architecture +and machine can't be represented in a.out format. + +If the architecture is understood, machine type 0 (default) +is always understood. + +@findex aout_@var{size}_set_arch_mach +@subsubsection @code{aout_@var{size}_set_arch_mach} +@strong{Synopsis} +@example +bfd_boolean aout_@var{size}_set_arch_mach, + (bfd *, + enum bfd_architecture arch, + unsigned long machine); +@end example +@strong{Description}@* +Set the architecture and the machine of the BFD @var{abfd} to the +values @var{arch} and @var{machine}. Verify that @var{abfd}'s format +can support the architecture required. + +@findex aout_@var{size}_new_section_hook +@subsubsection @code{aout_@var{size}_new_section_hook} +@strong{Synopsis} +@example +bfd_boolean aout_@var{size}_new_section_hook, + (bfd *abfd, + asection *newsect); +@end example +@strong{Description}@* +Called by the BFD in response to a @code{bfd_make_section} +request. + diff --git a/bfd/doc/archive.texi b/bfd/doc/archive.texi new file mode 100644 index 000000000..3d0a97d4b --- /dev/null +++ b/bfd/doc/archive.texi @@ -0,0 +1,99 @@ +@section Archives + + +@strong{Description}@* +An archive (or library) is just another BFD. It has a symbol +table, although there's not much a user program will do with it. + +The big difference between an archive BFD and an ordinary BFD +is that the archive doesn't have sections. Instead it has a +chain of BFDs that are considered its contents. These BFDs can +be manipulated like any other. The BFDs contained in an +archive opened for reading will all be opened for reading. You +may put either input or output BFDs into an archive opened for +output; they will be handled correctly when the archive is closed. + +Use @code{bfd_openr_next_archived_file} to step through +the contents of an archive opened for input. You don't +have to read the entire archive if you don't want +to! Read it until you find what you want. + +Archive contents of output BFDs are chained through the +@code{next} pointer in a BFD. The first one is findable through +the @code{archive_head} slot of the archive. Set it with +@code{bfd_set_archive_head} (q.v.). A given BFD may be in only one +open output archive at a time. + +As expected, the BFD archive code is more general than the +archive code of any given environment. BFD archives may +contain files of different formats (e.g., a.out and coff) and +even different architectures. You may even place archives +recursively into archives! + +This can cause unexpected confusion, since some archive +formats are more expressive than others. For instance, Intel +COFF archives can preserve long filenames; SunOS a.out archives +cannot. If you move a file from the first to the second +format and back again, the filename may be truncated. +Likewise, different a.out environments have different +conventions as to how they truncate filenames, whether they +preserve directory names in filenames, etc. When +interoperating with native tools, be sure your files are +homogeneous. + +Beware: most of these formats do not react well to the +presence of spaces in filenames. We do the best we can, but +can't always handle this case due to restrictions in the format of +archives. Many Unix utilities are braindead in regards to +spaces and such in filenames anyway, so this shouldn't be much +of a restriction. + +Archives are supported in BFD in @code{archive.c}. + +@subsection Archive functions + + +@findex bfd_get_next_mapent +@subsubsection @code{bfd_get_next_mapent} +@strong{Synopsis} +@example +symindex bfd_get_next_mapent + (bfd *abfd, symindex previous, carsym **sym); +@end example +@strong{Description}@* +Step through archive @var{abfd}'s symbol table (if it +has one). Successively update @var{sym} with the next symbol's +information, returning that symbol's (internal) index into the +symbol table. + +Supply @code{BFD_NO_MORE_SYMBOLS} as the @var{previous} entry to get +the first one; returns @code{BFD_NO_MORE_SYMBOLS} when you've already +got the last one. + +A @code{carsym} is a canonical archive symbol. The only +user-visible element is its name, a null-terminated string. + +@findex bfd_set_archive_head +@subsubsection @code{bfd_set_archive_head} +@strong{Synopsis} +@example +bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head); +@end example +@strong{Description}@* +Set the head of the chain of +BFDs contained in the archive @var{output} to @var{new_head}. + +@findex bfd_openr_next_archived_file +@subsubsection @code{bfd_openr_next_archived_file} +@strong{Synopsis} +@example +bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous); +@end example +@strong{Description}@* +Provided a BFD, @var{archive}, containing an archive and NULL, open +an input BFD on the first contained element and returns that. +Subsequent calls should pass +the archive and the previous return value to return a created +BFD to the next contained element. NULL is returned when there +are no more. + diff --git a/bfd/doc/archures.texi b/bfd/doc/archures.texi new file mode 100644 index 000000000..b5de132f8 --- /dev/null +++ b/bfd/doc/archures.texi @@ -0,0 +1,599 @@ +@section Architectures +BFD keeps one atom in a BFD describing the +architecture of the data attached to the BFD: a pointer to a +@code{bfd_arch_info_type}. + +Pointers to structures can be requested independently of a BFD +so that an architecture's information can be interrogated +without access to an open BFD. + +The architecture information is provided by each architecture package. +The set of default architectures is selected by the macro +@code{SELECT_ARCHITECTURES}. This is normally set up in the +@file{config/@var{target}.mt} file of your choice. If the name is not +defined, then all the architectures supported are included. + +When BFD starts up, all the architectures are called with an +initialize method. It is up to the architecture back end to +insert as many items into the list of architectures as it wants to; +generally this would be one for each machine and one for the +default case (an item with a machine field of 0). + +BFD's idea of an architecture is implemented in @file{archures.c}. + +@subsection bfd_architecture + + +@strong{Description}@* +This enum gives the object file's CPU architecture, in a +global sense---i.e., what processor family does it belong to? +Another field indicates which processor within +the family is in use. The machine gives a number which +distinguishes different versions of the architecture, +containing, for example, 2 and 3 for Intel i960 KA and i960 KB, +and 68020 and 68030 for Motorola 68020 and 68030. +@example +enum bfd_architecture +@{ + bfd_arch_unknown, /* File arch not known. */ + bfd_arch_obscure, /* Arch known, not one of these. */ + bfd_arch_m68k, /* Motorola 68xxx */ +#define bfd_mach_m68000 1 +#define bfd_mach_m68008 2 +#define bfd_mach_m68010 3 +#define bfd_mach_m68020 4 +#define bfd_mach_m68030 5 +#define bfd_mach_m68040 6 +#define bfd_mach_m68060 7 +#define bfd_mach_cpu32 8 +#define bfd_mach_fido 9 +#define bfd_mach_mcf_isa_a_nodiv 10 +#define bfd_mach_mcf_isa_a 11 +#define bfd_mach_mcf_isa_a_mac 12 +#define bfd_mach_mcf_isa_a_emac 13 +#define bfd_mach_mcf_isa_aplus 14 +#define bfd_mach_mcf_isa_aplus_mac 15 +#define bfd_mach_mcf_isa_aplus_emac 16 +#define bfd_mach_mcf_isa_b_nousp 17 +#define bfd_mach_mcf_isa_b_nousp_mac 18 +#define bfd_mach_mcf_isa_b_nousp_emac 19 +#define bfd_mach_mcf_isa_b 20 +#define bfd_mach_mcf_isa_b_mac 21 +#define bfd_mach_mcf_isa_b_emac 22 +#define bfd_mach_mcf_isa_b_float 23 +#define bfd_mach_mcf_isa_b_float_mac 24 +#define bfd_mach_mcf_isa_b_float_emac 25 +#define bfd_mach_mcf_isa_c 26 +#define bfd_mach_mcf_isa_c_mac 27 +#define bfd_mach_mcf_isa_c_emac 28 + bfd_arch_vax, /* DEC Vax */ + bfd_arch_i960, /* Intel 960 */ + /* The order of the following is important. + lower number indicates a machine type that + only accepts a subset of the instructions + available to machines with higher numbers. + The exception is the "ca", which is + incompatible with all other machines except + "core". */ + +#define bfd_mach_i960_core 1 +#define bfd_mach_i960_ka_sa 2 +#define bfd_mach_i960_kb_sb 3 +#define bfd_mach_i960_mc 4 +#define bfd_mach_i960_xa 5 +#define bfd_mach_i960_ca 6 +#define bfd_mach_i960_jx 7 +#define bfd_mach_i960_hx 8 + + bfd_arch_or32, /* OpenRISC 32 */ + + bfd_arch_sparc, /* SPARC */ +#define bfd_mach_sparc 1 +/* The difference between v8plus and v9 is that v9 is a true 64 bit env. */ +#define bfd_mach_sparc_sparclet 2 +#define bfd_mach_sparc_sparclite 3 +#define bfd_mach_sparc_v8plus 4 +#define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */ +#define bfd_mach_sparc_sparclite_le 6 +#define bfd_mach_sparc_v9 7 +#define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ +#define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ +#define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ +/* Nonzero if MACH has the v9 instruction set. */ +#define bfd_mach_sparc_v9_p(mach) \ + ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ + && (mach) != bfd_mach_sparc_sparclite_le) +/* Nonzero if MACH is a 64 bit sparc architecture. */ +#define bfd_mach_sparc_64bit_p(mach) \ + ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) + bfd_arch_spu, /* PowerPC SPU */ +#define bfd_mach_spu 256 + bfd_arch_mips, /* MIPS Rxxxx */ +#define bfd_mach_mips3000 3000 +#define bfd_mach_mips3900 3900 +#define bfd_mach_mips4000 4000 +#define bfd_mach_mips4010 4010 +#define bfd_mach_mips4100 4100 +#define bfd_mach_mips4111 4111 +#define bfd_mach_mips4120 4120 +#define bfd_mach_mips4300 4300 +#define bfd_mach_mips4400 4400 +#define bfd_mach_mips4600 4600 +#define bfd_mach_mips4650 4650 +#define bfd_mach_mips5000 5000 +#define bfd_mach_mips5400 5400 +#define bfd_mach_mips5500 5500 +#define bfd_mach_mips6000 6000 +#define bfd_mach_mips7000 7000 +#define bfd_mach_mips8000 8000 +#define bfd_mach_mips9000 9000 +#define bfd_mach_mips10000 10000 +#define bfd_mach_mips12000 12000 +#define bfd_mach_mips16 16 +#define bfd_mach_mips5 5 +#define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */ +#define bfd_mach_mipsisa32 32 +#define bfd_mach_mipsisa32r2 33 +#define bfd_mach_mipsisa64 64 +#define bfd_mach_mipsisa64r2 65 + bfd_arch_i386, /* Intel 386 */ +#define bfd_mach_i386_i386 1 +#define bfd_mach_i386_i8086 2 +#define bfd_mach_i386_i386_intel_syntax 3 +#define bfd_mach_x86_64 64 +#define bfd_mach_x86_64_intel_syntax 65 + bfd_arch_we32k, /* AT&T WE32xxx */ + bfd_arch_tahoe, /* CCI/Harris Tahoe */ + bfd_arch_i860, /* Intel 860 */ + bfd_arch_i370, /* IBM 360/370 Mainframes */ + bfd_arch_romp, /* IBM ROMP PC/RT */ + bfd_arch_convex, /* Convex */ + bfd_arch_m88k, /* Motorola 88xxx */ + bfd_arch_m98k, /* Motorola 98xxx */ + bfd_arch_pyramid, /* Pyramid Technology */ + bfd_arch_h8300, /* Renesas H8/300 (formerly Hitachi H8/300) */ +#define bfd_mach_h8300 1 +#define bfd_mach_h8300h 2 +#define bfd_mach_h8300s 3 +#define bfd_mach_h8300hn 4 +#define bfd_mach_h8300sn 5 +#define bfd_mach_h8300sx 6 +#define bfd_mach_h8300sxn 7 + bfd_arch_pdp11, /* DEC PDP-11 */ + bfd_arch_powerpc, /* PowerPC */ +#define bfd_mach_ppc 32 +#define bfd_mach_ppc64 64 +#define bfd_mach_ppc_403 403 +#define bfd_mach_ppc_403gc 4030 +#define bfd_mach_ppc_505 505 +#define bfd_mach_ppc_601 601 +#define bfd_mach_ppc_602 602 +#define bfd_mach_ppc_603 603 +#define bfd_mach_ppc_ec603e 6031 +#define bfd_mach_ppc_604 604 +#define bfd_mach_ppc_620 620 +#define bfd_mach_ppc_630 630 +#define bfd_mach_ppc_750 750 +#define bfd_mach_ppc_860 860 +#define bfd_mach_ppc_a35 35 +#define bfd_mach_ppc_rs64ii 642 +#define bfd_mach_ppc_rs64iii 643 +#define bfd_mach_ppc_7400 7400 +#define bfd_mach_ppc_e500 500 + bfd_arch_rs6000, /* IBM RS/6000 */ +#define bfd_mach_rs6k 6000 +#define bfd_mach_rs6k_rs1 6001 +#define bfd_mach_rs6k_rsc 6003 +#define bfd_mach_rs6k_rs2 6002 + bfd_arch_hppa, /* HP PA RISC */ +#define bfd_mach_hppa10 10 +#define bfd_mach_hppa11 11 +#define bfd_mach_hppa20 20 +#define bfd_mach_hppa20w 25 + bfd_arch_d10v, /* Mitsubishi D10V */ +#define bfd_mach_d10v 1 +#define bfd_mach_d10v_ts2 2 +#define bfd_mach_d10v_ts3 3 + bfd_arch_d30v, /* Mitsubishi D30V */ + bfd_arch_dlx, /* DLX */ + bfd_arch_m68hc11, /* Motorola 68HC11 */ + bfd_arch_m68hc12, /* Motorola 68HC12 */ +#define bfd_mach_m6812_default 0 +#define bfd_mach_m6812 1 +#define bfd_mach_m6812s 2 + bfd_arch_z8k, /* Zilog Z8000 */ +#define bfd_mach_z8001 1 +#define bfd_mach_z8002 2 + bfd_arch_h8500, /* Renesas H8/500 (formerly Hitachi H8/500) */ + bfd_arch_sh, /* Renesas / SuperH SH (formerly Hitachi SH) */ +#define bfd_mach_sh 1 +#define bfd_mach_sh2 0x20 +#define bfd_mach_sh_dsp 0x2d +#define bfd_mach_sh2a 0x2a +#define bfd_mach_sh2a_nofpu 0x2b +#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1 +#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2 +#define bfd_mach_sh2a_or_sh4 0x2a3 +#define bfd_mach_sh2a_or_sh3e 0x2a4 +#define bfd_mach_sh2e 0x2e +#define bfd_mach_sh3 0x30 +#define bfd_mach_sh3_nommu 0x31 +#define bfd_mach_sh3_dsp 0x3d +#define bfd_mach_sh3e 0x3e +#define bfd_mach_sh4 0x40 +#define bfd_mach_sh4_nofpu 0x41 +#define bfd_mach_sh4_nommu_nofpu 0x42 +#define bfd_mach_sh4a 0x4a +#define bfd_mach_sh4a_nofpu 0x4b +#define bfd_mach_sh4al_dsp 0x4d +#define bfd_mach_sh5 0x50 + bfd_arch_alpha, /* Dec Alpha */ +#define bfd_mach_alpha_ev4 0x10 +#define bfd_mach_alpha_ev5 0x20 +#define bfd_mach_alpha_ev6 0x30 + bfd_arch_arm, /* Advanced Risc Machines ARM. */ +#define bfd_mach_arm_unknown 0 +#define bfd_mach_arm_2 1 +#define bfd_mach_arm_2a 2 +#define bfd_mach_arm_3 3 +#define bfd_mach_arm_3M 4 +#define bfd_mach_arm_4 5 +#define bfd_mach_arm_4T 6 +#define bfd_mach_arm_5 7 +#define bfd_mach_arm_5T 8 +#define bfd_mach_arm_5TE 9 +#define bfd_mach_arm_XScale 10 +#define bfd_mach_arm_ep9312 11 +#define bfd_mach_arm_iWMMXt 12 +#define bfd_mach_arm_iWMMXt2 13 + bfd_arch_ns32k, /* National Semiconductors ns32000 */ + bfd_arch_w65, /* WDC 65816 */ + bfd_arch_tic30, /* Texas Instruments TMS320C30 */ + bfd_arch_tic4x, /* Texas Instruments TMS320C3X/4X */ +#define bfd_mach_tic3x 30 +#define bfd_mach_tic4x 40 + bfd_arch_tic54x, /* Texas Instruments TMS320C54X */ + bfd_arch_tic80, /* TI TMS320c80 (MVP) */ + bfd_arch_v850, /* NEC V850 */ +#define bfd_mach_v850 1 +#define bfd_mach_v850e 'E' +#define bfd_mach_v850e1 '1' + bfd_arch_arc, /* ARC Cores */ +#define bfd_mach_arc_5 5 +#define bfd_mach_arc_6 6 +#define bfd_mach_arc_7 7 +#define bfd_mach_arc_8 8 + bfd_arch_m32c, /* Renesas M16C/M32C. */ +#define bfd_mach_m16c 0x75 +#define bfd_mach_m32c 0x78 + bfd_arch_m32r, /* Renesas M32R (formerly Mitsubishi M32R/D) */ +#define bfd_mach_m32r 1 /* For backwards compatibility. */ +#define bfd_mach_m32rx 'x' +#define bfd_mach_m32r2 '2' + bfd_arch_mn10200, /* Matsushita MN10200 */ + bfd_arch_mn10300, /* Matsushita MN10300 */ +#define bfd_mach_mn10300 300 +#define bfd_mach_am33 330 +#define bfd_mach_am33_2 332 + bfd_arch_fr30, +#define bfd_mach_fr30 0x46523330 + bfd_arch_frv, +#define bfd_mach_frv 1 +#define bfd_mach_frvsimple 2 +#define bfd_mach_fr300 300 +#define bfd_mach_fr400 400 +#define bfd_mach_fr450 450 +#define bfd_mach_frvtomcat 499 /* fr500 prototype */ +#define bfd_mach_fr500 500 +#define bfd_mach_fr550 550 + bfd_arch_mcore, + bfd_arch_mep, +#define bfd_mach_mep 1 +#define bfd_mach_mep_h1 0x6831 + bfd_arch_ia64, /* HP/Intel ia64 */ +#define bfd_mach_ia64_elf64 64 +#define bfd_mach_ia64_elf32 32 + bfd_arch_ip2k, /* Ubicom IP2K microcontrollers. */ +#define bfd_mach_ip2022 1 +#define bfd_mach_ip2022ext 2 + bfd_arch_iq2000, /* Vitesse IQ2000. */ +#define bfd_mach_iq2000 1 +#define bfd_mach_iq10 2 + bfd_arch_mt, +#define bfd_mach_ms1 1 +#define bfd_mach_mrisc2 2 +#define bfd_mach_ms2 3 + bfd_arch_pj, + bfd_arch_avr, /* Atmel AVR microcontrollers. */ +#define bfd_mach_avr1 1 +#define bfd_mach_avr2 2 +#define bfd_mach_avr3 3 +#define bfd_mach_avr4 4 +#define bfd_mach_avr5 5 +#define bfd_mach_avr6 6 + bfd_arch_bfin, /* ADI Blackfin */ +#define bfd_mach_bfin 1 + bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */ +#define bfd_mach_cr16 1 + bfd_arch_cr16c, /* National Semiconductor CompactRISC. */ +#define bfd_mach_cr16c 1 + bfd_arch_crx, /* National Semiconductor CRX. */ +#define bfd_mach_crx 1 + bfd_arch_cris, /* Axis CRIS */ +#define bfd_mach_cris_v0_v10 255 +#define bfd_mach_cris_v32 32 +#define bfd_mach_cris_v10_v32 1032 + bfd_arch_s390, /* IBM s390 */ +#define bfd_mach_s390_31 31 +#define bfd_mach_s390_64 64 + bfd_arch_score, /* Sunplus score */ + bfd_arch_openrisc, /* OpenRISC */ + bfd_arch_mmix, /* Donald Knuth's educational processor. */ + bfd_arch_xstormy16, +#define bfd_mach_xstormy16 1 + bfd_arch_msp430, /* Texas Instruments MSP430 architecture. */ +#define bfd_mach_msp11 11 +#define bfd_mach_msp110 110 +#define bfd_mach_msp12 12 +#define bfd_mach_msp13 13 +#define bfd_mach_msp14 14 +#define bfd_mach_msp15 15 +#define bfd_mach_msp16 16 +#define bfd_mach_msp21 21 +#define bfd_mach_msp31 31 +#define bfd_mach_msp32 32 +#define bfd_mach_msp33 33 +#define bfd_mach_msp41 41 +#define bfd_mach_msp42 42 +#define bfd_mach_msp43 43 +#define bfd_mach_msp44 44 + bfd_arch_xc16x, /* Infineon's XC16X Series. */ +#define bfd_mach_xc16x 1 +#define bfd_mach_xc16xl 2 +#define bfd_mach_xc16xs 3 + bfd_arch_xtensa, /* Tensilica's Xtensa cores. */ +#define bfd_mach_xtensa 1 + bfd_arch_maxq, /* Dallas MAXQ 10/20 */ +#define bfd_mach_maxq10 10 +#define bfd_mach_maxq20 20 + bfd_arch_z80, +#define bfd_mach_z80strict 1 /* No undocumented opcodes. */ +#define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ +#define bfd_mach_z80full 7 /* All undocumented instructions. */ +#define bfd_mach_r800 11 /* R800: successor with multiplication. */ + bfd_arch_last + @}; +@end example + +@subsection bfd_arch_info + + +@strong{Description}@* +This structure contains information on architectures for use +within BFD. +@example + +typedef struct bfd_arch_info +@{ + int bits_per_word; + int bits_per_address; + int bits_per_byte; + enum bfd_architecture arch; + unsigned long mach; + const char *arch_name; + const char *printable_name; + unsigned int section_align_power; + /* TRUE if this is the default machine for the architecture. + The default arch should be the first entry for an arch so that + all the entries for that arch can be accessed via @code{next}. */ + bfd_boolean the_default; + const struct bfd_arch_info * (*compatible) + (const struct bfd_arch_info *a, const struct bfd_arch_info *b); + + bfd_boolean (*scan) (const struct bfd_arch_info *, const char *); + + const struct bfd_arch_info *next; +@} +bfd_arch_info_type; + +@end example + +@findex bfd_printable_name +@subsubsection @code{bfd_printable_name} +@strong{Synopsis} +@example +const char *bfd_printable_name (bfd *abfd); +@end example +@strong{Description}@* +Return a printable string representing the architecture and machine +from the pointer to the architecture info structure. + +@findex bfd_scan_arch +@subsubsection @code{bfd_scan_arch} +@strong{Synopsis} +@example +const bfd_arch_info_type *bfd_scan_arch (const char *string); +@end example +@strong{Description}@* +Figure out if BFD supports any cpu which could be described with +the name @var{string}. Return a pointer to an @code{arch_info} +structure if a machine is found, otherwise NULL. + +@findex bfd_arch_list +@subsubsection @code{bfd_arch_list} +@strong{Synopsis} +@example +const char **bfd_arch_list (void); +@end example +@strong{Description}@* +Return a freshly malloced NULL-terminated vector of the names +of all the valid BFD architectures. Do not modify the names. + +@findex bfd_arch_get_compatible +@subsubsection @code{bfd_arch_get_compatible} +@strong{Synopsis} +@example +const bfd_arch_info_type *bfd_arch_get_compatible + (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns); +@end example +@strong{Description}@* +Determine whether two BFDs' architectures and machine types +are compatible. Calculates the lowest common denominator +between the two architectures and machine types implied by +the BFDs and returns a pointer to an @code{arch_info} structure +describing the compatible machine. + +@findex bfd_default_arch_struct +@subsubsection @code{bfd_default_arch_struct} +@strong{Description}@* +The @code{bfd_default_arch_struct} is an item of +@code{bfd_arch_info_type} which has been initialized to a fairly +generic state. A BFD starts life by pointing to this +structure, until the correct back end has determined the real +architecture of the file. +@example +extern const bfd_arch_info_type bfd_default_arch_struct; +@end example + +@findex bfd_set_arch_info +@subsubsection @code{bfd_set_arch_info} +@strong{Synopsis} +@example +void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg); +@end example +@strong{Description}@* +Set the architecture info of @var{abfd} to @var{arg}. + +@findex bfd_default_set_arch_mach +@subsubsection @code{bfd_default_set_arch_mach} +@strong{Synopsis} +@example +bfd_boolean bfd_default_set_arch_mach + (bfd *abfd, enum bfd_architecture arch, unsigned long mach); +@end example +@strong{Description}@* +Set the architecture and machine type in BFD @var{abfd} +to @var{arch} and @var{mach}. Find the correct +pointer to a structure and insert it into the @code{arch_info} +pointer. + +@findex bfd_get_arch +@subsubsection @code{bfd_get_arch} +@strong{Synopsis} +@example +enum bfd_architecture bfd_get_arch (bfd *abfd); +@end example +@strong{Description}@* +Return the enumerated type which describes the BFD @var{abfd}'s +architecture. + +@findex bfd_get_mach +@subsubsection @code{bfd_get_mach} +@strong{Synopsis} +@example +unsigned long bfd_get_mach (bfd *abfd); +@end example +@strong{Description}@* +Return the long type which describes the BFD @var{abfd}'s +machine. + +@findex bfd_arch_bits_per_byte +@subsubsection @code{bfd_arch_bits_per_byte} +@strong{Synopsis} +@example +unsigned int bfd_arch_bits_per_byte (bfd *abfd); +@end example +@strong{Description}@* +Return the number of bits in one of the BFD @var{abfd}'s +architecture's bytes. + +@findex bfd_arch_bits_per_address +@subsubsection @code{bfd_arch_bits_per_address} +@strong{Synopsis} +@example +unsigned int bfd_arch_bits_per_address (bfd *abfd); +@end example +@strong{Description}@* +Return the number of bits in one of the BFD @var{abfd}'s +architecture's addresses. + +@findex bfd_default_compatible +@subsubsection @code{bfd_default_compatible} +@strong{Synopsis} +@example +const bfd_arch_info_type *bfd_default_compatible + (const bfd_arch_info_type *a, const bfd_arch_info_type *b); +@end example +@strong{Description}@* +The default function for testing for compatibility. + +@findex bfd_default_scan +@subsubsection @code{bfd_default_scan} +@strong{Synopsis} +@example +bfd_boolean bfd_default_scan + (const struct bfd_arch_info *info, const char *string); +@end example +@strong{Description}@* +The default function for working out whether this is an +architecture hit and a machine hit. + +@findex bfd_get_arch_info +@subsubsection @code{bfd_get_arch_info} +@strong{Synopsis} +@example +const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd); +@end example +@strong{Description}@* +Return the architecture info struct in @var{abfd}. + +@findex bfd_lookup_arch +@subsubsection @code{bfd_lookup_arch} +@strong{Synopsis} +@example +const bfd_arch_info_type *bfd_lookup_arch + (enum bfd_architecture arch, unsigned long machine); +@end example +@strong{Description}@* +Look for the architecture info structure which matches the +arguments @var{arch} and @var{machine}. A machine of 0 matches the +machine/architecture structure which marks itself as the +default. + +@findex bfd_printable_arch_mach +@subsubsection @code{bfd_printable_arch_mach} +@strong{Synopsis} +@example +const char *bfd_printable_arch_mach + (enum bfd_architecture arch, unsigned long machine); +@end example +@strong{Description}@* +Return a printable string representing the architecture and +machine type. + +This routine is depreciated. + +@findex bfd_octets_per_byte +@subsubsection @code{bfd_octets_per_byte} +@strong{Synopsis} +@example +unsigned int bfd_octets_per_byte (bfd *abfd); +@end example +@strong{Description}@* +Return the number of octets (8-bit quantities) per target byte +(minimum addressable unit). In most cases, this will be one, but some +DSP targets have 16, 32, or even 48 bits per byte. + +@findex bfd_arch_mach_octets_per_byte +@subsubsection @code{bfd_arch_mach_octets_per_byte} +@strong{Synopsis} +@example +unsigned int bfd_arch_mach_octets_per_byte + (enum bfd_architecture arch, unsigned long machine); +@end example +@strong{Description}@* +See bfd_octets_per_byte. + +This routine is provided for those cases where a bfd * is not +available + diff --git a/bfd/doc/bfd.info b/bfd/doc/bfd.info new file mode 100644 index 000000000..a192a7483 --- /dev/null +++ b/bfd/doc/bfd.info @@ -0,0 +1,10669 @@ +This is bfd.info, produced by makeinfo version 4.8 from bfd.texinfo. + +START-INFO-DIR-ENTRY +* Bfd: (bfd). The Binary File Descriptor library. +END-INFO-DIR-ENTRY + + This file documents the BFD library. + + Copyright (C) 1991, 2000, 2001, 2003, 2006, 2007 Free Software +Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with the +Invariant Sections being "GNU General Public License" and "Funding Free +Software", the Front-Cover texts being (a) (see below), and with the +Back-Cover Texts being (b) (see below). A copy of the license is +included in the section entitled "GNU Free Documentation License". + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU +software. Copies published by the Free Software Foundation raise +funds for GNU development. + + +File: bfd.info, Node: Top, Next: Overview, Prev: (dir), Up: (dir) + + This file documents the binary file descriptor library libbfd. + +* Menu: + +* Overview:: Overview of BFD +* BFD front end:: BFD front end +* BFD back ends:: BFD back ends +* GNU Free Documentation License:: GNU Free Documentation License +* BFD Index:: BFD Index + + +File: bfd.info, Node: Overview, Next: BFD front end, Prev: Top, Up: Top + +1 Introduction +************** + +BFD is a package which allows applications to use the same routines to +operate on object files whatever the object file format. A new object +file format can be supported simply by creating a new BFD back end and +adding it to the library. + + BFD is split into two parts: the front end, and the back ends (one +for each object file format). + * The front end of BFD provides the interface to the user. It manages + memory and various canonical data structures. The front end also + decides which back end to use and when to call back end routines. + + * The back ends provide BFD its view of the real world. Each back + end provides a set of calls which the BFD front end can use to + maintain its canonical form. The back ends also may keep around + information for their own use, for greater efficiency. + +* Menu: + +* History:: History +* How It Works:: How It Works +* What BFD Version 2 Can Do:: What BFD Version 2 Can Do + + +File: bfd.info, Node: History, Next: How It Works, Prev: Overview, Up: Overview + +1.1 History +=========== + +One spur behind BFD was the desire, on the part of the GNU 960 team at +Intel Oregon, for interoperability of applications on their COFF and +b.out file formats. Cygnus was providing GNU support for the team, and +was contracted to provide the required functionality. + + The name came from a conversation David Wallace was having with +Richard Stallman about the library: RMS said that it would be quite +hard--David said "BFD". Stallman was right, but the name stuck. + + At the same time, Ready Systems wanted much the same thing, but for +different object file formats: IEEE-695, Oasys, Srecords, a.out and 68k +coff. + + BFD was first implemented by members of Cygnus Support; Steve +Chamberlain (`sac@cygnus.com'), John Gilmore (`gnu@cygnus.com'), K. +Richard Pixley (`rich@cygnus.com') and David Henkel-Wallace +(`gumby@cygnus.com'). + + +File: bfd.info, Node: How It Works, Next: What BFD Version 2 Can Do, Prev: History, Up: Overview + +1.2 How To Use BFD +================== + +To use the library, include `bfd.h' and link with `libbfd.a'. + + BFD provides a common interface to the parts of an object file for a +calling application. + + When an application successfully opens a target file (object, +archive, or whatever), a pointer to an internal structure is returned. +This pointer points to a structure called `bfd', described in `bfd.h'. +Our convention is to call this pointer a BFD, and instances of it +within code `abfd'. All operations on the target object file are +applied as methods to the BFD. The mapping is defined within `bfd.h' +in a set of macros, all beginning with `bfd_' to reduce namespace +pollution. + + For example, this sequence does what you would probably expect: +return the number of sections in an object file attached to a BFD +`abfd'. + + #include "bfd.h" + + unsigned int number_of_sections (abfd) + bfd *abfd; + { + return bfd_count_sections (abfd); + } + + The abstraction used within BFD is that an object file has: + + * a header, + + * a number of sections containing raw data (*note Sections::), + + * a set of relocations (*note Relocations::), and + + * some symbol information (*note Symbols::). + Also, BFDs opened for archives have the additional attribute of an +index and contain subordinate BFDs. This approach is fine for a.out and +coff, but loses efficiency when applied to formats such as S-records and +IEEE-695. + + +File: bfd.info, Node: What BFD Version 2 Can Do, Prev: How It Works, Up: Overview + +1.3 What BFD Version 2 Can Do +============================= + +When an object file is opened, BFD subroutines automatically determine +the format of the input object file. They then build a descriptor in +memory with pointers to routines that will be used to access elements of +the object file's data structures. + + As different information from the object files is required, BFD +reads from different sections of the file and processes them. For +example, a very common operation for the linker is processing symbol +tables. Each BFD back end provides a routine for converting between +the object file's representation of symbols and an internal canonical +format. When the linker asks for the symbol table of an object file, it +calls through a memory pointer to the routine from the relevant BFD +back end which reads and converts the table into a canonical form. The +linker then operates upon the canonical form. When the link is finished +and the linker writes the output file's symbol table, another BFD back +end routine is called to take the newly created symbol table and +convert it into the chosen output format. + +* Menu: + +* BFD information loss:: Information Loss +* Canonical format:: The BFD canonical object-file format + + +File: bfd.info, Node: BFD information loss, Next: Canonical format, Up: What BFD Version 2 Can Do + +1.3.1 Information Loss +---------------------- + +_Information can be lost during output._ The output formats supported +by BFD do not provide identical facilities, and information which can +be described in one form has nowhere to go in another format. One +example of this is alignment information in `b.out'. There is nowhere +in an `a.out' format file to store alignment information on the +contained data, so when a file is linked from `b.out' and an `a.out' +image is produced, alignment information will not propagate to the +output file. (The linker will still use the alignment information +internally, so the link is performed correctly). + + Another example is COFF section names. COFF files may contain an +unlimited number of sections, each one with a textual section name. If +the target of the link is a format which does not have many sections +(e.g., `a.out') or has sections without names (e.g., the Oasys format), +the link cannot be done simply. You can circumvent this problem by +describing the desired input-to-output section mapping with the linker +command language. + + _Information can be lost during canonicalization._ The BFD internal +canonical form of the external formats is not exhaustive; there are +structures in input formats for which there is no direct representation +internally. This means that the BFD back ends cannot maintain all +possible data richness through the transformation between external to +internal and back to external formats. + + This limitation is only a problem when an application reads one +format and writes another. Each BFD back end is responsible for +maintaining as much data as possible, and the internal BFD canonical +form has structures which are opaque to the BFD core, and exported only +to the back ends. When a file is read in one format, the canonical form +is generated for BFD and the application. At the same time, the back +end saves away any information which may otherwise be lost. If the data +is then written back in the same format, the back end routine will be +able to use the canonical form provided by the BFD core as well as the +information it prepared earlier. Since there is a great deal of +commonality between back ends, there is no information lost when +linking or copying big endian COFF to little endian COFF, or `a.out' to +`b.out'. When a mixture of formats is linked, the information is only +lost from the files whose format differs from the destination. + + +File: bfd.info, Node: Canonical format, Prev: BFD information loss, Up: What BFD Version 2 Can Do + +1.3.2 The BFD canonical object-file format +------------------------------------------ + +The greatest potential for loss of information occurs when there is the +least overlap between the information provided by the source format, +that stored by the canonical format, and that needed by the destination +format. A brief description of the canonical form may help you +understand which kinds of data you can count on preserving across +conversions. + +_files_ + Information stored on a per-file basis includes target machine + architecture, particular implementation format type, a demand + pageable bit, and a write protected bit. Information like Unix + magic numbers is not stored here--only the magic numbers' meaning, + so a `ZMAGIC' file would have both the demand pageable bit and the + write protected text bit set. The byte order of the target is + stored on a per-file basis, so that big- and little-endian object + files may be used with one another. + +_sections_ + Each section in the input file contains the name of the section, + the section's original address in the object file, size and + alignment information, various flags, and pointers into other BFD + data structures. + +_symbols_ + Each symbol contains a pointer to the information for the object + file which originally defined it, its name, its value, and various + flag bits. When a BFD back end reads in a symbol table, it + relocates all symbols to make them relative to the base of the + section where they were defined. Doing this ensures that each + symbol points to its containing section. Each symbol also has a + varying amount of hidden private data for the BFD back end. Since + the symbol points to the original file, the private data format + for that symbol is accessible. `ld' can operate on a collection + of symbols of wildly different formats without problems. + + Normal global and simple local symbols are maintained on output, + so an output file (no matter its format) will retain symbols + pointing to functions and to global, static, and common variables. + Some symbol information is not worth retaining; in `a.out', type + information is stored in the symbol table as long symbol names. + This information would be useless to most COFF debuggers; the + linker has command line switches to allow users to throw it away. + + There is one word of type information within the symbol, so if the + format supports symbol type information within symbols (for + example, COFF, IEEE, Oasys) and the type is simple enough to fit + within one word (nearly everything but aggregates), the + information will be preserved. + +_relocation level_ + Each canonical BFD relocation record contains a pointer to the + symbol to relocate to, the offset of the data to relocate, the + section the data is in, and a pointer to a relocation type + descriptor. Relocation is performed by passing messages through + the relocation type descriptor and the symbol pointer. Therefore, + relocations can be performed on output data using a relocation + method that is only available in one of the input formats. For + instance, Oasys provides a byte relocation format. A relocation + record requesting this relocation type would point indirectly to a + routine to perform this, so the relocation may be performed on a + byte being written to a 68k COFF file, even though 68k COFF has no + such relocation type. + +_line numbers_ + Object formats can contain, for debugging purposes, some form of + mapping between symbols, source line numbers, and addresses in the + output file. These addresses have to be relocated along with the + symbol information. Each symbol with an associated list of line + number records points to the first record of the list. The head + of a line number list consists of a pointer to the symbol, which + allows finding out the address of the function whose line number + is being described. The rest of the list is made up of pairs: + offsets into the section and line numbers. Any format which can + simply derive this information can pass it successfully between + formats (COFF, IEEE and Oasys). + + +File: bfd.info, Node: BFD front end, Next: BFD back ends, Prev: Overview, Up: Top + +2 BFD Front End +*************** + +2.1 `typedef bfd' +================= + +A BFD has type `bfd'; objects of this type are the cornerstone of any +application using BFD. Using BFD consists of making references though +the BFD and to data in the BFD. + + Here is the structure that defines the type `bfd'. It contains the +major data about the file and pointers to the rest of the data. + + + struct bfd + { + /* A unique identifier of the BFD */ + unsigned int id; + + /* The filename the application opened the BFD with. */ + const char *filename; + + /* A pointer to the target jump table. */ + const struct bfd_target *xvec; + + /* The IOSTREAM, and corresponding IO vector that provide access + to the file backing the BFD. */ + void *iostream; + const struct bfd_iovec *iovec; + + /* Is the file descriptor being cached? That is, can it be closed as + needed, and re-opened when accessed later? */ + bfd_boolean cacheable; + + /* Marks whether there was a default target specified when the + BFD was opened. This is used to select which matching algorithm + to use to choose the back end. */ + bfd_boolean target_defaulted; + + /* The caching routines use these to maintain a + least-recently-used list of BFDs. */ + struct bfd *lru_prev, *lru_next; + + /* When a file is closed by the caching routines, BFD retains + state information on the file here... */ + ufile_ptr where; + + /* ... and here: (``once'' means at least once). */ + bfd_boolean opened_once; + + /* Set if we have a locally maintained mtime value, rather than + getting it from the file each time. */ + bfd_boolean mtime_set; + + /* File modified time, if mtime_set is TRUE. */ + long mtime; + + /* Reserved for an unimplemented file locking extension. */ + int ifd; + + /* The format which belongs to the BFD. (object, core, etc.) */ + bfd_format format; + + /* The direction with which the BFD was opened. */ + enum bfd_direction + { + no_direction = 0, + read_direction = 1, + write_direction = 2, + both_direction = 3 + } + direction; + + /* Format_specific flags. */ + flagword flags; + + /* Currently my_archive is tested before adding origin to + anything. I believe that this can become always an add of + origin, with origin set to 0 for non archive files. */ + ufile_ptr origin; + + /* Remember when output has begun, to stop strange things + from happening. */ + bfd_boolean output_has_begun; + + /* A hash table for section names. */ + struct bfd_hash_table section_htab; + + /* Pointer to linked list of sections. */ + struct bfd_section *sections; + + /* The last section on the section list. */ + struct bfd_section *section_last; + + /* The number of sections. */ + unsigned int section_count; + + /* Stuff only useful for object files: + The start address. */ + bfd_vma start_address; + + /* Used for input and output. */ + unsigned int symcount; + + /* Symbol table for output BFD (with symcount entries). */ + struct bfd_symbol **outsymbols; + + /* Used for slurped dynamic symbol tables. */ + unsigned int dynsymcount; + + /* Pointer to structure which contains architecture information. */ + const struct bfd_arch_info *arch_info; + + /* Flag set if symbols from this BFD should not be exported. */ + bfd_boolean no_export; + + /* Stuff only useful for archives. */ + void *arelt_data; + struct bfd *my_archive; /* The containing archive BFD. */ + struct bfd *archive_next; /* The next BFD in the archive. */ + struct bfd *archive_head; /* The first BFD in the archive. */ + bfd_boolean has_armap; + + /* A chain of BFD structures involved in a link. */ + struct bfd *link_next; + + /* A field used by _bfd_generic_link_add_archive_symbols. This will + be used only for archive elements. */ + int archive_pass; + + /* Used by the back end to hold private data. */ + union + { + struct aout_data_struct *aout_data; + struct artdata *aout_ar_data; + struct _oasys_data *oasys_obj_data; + struct _oasys_ar_data *oasys_ar_data; + struct coff_tdata *coff_obj_data; + struct pe_tdata *pe_obj_data; + struct xcoff_tdata *xcoff_obj_data; + struct ecoff_tdata *ecoff_obj_data; + struct ieee_data_struct *ieee_data; + struct ieee_ar_data_struct *ieee_ar_data; + struct srec_data_struct *srec_data; + struct ihex_data_struct *ihex_data; + struct tekhex_data_struct *tekhex_data; + struct elf_obj_tdata *elf_obj_data; + struct nlm_obj_tdata *nlm_obj_data; + struct bout_data_struct *bout_data; + struct mmo_data_struct *mmo_data; + struct sun_core_struct *sun_core_data; + struct sco5_core_struct *sco5_core_data; + struct trad_core_struct *trad_core_data; + struct som_data_struct *som_data; + struct hpux_core_struct *hpux_core_data; + struct hppabsd_core_struct *hppabsd_core_data; + struct sgi_core_struct *sgi_core_data; + struct lynx_core_struct *lynx_core_data; + struct osf_core_struct *osf_core_data; + struct cisco_core_struct *cisco_core_data; + struct versados_data_struct *versados_data; + struct netbsd_core_struct *netbsd_core_data; + struct mach_o_data_struct *mach_o_data; + struct mach_o_fat_data_struct *mach_o_fat_data; + struct bfd_pef_data_struct *pef_data; + struct bfd_pef_xlib_data_struct *pef_xlib_data; + struct bfd_sym_data_struct *sym_data; + void *any; + } + tdata; + + /* Used by the application to hold private data. */ + void *usrdata; + + /* Where all the allocated stuff under this BFD goes. This is a + struct objalloc *, but we use void * to avoid requiring the inclusion + of objalloc.h. */ + void *memory; + }; + +2.2 Error reporting +=================== + +Most BFD functions return nonzero on success (check their individual +documentation for precise semantics). On an error, they call +`bfd_set_error' to set an error condition that callers can check by +calling `bfd_get_error'. If that returns `bfd_error_system_call', then +check `errno'. + + The easiest way to report a BFD error to the user is to use +`bfd_perror'. + +2.2.1 Type `bfd_error_type' +--------------------------- + +The values returned by `bfd_get_error' are defined by the enumerated +type `bfd_error_type'. + + + typedef enum bfd_error + { + bfd_error_no_error = 0, + bfd_error_system_call, + bfd_error_invalid_target, + bfd_error_wrong_format, + bfd_error_wrong_object_format, + bfd_error_invalid_operation, + bfd_error_no_memory, + bfd_error_no_symbols, + bfd_error_no_armap, + bfd_error_no_more_archived_files, + bfd_error_malformed_archive, + bfd_error_file_not_recognized, + bfd_error_file_ambiguously_recognized, + bfd_error_no_contents, + bfd_error_nonrepresentable_section, + bfd_error_no_debug_section, + bfd_error_bad_value, + bfd_error_file_truncated, + bfd_error_file_too_big, + bfd_error_on_input, + bfd_error_invalid_error_code + } + bfd_error_type; + +2.2.1.1 `bfd_get_error' +....................... + +*Synopsis* + bfd_error_type bfd_get_error (void); + *Description* +Return the current BFD error condition. + +2.2.1.2 `bfd_set_error' +....................... + +*Synopsis* + void bfd_set_error (bfd_error_type error_tag, ...); + *Description* +Set the BFD error condition to be ERROR_TAG. If ERROR_TAG is +bfd_error_on_input, then this function takes two more parameters, the +input bfd where the error occurred, and the bfd_error_type error. + +2.2.1.3 `bfd_errmsg' +.................... + +*Synopsis* + const char *bfd_errmsg (bfd_error_type error_tag); + *Description* +Return a string describing the error ERROR_TAG, or the system error if +ERROR_TAG is `bfd_error_system_call'. + +2.2.1.4 `bfd_perror' +.................... + +*Synopsis* + void bfd_perror (const char *message); + *Description* +Print to the standard error stream a string describing the last BFD +error that occurred, or the last system error if the last BFD error was +a system call failure. If MESSAGE is non-NULL and non-empty, the error +string printed is preceded by MESSAGE, a colon, and a space. It is +followed by a newline. + +2.2.2 BFD error handler +----------------------- + +Some BFD functions want to print messages describing the problem. They +call a BFD error handler function. This function may be overridden by +the program. + + The BFD error handler acts like printf. + + + typedef void (*bfd_error_handler_type) (const char *, ...); + +2.2.2.1 `bfd_set_error_handler' +............................... + +*Synopsis* + bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type); + *Description* +Set the BFD error handler function. Returns the previous function. + +2.2.2.2 `bfd_set_error_program_name' +.................................... + +*Synopsis* + void bfd_set_error_program_name (const char *); + *Description* +Set the program name to use when printing a BFD error. This is printed +before the error message followed by a colon and space. The string +must not be changed after it is passed to this function. + +2.2.2.3 `bfd_get_error_handler' +............................... + +*Synopsis* + bfd_error_handler_type bfd_get_error_handler (void); + *Description* +Return the BFD error handler function. + +2.3 Miscellaneous +================= + +2.3.1 Miscellaneous functions +----------------------------- + +2.3.1.1 `bfd_get_reloc_upper_bound' +................................... + +*Synopsis* + long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect); + *Description* +Return the number of bytes required to store the relocation information +associated with section SECT attached to bfd ABFD. If an error occurs, +return -1. + +2.3.1.2 `bfd_canonicalize_reloc' +................................ + +*Synopsis* + long bfd_canonicalize_reloc + (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); + *Description* +Call the back end associated with the open BFD ABFD and translate the +external form of the relocation information attached to SEC into the +internal canonical form. Place the table into memory at LOC, which has +been preallocated, usually by a call to `bfd_get_reloc_upper_bound'. +Returns the number of relocs, or -1 on error. + + The SYMS table is also needed for horrible internal magic reasons. + +2.3.1.3 `bfd_set_reloc' +....................... + +*Synopsis* + void bfd_set_reloc + (bfd *abfd, asection *sec, arelent **rel, unsigned int count); + *Description* +Set the relocation pointer and count within section SEC to the values +REL and COUNT. The argument ABFD is ignored. + +2.3.1.4 `bfd_set_file_flags' +............................ + +*Synopsis* + bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags); + *Description* +Set the flag word in the BFD ABFD to the value FLAGS. + + Possible errors are: + * `bfd_error_wrong_format' - The target bfd was not of object format. + + * `bfd_error_invalid_operation' - The target bfd was open for + reading. + + * `bfd_error_invalid_operation' - The flag word contained a bit + which was not applicable to the type of file. E.g., an attempt + was made to set the `D_PAGED' bit on a BFD format which does not + support demand paging. + +2.3.1.5 `bfd_get_arch_size' +........................... + +*Synopsis* + int bfd_get_arch_size (bfd *abfd); + *Description* +Returns the architecture address size, in bits, as determined by the +object file's format. For ELF, this information is included in the +header. + + *Returns* +Returns the arch size in bits if known, `-1' otherwise. + +2.3.1.6 `bfd_get_sign_extend_vma' +................................. + +*Synopsis* + int bfd_get_sign_extend_vma (bfd *abfd); + *Description* +Indicates if the target architecture "naturally" sign extends an +address. Some architectures implicitly sign extend address values when +they are converted to types larger than the size of an address. For +instance, bfd_get_start_address() will return an address sign extended +to fill a bfd_vma when this is the case. + + *Returns* +Returns `1' if the target architecture is known to sign extend +addresses, `0' if the target architecture is known to not sign extend +addresses, and `-1' otherwise. + +2.3.1.7 `bfd_set_start_address' +............................... + +*Synopsis* + bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma); + *Description* +Make VMA the entry point of output BFD ABFD. + + *Returns* +Returns `TRUE' on success, `FALSE' otherwise. + +2.3.1.8 `bfd_get_gp_size' +......................... + +*Synopsis* + unsigned int bfd_get_gp_size (bfd *abfd); + *Description* +Return the maximum size of objects to be optimized using the GP +register under MIPS ECOFF. This is typically set by the `-G' argument +to the compiler, assembler or linker. + +2.3.1.9 `bfd_set_gp_size' +......................... + +*Synopsis* + void bfd_set_gp_size (bfd *abfd, unsigned int i); + *Description* +Set the maximum size of objects to be optimized using the GP register +under ECOFF or MIPS ELF. This is typically set by the `-G' argument to +the compiler, assembler or linker. + +2.3.1.10 `bfd_scan_vma' +....................... + +*Synopsis* + bfd_vma bfd_scan_vma (const char *string, const char **end, int base); + *Description* +Convert, like `strtoul', a numerical expression STRING into a `bfd_vma' +integer, and return that integer. (Though without as many bells and +whistles as `strtoul'.) The expression is assumed to be unsigned +(i.e., positive). If given a BASE, it is used as the base for +conversion. A base of 0 causes the function to interpret the string in +hex if a leading "0x" or "0X" is found, otherwise in octal if a leading +zero is found, otherwise in decimal. + + If the value would overflow, the maximum `bfd_vma' value is returned. + +2.3.1.11 `bfd_copy_private_header_data' +....................................... + +*Synopsis* + bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd); + *Description* +Copy private BFD header information from the BFD IBFD to the the BFD +OBFD. This copies information that may require sections to exist, but +does not require symbol tables. Return `true' on success, `false' on +error. Possible error returns are: + + * `bfd_error_no_memory' - Not enough memory exists to create private + data for OBFD. + + #define bfd_copy_private_header_data(ibfd, obfd) \ + BFD_SEND (obfd, _bfd_copy_private_header_data, \ + (ibfd, obfd)) + +2.3.1.12 `bfd_copy_private_bfd_data' +.................................... + +*Synopsis* + bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd); + *Description* +Copy private BFD information from the BFD IBFD to the the BFD OBFD. +Return `TRUE' on success, `FALSE' on error. Possible error returns are: + + * `bfd_error_no_memory' - Not enough memory exists to create private + data for OBFD. + + #define bfd_copy_private_bfd_data(ibfd, obfd) \ + BFD_SEND (obfd, _bfd_copy_private_bfd_data, \ + (ibfd, obfd)) + +2.3.1.13 `bfd_merge_private_bfd_data' +..................................... + +*Synopsis* + bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd); + *Description* +Merge private BFD information from the BFD IBFD to the the output file +BFD OBFD when linking. Return `TRUE' on success, `FALSE' on error. +Possible error returns are: + + * `bfd_error_no_memory' - Not enough memory exists to create private + data for OBFD. + + #define bfd_merge_private_bfd_data(ibfd, obfd) \ + BFD_SEND (obfd, _bfd_merge_private_bfd_data, \ + (ibfd, obfd)) + +2.3.1.14 `bfd_set_private_flags' +................................ + +*Synopsis* + bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags); + *Description* +Set private BFD flag information in the BFD ABFD. Return `TRUE' on +success, `FALSE' on error. Possible error returns are: + + * `bfd_error_no_memory' - Not enough memory exists to create private + data for OBFD. + + #define bfd_set_private_flags(abfd, flags) \ + BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags)) + +2.3.1.15 `Other functions' +.......................... + +*Description* +The following functions exist but have not yet been documented. + #define bfd_sizeof_headers(abfd, info) \ + BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info)) + + #define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \ + BFD_SEND (abfd, _bfd_find_nearest_line, \ + (abfd, sec, syms, off, file, func, line)) + + #define bfd_find_line(abfd, syms, sym, file, line) \ + BFD_SEND (abfd, _bfd_find_line, \ + (abfd, syms, sym, file, line)) + + #define bfd_find_inliner_info(abfd, file, func, line) \ + BFD_SEND (abfd, _bfd_find_inliner_info, \ + (abfd, file, func, line)) + + #define bfd_debug_info_start(abfd) \ + BFD_SEND (abfd, _bfd_debug_info_start, (abfd)) + + #define bfd_debug_info_end(abfd) \ + BFD_SEND (abfd, _bfd_debug_info_end, (abfd)) + + #define bfd_debug_info_accumulate(abfd, section) \ + BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) + + #define bfd_stat_arch_elt(abfd, stat) \ + BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) + + #define bfd_update_armap_timestamp(abfd) \ + BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) + + #define bfd_set_arch_mach(abfd, arch, mach)\ + BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) + + #define bfd_relax_section(abfd, section, link_info, again) \ + BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again)) + + #define bfd_gc_sections(abfd, link_info) \ + BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info)) + + #define bfd_merge_sections(abfd, link_info) \ + BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info)) + + #define bfd_is_group_section(abfd, sec) \ + BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec)) + + #define bfd_discard_group(abfd, sec) \ + BFD_SEND (abfd, _bfd_discard_group, (abfd, sec)) + + #define bfd_link_hash_table_create(abfd) \ + BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) + + #define bfd_link_hash_table_free(abfd, hash) \ + BFD_SEND (abfd, _bfd_link_hash_table_free, (hash)) + + #define bfd_link_add_symbols(abfd, info) \ + BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) + + #define bfd_link_just_syms(abfd, sec, info) \ + BFD_SEND (abfd, _bfd_link_just_syms, (sec, info)) + + #define bfd_final_link(abfd, info) \ + BFD_SEND (abfd, _bfd_final_link, (abfd, info)) + + #define bfd_free_cached_info(abfd) \ + BFD_SEND (abfd, _bfd_free_cached_info, (abfd)) + + #define bfd_get_dynamic_symtab_upper_bound(abfd) \ + BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd)) + + #define bfd_print_private_bfd_data(abfd, file)\ + BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file)) + + #define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \ + BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols)) + + #define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \ + BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \ + dyncount, dynsyms, ret)) + + #define bfd_get_dynamic_reloc_upper_bound(abfd) \ + BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd)) + + #define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \ + BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms)) + + extern bfd_byte *bfd_get_relocated_section_contents + (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, + bfd_boolean, asymbol **); + +2.3.1.16 `bfd_alt_mach_code' +............................ + +*Synopsis* + bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative); + *Description* +When more than one machine code number is available for the same +machine type, this function can be used to switch between the preferred +one (alternative == 0) and any others. Currently, only ELF supports +this feature, with up to two alternate machine codes. + + struct bfd_preserve + { + void *marker; + void *tdata; + flagword flags; + const struct bfd_arch_info *arch_info; + struct bfd_section *sections; + struct bfd_section *section_last; + unsigned int section_count; + struct bfd_hash_table section_htab; + }; + +2.3.1.17 `bfd_preserve_save' +............................ + +*Synopsis* + bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *); + *Description* +When testing an object for compatibility with a particular target +back-end, the back-end object_p function needs to set up certain fields +in the bfd on successfully recognizing the object. This typically +happens in a piecemeal fashion, with failures possible at many points. +On failure, the bfd is supposed to be restored to its initial state, +which is virtually impossible. However, restoring a subset of the bfd +state works in practice. This function stores the subset and +reinitializes the bfd. + +2.3.1.18 `bfd_preserve_restore' +............................... + +*Synopsis* + void bfd_preserve_restore (bfd *, struct bfd_preserve *); + *Description* +This function restores bfd state saved by bfd_preserve_save. If MARKER +is non-NULL in struct bfd_preserve then that block and all subsequently +bfd_alloc'd memory is freed. + +2.3.1.19 `bfd_preserve_finish' +.............................. + +*Synopsis* + void bfd_preserve_finish (bfd *, struct bfd_preserve *); + *Description* +This function should be called when the bfd state saved by +bfd_preserve_save is no longer needed. ie. when the back-end object_p +function returns with success. + +2.3.1.20 `bfd_emul_get_maxpagesize' +................................... + +*Synopsis* + bfd_vma bfd_emul_get_maxpagesize (const char *); + *Description* +Returns the maximum page size, in bytes, as determined by emulation. + + *Returns* +Returns the maximum page size in bytes for ELF, abort otherwise. + +2.3.1.21 `bfd_emul_set_maxpagesize' +................................... + +*Synopsis* + void bfd_emul_set_maxpagesize (const char *, bfd_vma); + *Description* +For ELF, set the maximum page size for the emulation. It is a no-op +for other formats. + +2.3.1.22 `bfd_emul_get_commonpagesize' +...................................... + +*Synopsis* + bfd_vma bfd_emul_get_commonpagesize (const char *); + *Description* +Returns the common page size, in bytes, as determined by emulation. + + *Returns* +Returns the common page size in bytes for ELF, abort otherwise. + +2.3.1.23 `bfd_emul_set_commonpagesize' +...................................... + +*Synopsis* + void bfd_emul_set_commonpagesize (const char *, bfd_vma); + *Description* +For ELF, set the common page size for the emulation. It is a no-op for +other formats. + +2.3.1.24 `bfd_demangle' +....................... + +*Synopsis* + char *bfd_demangle (bfd *, const char *, int); + *Description* +Wrapper around cplus_demangle. Strips leading underscores and other +such chars that would otherwise confuse the demangler. If passed a g++ +v3 ABI mangled name, returns a buffer allocated with malloc holding the +demangled name. Returns NULL otherwise and on memory alloc failure. + +2.3.1.25 `struct bfd_iovec' +........................... + +*Description* +The `struct bfd_iovec' contains the internal file I/O class. Each +`BFD' has an instance of this class and all file I/O is routed through +it (it is assumed that the instance implements all methods listed +below). + struct bfd_iovec + { + /* To avoid problems with macros, a "b" rather than "f" + prefix is prepended to each method name. */ + /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching + bytes starting at PTR. Return the number of bytes actually + transfered (a read past end-of-file returns less than NBYTES), + or -1 (setting `bfd_error') if an error occurs. */ + file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes); + file_ptr (*bwrite) (struct bfd *abfd, const void *ptr, + file_ptr nbytes); + /* Return the current IOSTREAM file offset, or -1 (setting `bfd_error' + if an error occurs. */ + file_ptr (*btell) (struct bfd *abfd); + /* For the following, on successful completion a value of 0 is returned. + Otherwise, a value of -1 is returned (and `bfd_error' is set). */ + int (*bseek) (struct bfd *abfd, file_ptr offset, int whence); + int (*bclose) (struct bfd *abfd); + int (*bflush) (struct bfd *abfd); + int (*bstat) (struct bfd *abfd, struct stat *sb); + }; + +2.3.1.26 `bfd_get_mtime' +........................ + +*Synopsis* + long bfd_get_mtime (bfd *abfd); + *Description* +Return the file modification time (as read from the file system, or +from the archive header for archive members). + +2.3.1.27 `bfd_get_size' +....................... + +*Synopsis* + file_ptr bfd_get_size (bfd *abfd); + *Description* +Return the file size (as read from file system) for the file associated +with BFD ABFD. + + The initial motivation for, and use of, this routine is not so we +can get the exact size of the object the BFD applies to, since that +might not be generally possible (archive members for example). It +would be ideal if someone could eventually modify it so that such +results were guaranteed. + + Instead, we want to ask questions like "is this NNN byte sized +object I'm about to try read from file offset YYY reasonable?" As as +example of where we might do this, some object formats use string +tables for which the first `sizeof (long)' bytes of the table contain +the size of the table itself, including the size bytes. If an +application tries to read what it thinks is one of these string tables, +without some way to validate the size, and for some reason the size is +wrong (byte swapping error, wrong location for the string table, etc.), +the only clue is likely to be a read error when it tries to read the +table, or a "virtual memory exhausted" error when it tries to allocate +15 bazillon bytes of space for the 15 bazillon byte table it is about +to read. This function at least allows us to answer the question, "is +the size reasonable?". + +* Menu: + +* Memory Usage:: +* Initialization:: +* Sections:: +* Symbols:: +* Archives:: +* Formats:: +* Relocations:: +* Core Files:: +* Targets:: +* Architectures:: +* Opening and Closing:: +* Internal:: +* File Caching:: +* Linker Functions:: +* Hash Tables:: + + +File: bfd.info, Node: Memory Usage, Next: Initialization, Prev: BFD front end, Up: BFD front end + +2.4 Memory Usage +================ + +BFD keeps all of its internal structures in obstacks. There is one +obstack per open BFD file, into which the current state is stored. When +a BFD is closed, the obstack is deleted, and so everything which has +been allocated by BFD for the closing file is thrown away. + + BFD does not free anything created by an application, but pointers +into `bfd' structures become invalid on a `bfd_close'; for example, +after a `bfd_close' the vector passed to `bfd_canonicalize_symtab' is +still around, since it has been allocated by the application, but the +data that it pointed to are lost. + + The general rule is to not close a BFD until all operations dependent +upon data from the BFD have been completed, or all the data from within +the file has been copied. To help with the management of memory, there +is a function (`bfd_alloc_size') which returns the number of bytes in +obstacks associated with the supplied BFD. This could be used to select +the greediest open BFD, close it to reclaim the memory, perform some +operation and reopen the BFD again, to get a fresh copy of the data +structures. + + +File: bfd.info, Node: Initialization, Next: Sections, Prev: Memory Usage, Up: BFD front end + +2.5 Initialization +================== + +2.5.1 Initialization functions +------------------------------ + +These are the functions that handle initializing a BFD. + +2.5.1.1 `bfd_init' +.................. + +*Synopsis* + void bfd_init (void); + *Description* +This routine must be called before any other BFD function to initialize +magical internal data structures. + + +File: bfd.info, Node: Sections, Next: Symbols, Prev: Initialization, Up: BFD front end + +2.6 Sections +============ + +The raw data contained within a BFD is maintained through the section +abstraction. A single BFD may have any number of sections. It keeps +hold of them by pointing to the first; each one points to the next in +the list. + + Sections are supported in BFD in `section.c'. + +* Menu: + +* Section Input:: +* Section Output:: +* typedef asection:: +* section prototypes:: + + +File: bfd.info, Node: Section Input, Next: Section Output, Prev: Sections, Up: Sections + +2.6.1 Section input +------------------- + +When a BFD is opened for reading, the section structures are created +and attached to the BFD. + + Each section has a name which describes the section in the outside +world--for example, `a.out' would contain at least three sections, +called `.text', `.data' and `.bss'. + + Names need not be unique; for example a COFF file may have several +sections named `.data'. + + Sometimes a BFD will contain more than the "natural" number of +sections. A back end may attach other sections containing constructor +data, or an application may add a section (using `bfd_make_section') to +the sections attached to an already open BFD. For example, the linker +creates an extra section `COMMON' for each input file's BFD to hold +information about common storage. + + The raw data is not necessarily read in when the section descriptor +is created. Some targets may leave the data in place until a +`bfd_get_section_contents' call is made. Other back ends may read in +all the data at once. For example, an S-record file has to be read +once to determine the size of the data. An IEEE-695 file doesn't +contain raw data in sections, but data and relocation expressions +intermixed, so the data area has to be parsed to get out the data and +relocations. + + +File: bfd.info, Node: Section Output, Next: typedef asection, Prev: Section Input, Up: Sections + +2.6.2 Section output +-------------------- + +To write a new object style BFD, the various sections to be written +have to be created. They are attached to the BFD in the same way as +input sections; data is written to the sections using +`bfd_set_section_contents'. + + Any program that creates or combines sections (e.g., the assembler +and linker) must use the `asection' fields `output_section' and +`output_offset' to indicate the file sections to which each section +must be written. (If the section is being created from scratch, +`output_section' should probably point to the section itself and +`output_offset' should probably be zero.) + + The data to be written comes from input sections attached (via +`output_section' pointers) to the output sections. The output section +structure can be considered a filter for the input section: the output +section determines the vma of the output data and the name, but the +input section determines the offset into the output section of the data +to be written. + + E.g., to create a section "O", starting at 0x100, 0x123 long, +containing two subsections, "A" at offset 0x0 (i.e., at vma 0x100) and +"B" at offset 0x20 (i.e., at vma 0x120) the `asection' structures would +look like: + + section name "A" + output_offset 0x00 + size 0x20 + output_section -----------> section name "O" + | vma 0x100 + section name "B" | size 0x123 + output_offset 0x20 | + size 0x103 | + output_section --------| + +2.6.3 Link orders +----------------- + +The data within a section is stored in a "link_order". These are much +like the fixups in `gas'. The link_order abstraction allows a section +to grow and shrink within itself. + + A link_order knows how big it is, and which is the next link_order +and where the raw data for it is; it also points to a list of +relocations which apply to it. + + The link_order is used by the linker to perform relaxing on final +code. The compiler creates code which is as big as necessary to make +it work without relaxing, and the user can select whether to relax. +Sometimes relaxing takes a lot of time. The linker runs around the +relocations to see if any are attached to data which can be shrunk, if +so it does it on a link_order by link_order basis. + + +File: bfd.info, Node: typedef asection, Next: section prototypes, Prev: Section Output, Up: Sections + +2.6.4 typedef asection +---------------------- + +Here is the section structure: + + + typedef struct bfd_section + { + /* The name of the section; the name isn't a copy, the pointer is + the same as that passed to bfd_make_section. */ + const char *name; + + /* A unique sequence number. */ + int id; + + /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */ + int index; + + /* The next section in the list belonging to the BFD, or NULL. */ + struct bfd_section *next; + + /* The previous section in the list belonging to the BFD, or NULL. */ + struct bfd_section *prev; + + /* The field flags contains attributes of the section. Some + flags are read in from the object file, and some are + synthesized from other information. */ + flagword flags; + + #define SEC_NO_FLAGS 0x000 + + /* Tells the OS to allocate space for this section when loading. + This is clear for a section containing debug information only. */ + #define SEC_ALLOC 0x001 + + /* Tells the OS to load the section from the file when loading. + This is clear for a .bss section. */ + #define SEC_LOAD 0x002 + + /* The section contains data still to be relocated, so there is + some relocation information too. */ + #define SEC_RELOC 0x004 + + /* A signal to the OS that the section contains read only data. */ + #define SEC_READONLY 0x008 + + /* The section contains code only. */ + #define SEC_CODE 0x010 + + /* The section contains data only. */ + #define SEC_DATA 0x020 + + /* The section will reside in ROM. */ + #define SEC_ROM 0x040 + + /* The section contains constructor information. This section + type is used by the linker to create lists of constructors and + destructors used by `g++'. When a back end sees a symbol + which should be used in a constructor list, it creates a new + section for the type of name (e.g., `__CTOR_LIST__'), attaches + the symbol to it, and builds a relocation. To build the lists + of constructors, all the linker has to do is catenate all the + sections called `__CTOR_LIST__' and relocate the data + contained within - exactly the operations it would peform on + standard data. */ + #define SEC_CONSTRUCTOR 0x080 + + /* The section has contents - a data section could be + `SEC_ALLOC' | `SEC_HAS_CONTENTS'; a debug section could be + `SEC_HAS_CONTENTS' */ + #define SEC_HAS_CONTENTS 0x100 + + /* An instruction to the linker to not output the section + even if it has information which would normally be written. */ + #define SEC_NEVER_LOAD 0x200 + + /* The section contains thread local data. */ + #define SEC_THREAD_LOCAL 0x400 + + /* The section has GOT references. This flag is only for the + linker, and is currently only used by the elf32-hppa back end. + It will be set if global offset table references were detected + in this section, which indicate to the linker that the section + contains PIC code, and must be handled specially when doing a + static link. */ + #define SEC_HAS_GOT_REF 0x800 + + /* The section contains common symbols (symbols may be defined + multiple times, the value of a symbol is the amount of + space it requires, and the largest symbol value is the one + used). Most targets have exactly one of these (which we + translate to bfd_com_section_ptr), but ECOFF has two. */ + #define SEC_IS_COMMON 0x1000 + + /* The section contains only debugging information. For + example, this is set for ELF .debug and .stab sections. + strip tests this flag to see if a section can be + discarded. */ + #define SEC_DEBUGGING 0x2000 + + /* The contents of this section are held in memory pointed to + by the contents field. This is checked by bfd_get_section_contents, + and the data is retrieved from memory if appropriate. */ + #define SEC_IN_MEMORY 0x4000 + + /* The contents of this section are to be excluded by the + linker for executable and shared objects unless those + objects are to be further relocated. */ + #define SEC_EXCLUDE 0x8000 + + /* The contents of this section are to be sorted based on the sum of + the symbol and addend values specified by the associated relocation + entries. Entries without associated relocation entries will be + appended to the end of the section in an unspecified order. */ + #define SEC_SORT_ENTRIES 0x10000 + + /* When linking, duplicate sections of the same name should be + discarded, rather than being combined into a single section as + is usually done. This is similar to how common symbols are + handled. See SEC_LINK_DUPLICATES below. */ + #define SEC_LINK_ONCE 0x20000 + + /* If SEC_LINK_ONCE is set, this bitfield describes how the linker + should handle duplicate sections. */ + #define SEC_LINK_DUPLICATES 0x40000 + + /* This value for SEC_LINK_DUPLICATES means that duplicate + sections with the same name should simply be discarded. */ + #define SEC_LINK_DUPLICATES_DISCARD 0x0 + + /* This value for SEC_LINK_DUPLICATES means that the linker + should warn if there are any duplicate sections, although + it should still only link one copy. */ + #define SEC_LINK_DUPLICATES_ONE_ONLY 0x80000 + + /* This value for SEC_LINK_DUPLICATES means that the linker + should warn if any duplicate sections are a different size. */ + #define SEC_LINK_DUPLICATES_SAME_SIZE 0x100000 + + /* This value for SEC_LINK_DUPLICATES means that the linker + should warn if any duplicate sections contain different + contents. */ + #define SEC_LINK_DUPLICATES_SAME_CONTENTS \ + (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE) + + /* This section was created by the linker as part of dynamic + relocation or other arcane processing. It is skipped when + going through the first-pass output, trusting that someone + else up the line will take care of it later. */ + #define SEC_LINKER_CREATED 0x200000 + + /* This section should not be subject to garbage collection. + Also set to inform the linker that this section should not be + listed in the link map as discarded. */ + #define SEC_KEEP 0x400000 + + /* This section contains "short" data, and should be placed + "near" the GP. */ + #define SEC_SMALL_DATA 0x800000 + + /* Attempt to merge identical entities in the section. + Entity size is given in the entsize field. */ + #define SEC_MERGE 0x1000000 + + /* If given with SEC_MERGE, entities to merge are zero terminated + strings where entsize specifies character size instead of fixed + size entries. */ + #define SEC_STRINGS 0x2000000 + + /* This section contains data about section groups. */ + #define SEC_GROUP 0x4000000 + + /* The section is a COFF shared library section. This flag is + only for the linker. If this type of section appears in + the input file, the linker must copy it to the output file + without changing the vma or size. FIXME: Although this + was originally intended to be general, it really is COFF + specific (and the flag was renamed to indicate this). It + might be cleaner to have some more general mechanism to + allow the back end to control what the linker does with + sections. */ + #define SEC_COFF_SHARED_LIBRARY 0x10000000 + + /* This section contains data which may be shared with other + executables or shared objects. This is for COFF only. */ + #define SEC_COFF_SHARED 0x20000000 + + /* When a section with this flag is being linked, then if the size of + the input section is less than a page, it should not cross a page + boundary. If the size of the input section is one page or more, + it should be aligned on a page boundary. This is for TI + TMS320C54X only. */ + #define SEC_TIC54X_BLOCK 0x40000000 + + /* Conditionally link this section; do not link if there are no + references found to any symbol in the section. This is for TI + TMS320C54X only. */ + #define SEC_TIC54X_CLINK 0x80000000 + + /* End of section flags. */ + + /* Some internal packed boolean fields. */ + + /* See the vma field. */ + unsigned int user_set_vma : 1; + + /* A mark flag used by some of the linker backends. */ + unsigned int linker_mark : 1; + + /* Another mark flag used by some of the linker backends. Set for + output sections that have an input section. */ + unsigned int linker_has_input : 1; + + /* Mark flags used by some linker backends for garbage collection. */ + unsigned int gc_mark : 1; + unsigned int gc_mark_from_eh : 1; + + /* The following flags are used by the ELF linker. */ + + /* Mark sections which have been allocated to segments. */ + unsigned int segment_mark : 1; + + /* Type of sec_info information. */ + unsigned int sec_info_type:3; + #define ELF_INFO_TYPE_NONE 0 + #define ELF_INFO_TYPE_STABS 1 + #define ELF_INFO_TYPE_MERGE 2 + #define ELF_INFO_TYPE_EH_FRAME 3 + #define ELF_INFO_TYPE_JUST_SYMS 4 + + /* Nonzero if this section uses RELA relocations, rather than REL. */ + unsigned int use_rela_p:1; + + /* Bits used by various backends. The generic code doesn't touch + these fields. */ + + /* Nonzero if this section has TLS related relocations. */ + unsigned int has_tls_reloc:1; + + /* Nonzero if this section has a gp reloc. */ + unsigned int has_gp_reloc:1; + + /* Nonzero if this section needs the relax finalize pass. */ + unsigned int need_finalize_relax:1; + + /* Whether relocations have been processed. */ + unsigned int reloc_done : 1; + + /* End of internal packed boolean fields. */ + + /* The virtual memory address of the section - where it will be + at run time. The symbols are relocated against this. The + user_set_vma flag is maintained by bfd; if it's not set, the + backend can assign addresses (for example, in `a.out', where + the default address for `.data' is dependent on the specific + target and various flags). */ + bfd_vma vma; + + /* The load address of the section - where it would be in a + rom image; really only used for writing section header + information. */ + bfd_vma lma; + + /* The size of the section in octets, as it will be output. + Contains a value even if the section has no contents (e.g., the + size of `.bss'). */ + bfd_size_type size; + + /* For input sections, the original size on disk of the section, in + octets. This field is used by the linker relaxation code. It is + currently only set for sections where the linker relaxation scheme + doesn't cache altered section and reloc contents (stabs, eh_frame, + SEC_MERGE, some coff relaxing targets), and thus the original size + needs to be kept to read the section multiple times. + For output sections, rawsize holds the section size calculated on + a previous linker relaxation pass. */ + bfd_size_type rawsize; + + /* If this section is going to be output, then this value is the + offset in *bytes* into the output section of the first byte in the + input section (byte ==> smallest addressable unit on the + target). In most cases, if this was going to start at the + 100th octet (8-bit quantity) in the output section, this value + would be 100. However, if the target byte size is 16 bits + (bfd_octets_per_byte is "2"), this value would be 50. */ + bfd_vma output_offset; + + /* The output section through which to map on output. */ + struct bfd_section *output_section; + + /* The alignment requirement of the section, as an exponent of 2 - + e.g., 3 aligns to 2^3 (or 8). */ + unsigned int alignment_power; + + /* If an input section, a pointer to a vector of relocation + records for the data in this section. */ + struct reloc_cache_entry *relocation; + + /* If an output section, a pointer to a vector of pointers to + relocation records for the data in this section. */ + struct reloc_cache_entry **orelocation; + + /* The number of relocation records in one of the above. */ + unsigned reloc_count; + + /* Information below is back end specific - and not always used + or updated. */ + + /* File position of section data. */ + file_ptr filepos; + + /* File position of relocation info. */ + file_ptr rel_filepos; + + /* File position of line data. */ + file_ptr line_filepos; + + /* Pointer to data for applications. */ + void *userdata; + + /* If the SEC_IN_MEMORY flag is set, this points to the actual + contents. */ + unsigned char *contents; + + /* Attached line number information. */ + alent *lineno; + + /* Number of line number records. */ + unsigned int lineno_count; + + /* Entity size for merging purposes. */ + unsigned int entsize; + + /* Points to the kept section if this section is a link-once section, + and is discarded. */ + struct bfd_section *kept_section; + + /* When a section is being output, this value changes as more + linenumbers are written out. */ + file_ptr moving_line_filepos; + + /* What the section number is in the target world. */ + int target_index; + + void *used_by_bfd; + + /* If this is a constructor section then here is a list of the + relocations created to relocate items within it. */ + struct relent_chain *constructor_chain; + + /* The BFD which owns the section. */ + bfd *owner; + + /* A symbol which points at this section only. */ + struct bfd_symbol *symbol; + struct bfd_symbol **symbol_ptr_ptr; + + /* Early in the link process, map_head and map_tail are used to build + a list of input sections attached to an output section. Later, + output sections use these fields for a list of bfd_link_order + structs. */ + union { + struct bfd_link_order *link_order; + struct bfd_section *s; + } map_head, map_tail; + } asection; + + /* These sections are global, and are managed by BFD. The application + and target back end are not permitted to change the values in + these sections. New code should use the section_ptr macros rather + than referring directly to the const sections. The const sections + may eventually vanish. */ + #define BFD_ABS_SECTION_NAME "*ABS*" + #define BFD_UND_SECTION_NAME "*UND*" + #define BFD_COM_SECTION_NAME "*COM*" + #define BFD_IND_SECTION_NAME "*IND*" + + /* The absolute section. */ + extern asection bfd_abs_section; + #define bfd_abs_section_ptr ((asection *) &bfd_abs_section) + #define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr) + /* Pointer to the undefined section. */ + extern asection bfd_und_section; + #define bfd_und_section_ptr ((asection *) &bfd_und_section) + #define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr) + /* Pointer to the common section. */ + extern asection bfd_com_section; + #define bfd_com_section_ptr ((asection *) &bfd_com_section) + /* Pointer to the indirect section. */ + extern asection bfd_ind_section; + #define bfd_ind_section_ptr ((asection *) &bfd_ind_section) + #define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr) + + #define bfd_is_const_section(SEC) \ + ( ((SEC) == bfd_abs_section_ptr) \ + || ((SEC) == bfd_und_section_ptr) \ + || ((SEC) == bfd_com_section_ptr) \ + || ((SEC) == bfd_ind_section_ptr)) + + /* Macros to handle insertion and deletion of a bfd's sections. These + only handle the list pointers, ie. do not adjust section_count, + target_index etc. */ + #define bfd_section_list_remove(ABFD, S) \ + do \ + { \ + asection *_s = S; \ + asection *_next = _s->next; \ + asection *_prev = _s->prev; \ + if (_prev) \ + _prev->next = _next; \ + else \ + (ABFD)->sections = _next; \ + if (_next) \ + _next->prev = _prev; \ + else \ + (ABFD)->section_last = _prev; \ + } \ + while (0) + #define bfd_section_list_append(ABFD, S) \ + do \ + { \ + asection *_s = S; \ + bfd *_abfd = ABFD; \ + _s->next = NULL; \ + if (_abfd->section_last) \ + { \ + _s->prev = _abfd->section_last; \ + _abfd->section_last->next = _s; \ + } \ + else \ + { \ + _s->prev = NULL; \ + _abfd->sections = _s; \ + } \ + _abfd->section_last = _s; \ + } \ + while (0) + #define bfd_section_list_prepend(ABFD, S) \ + do \ + { \ + asection *_s = S; \ + bfd *_abfd = ABFD; \ + _s->prev = NULL; \ + if (_abfd->sections) \ + { \ + _s->next = _abfd->sections; \ + _abfd->sections->prev = _s; \ + } \ + else \ + { \ + _s->next = NULL; \ + _abfd->section_last = _s; \ + } \ + _abfd->sections = _s; \ + } \ + while (0) + #define bfd_section_list_insert_after(ABFD, A, S) \ + do \ + { \ + asection *_a = A; \ + asection *_s = S; \ + asection *_next = _a->next; \ + _s->next = _next; \ + _s->prev = _a; \ + _a->next = _s; \ + if (_next) \ + _next->prev = _s; \ + else \ + (ABFD)->section_last = _s; \ + } \ + while (0) + #define bfd_section_list_insert_before(ABFD, B, S) \ + do \ + { \ + asection *_b = B; \ + asection *_s = S; \ + asection *_prev = _b->prev; \ + _s->prev = _prev; \ + _s->next = _b; \ + _b->prev = _s; \ + if (_prev) \ + _prev->next = _s; \ + else \ + (ABFD)->sections = _s; \ + } \ + while (0) + #define bfd_section_removed_from_list(ABFD, S) \ + ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S)) + + #define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \ + /* name, id, index, next, prev, flags, user_set_vma, */ \ + { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ + \ + /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ \ + 0, 0, 1, 0, \ + \ + /* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, */ \ + 0, 0, 0, 0, \ + \ + /* has_gp_reloc, need_finalize_relax, reloc_done, */ \ + 0, 0, 0, \ + \ + /* vma, lma, size, rawsize */ \ + 0, 0, 0, 0, \ + \ + /* output_offset, output_section, alignment_power, */ \ + 0, (struct bfd_section *) &SEC, 0, \ + \ + /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ + NULL, NULL, 0, 0, 0, \ + \ + /* line_filepos, userdata, contents, lineno, lineno_count, */ \ + 0, NULL, NULL, NULL, 0, \ + \ + /* entsize, kept_section, moving_line_filepos, */ \ + 0, NULL, 0, \ + \ + /* target_index, used_by_bfd, constructor_chain, owner, */ \ + 0, NULL, NULL, NULL, \ + \ + /* symbol, symbol_ptr_ptr, */ \ + (struct bfd_symbol *) SYM, &SEC.symbol, \ + \ + /* map_head, map_tail */ \ + { NULL }, { NULL } \ + } + + +File: bfd.info, Node: section prototypes, Prev: typedef asection, Up: Sections + +2.6.5 Section prototypes +------------------------ + +These are the functions exported by the section handling part of BFD. + +2.6.5.1 `bfd_section_list_clear' +................................ + +*Synopsis* + void bfd_section_list_clear (bfd *); + *Description* +Clears the section list, and also resets the section count and hash +table entries. + +2.6.5.2 `bfd_get_section_by_name' +................................. + +*Synopsis* + asection *bfd_get_section_by_name (bfd *abfd, const char *name); + *Description* +Run through ABFD and return the one of the `asection's whose name +matches NAME, otherwise `NULL'. *Note Sections::, for more information. + + This should only be used in special cases; the normal way to process +all sections of a given name is to use `bfd_map_over_sections' and +`strcmp' on the name (or better yet, base it on the section flags or +something else) for each section. + +2.6.5.3 `bfd_get_section_by_name_if' +.................................... + +*Synopsis* + asection *bfd_get_section_by_name_if + (bfd *abfd, + const char *name, + bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj), + void *obj); + *Description* +Call the provided function FUNC for each section attached to the BFD +ABFD whose name matches NAME, passing OBJ as an argument. The function +will be called as if by + + func (abfd, the_section, obj); + + It returns the first section for which FUNC returns true, otherwise +`NULL'. + +2.6.5.4 `bfd_get_unique_section_name' +..................................... + +*Synopsis* + char *bfd_get_unique_section_name + (bfd *abfd, const char *templat, int *count); + *Description* +Invent a section name that is unique in ABFD by tacking a dot and a +digit suffix onto the original TEMPLAT. If COUNT is non-NULL, then it +specifies the first number tried as a suffix to generate a unique name. +The value pointed to by COUNT will be incremented in this case. + +2.6.5.5 `bfd_make_section_old_way' +.................................. + +*Synopsis* + asection *bfd_make_section_old_way (bfd *abfd, const char *name); + *Description* +Create a new empty section called NAME and attach it to the end of the +chain of sections for the BFD ABFD. An attempt to create a section with +a name which is already in use returns its pointer without changing the +section chain. + + It has the funny name since this is the way it used to be before it +was rewritten.... + + Possible errors are: + * `bfd_error_invalid_operation' - If output has already started for + this BFD. + + * `bfd_error_no_memory' - If memory allocation fails. + +2.6.5.6 `bfd_make_section_anyway_with_flags' +............................................ + +*Synopsis* + asection *bfd_make_section_anyway_with_flags + (bfd *abfd, const char *name, flagword flags); + *Description* +Create a new empty section called NAME and attach it to the end of the +chain of sections for ABFD. Create a new section even if there is +already a section with that name. Also set the attributes of the new +section to the value FLAGS. + + Return `NULL' and set `bfd_error' on error; possible errors are: + * `bfd_error_invalid_operation' - If output has already started for + ABFD. + + * `bfd_error_no_memory' - If memory allocation fails. + +2.6.5.7 `bfd_make_section_anyway' +................................. + +*Synopsis* + asection *bfd_make_section_anyway (bfd *abfd, const char *name); + *Description* +Create a new empty section called NAME and attach it to the end of the +chain of sections for ABFD. Create a new section even if there is +already a section with that name. + + Return `NULL' and set `bfd_error' on error; possible errors are: + * `bfd_error_invalid_operation' - If output has already started for + ABFD. + + * `bfd_error_no_memory' - If memory allocation fails. + +2.6.5.8 `bfd_make_section_with_flags' +..................................... + +*Synopsis* + asection *bfd_make_section_with_flags + (bfd *, const char *name, flagword flags); + *Description* +Like `bfd_make_section_anyway', but return `NULL' (without calling +bfd_set_error ()) without changing the section chain if there is +already a section named NAME. Also set the attributes of the new +section to the value FLAGS. If there is an error, return `NULL' and set +`bfd_error'. + +2.6.5.9 `bfd_make_section' +.......................... + +*Synopsis* + asection *bfd_make_section (bfd *, const char *name); + *Description* +Like `bfd_make_section_anyway', but return `NULL' (without calling +bfd_set_error ()) without changing the section chain if there is +already a section named NAME. If there is an error, return `NULL' and +set `bfd_error'. + +2.6.5.10 `bfd_set_section_flags' +................................ + +*Synopsis* + bfd_boolean bfd_set_section_flags + (bfd *abfd, asection *sec, flagword flags); + *Description* +Set the attributes of the section SEC in the BFD ABFD to the value +FLAGS. Return `TRUE' on success, `FALSE' on error. Possible error +returns are: + + * `bfd_error_invalid_operation' - The section cannot have one or + more of the attributes requested. For example, a .bss section in + `a.out' may not have the `SEC_HAS_CONTENTS' field set. + +2.6.5.11 `bfd_map_over_sections' +................................ + +*Synopsis* + void bfd_map_over_sections + (bfd *abfd, + void (*func) (bfd *abfd, asection *sect, void *obj), + void *obj); + *Description* +Call the provided function FUNC for each section attached to the BFD +ABFD, passing OBJ as an argument. The function will be called as if by + + func (abfd, the_section, obj); + + This is the preferred method for iterating over sections; an +alternative would be to use a loop: + + section *p; + for (p = abfd->sections; p != NULL; p = p->next) + func (abfd, p, ...) + +2.6.5.12 `bfd_sections_find_if' +............................... + +*Synopsis* + asection *bfd_sections_find_if + (bfd *abfd, + bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj), + void *obj); + *Description* +Call the provided function OPERATION for each section attached to the +BFD ABFD, passing OBJ as an argument. The function will be called as if +by + + operation (abfd, the_section, obj); + + It returns the first section for which OPERATION returns true. + +2.6.5.13 `bfd_set_section_size' +............................... + +*Synopsis* + bfd_boolean bfd_set_section_size + (bfd *abfd, asection *sec, bfd_size_type val); + *Description* +Set SEC to the size VAL. If the operation is ok, then `TRUE' is +returned, else `FALSE'. + + Possible error returns: + * `bfd_error_invalid_operation' - Writing has started to the BFD, so + setting the size is invalid. + +2.6.5.14 `bfd_set_section_contents' +................................... + +*Synopsis* + bfd_boolean bfd_set_section_contents + (bfd *abfd, asection *section, const void *data, + file_ptr offset, bfd_size_type count); + *Description* +Sets the contents of the section SECTION in BFD ABFD to the data +starting in memory at DATA. The data is written to the output section +starting at offset OFFSET for COUNT octets. + + Normally `TRUE' is returned, else `FALSE'. Possible error returns +are: + * `bfd_error_no_contents' - The output section does not have the + `SEC_HAS_CONTENTS' attribute, so nothing can be written to it. + + * and some more too + This routine is front end to the back end function +`_bfd_set_section_contents'. + +2.6.5.15 `bfd_get_section_contents' +................................... + +*Synopsis* + bfd_boolean bfd_get_section_contents + (bfd *abfd, asection *section, void *location, file_ptr offset, + bfd_size_type count); + *Description* +Read data from SECTION in BFD ABFD into memory starting at LOCATION. +The data is read at an offset of OFFSET from the start of the input +section, and is read for COUNT bytes. + + If the contents of a constructor with the `SEC_CONSTRUCTOR' flag set +are requested or if the section does not have the `SEC_HAS_CONTENTS' +flag set, then the LOCATION is filled with zeroes. If no errors occur, +`TRUE' is returned, else `FALSE'. + +2.6.5.16 `bfd_malloc_and_get_section' +..................................... + +*Synopsis* + bfd_boolean bfd_malloc_and_get_section + (bfd *abfd, asection *section, bfd_byte **buf); + *Description* +Read all data from SECTION in BFD ABFD into a buffer, *BUF, malloc'd by +this function. + +2.6.5.17 `bfd_copy_private_section_data' +........................................ + +*Synopsis* + bfd_boolean bfd_copy_private_section_data + (bfd *ibfd, asection *isec, bfd *obfd, asection *osec); + *Description* +Copy private section information from ISEC in the BFD IBFD to the +section OSEC in the BFD OBFD. Return `TRUE' on success, `FALSE' on +error. Possible error returns are: + + * `bfd_error_no_memory' - Not enough memory exists to create private + data for OSEC. + + #define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \ + BFD_SEND (obfd, _bfd_copy_private_section_data, \ + (ibfd, isection, obfd, osection)) + +2.6.5.18 `bfd_generic_is_group_section' +....................................... + +*Synopsis* + bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec); + *Description* +Returns TRUE if SEC is a member of a group. + +2.6.5.19 `bfd_generic_discard_group' +.................................... + +*Synopsis* + bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group); + *Description* +Remove all members of GROUP from the output. + + +File: bfd.info, Node: Symbols, Next: Archives, Prev: Sections, Up: BFD front end + +2.7 Symbols +=========== + +BFD tries to maintain as much symbol information as it can when it +moves information from file to file. BFD passes information to +applications though the `asymbol' structure. When the application +requests the symbol table, BFD reads the table in the native form and +translates parts of it into the internal format. To maintain more than +the information passed to applications, some targets keep some +information "behind the scenes" in a structure only the particular back +end knows about. For example, the coff back end keeps the original +symbol table structure as well as the canonical structure when a BFD is +read in. On output, the coff back end can reconstruct the output symbol +table so that no information is lost, even information unique to coff +which BFD doesn't know or understand. If a coff symbol table were read, +but were written through an a.out back end, all the coff specific +information would be lost. The symbol table of a BFD is not necessarily +read in until a canonicalize request is made. Then the BFD back end +fills in a table provided by the application with pointers to the +canonical information. To output symbols, the application provides BFD +with a table of pointers to pointers to `asymbol's. This allows +applications like the linker to output a symbol as it was read, since +the "behind the scenes" information will be still available. + +* Menu: + +* Reading Symbols:: +* Writing Symbols:: +* Mini Symbols:: +* typedef asymbol:: +* symbol handling functions:: + + +File: bfd.info, Node: Reading Symbols, Next: Writing Symbols, Prev: Symbols, Up: Symbols + +2.7.1 Reading symbols +--------------------- + +There are two stages to reading a symbol table from a BFD: allocating +storage, and the actual reading process. This is an excerpt from an +application which reads the symbol table: + + long storage_needed; + asymbol **symbol_table; + long number_of_symbols; + long i; + + storage_needed = bfd_get_symtab_upper_bound (abfd); + + if (storage_needed < 0) + FAIL + + if (storage_needed == 0) + return; + + symbol_table = xmalloc (storage_needed); + ... + number_of_symbols = + bfd_canonicalize_symtab (abfd, symbol_table); + + if (number_of_symbols < 0) + FAIL + + for (i = 0; i < number_of_symbols; i++) + process_symbol (symbol_table[i]); + + All storage for the symbols themselves is in an objalloc connected +to the BFD; it is freed when the BFD is closed. + + +File: bfd.info, Node: Writing Symbols, Next: Mini Symbols, Prev: Reading Symbols, Up: Symbols + +2.7.2 Writing symbols +--------------------- + +Writing of a symbol table is automatic when a BFD open for writing is +closed. The application attaches a vector of pointers to pointers to +symbols to the BFD being written, and fills in the symbol count. The +close and cleanup code reads through the table provided and performs +all the necessary operations. The BFD output code must always be +provided with an "owned" symbol: one which has come from another BFD, +or one which has been created using `bfd_make_empty_symbol'. Here is an +example showing the creation of a symbol table with only one element: + + #include "bfd.h" + int main (void) + { + bfd *abfd; + asymbol *ptrs[2]; + asymbol *new; + + abfd = bfd_openw ("foo","a.out-sunos-big"); + bfd_set_format (abfd, bfd_object); + new = bfd_make_empty_symbol (abfd); + new->name = "dummy_symbol"; + new->section = bfd_make_section_old_way (abfd, ".text"); + new->flags = BSF_GLOBAL; + new->value = 0x12345; + + ptrs[0] = new; + ptrs[1] = 0; + + bfd_set_symtab (abfd, ptrs, 1); + bfd_close (abfd); + return 0; + } + + ./makesym + nm foo + 00012345 A dummy_symbol + + Many formats cannot represent arbitrary symbol information; for +instance, the `a.out' object format does not allow an arbitrary number +of sections. A symbol pointing to a section which is not one of +`.text', `.data' or `.bss' cannot be described. + + +File: bfd.info, Node: Mini Symbols, Next: typedef asymbol, Prev: Writing Symbols, Up: Symbols + +2.7.3 Mini Symbols +------------------ + +Mini symbols provide read-only access to the symbol table. They use +less memory space, but require more time to access. They can be useful +for tools like nm or objdump, which may have to handle symbol tables of +extremely large executables. + + The `bfd_read_minisymbols' function will read the symbols into +memory in an internal form. It will return a `void *' pointer to a +block of memory, a symbol count, and the size of each symbol. The +pointer is allocated using `malloc', and should be freed by the caller +when it is no longer needed. + + The function `bfd_minisymbol_to_symbol' will take a pointer to a +minisymbol, and a pointer to a structure returned by +`bfd_make_empty_symbol', and return a `asymbol' structure. The return +value may or may not be the same as the value from +`bfd_make_empty_symbol' which was passed in. + + +File: bfd.info, Node: typedef asymbol, Next: symbol handling functions, Prev: Mini Symbols, Up: Symbols + +2.7.4 typedef asymbol +--------------------- + +An `asymbol' has the form: + + + typedef struct bfd_symbol + { + /* A pointer to the BFD which owns the symbol. This information + is necessary so that a back end can work out what additional + information (invisible to the application writer) is carried + with the symbol. + + This field is *almost* redundant, since you can use section->owner + instead, except that some symbols point to the global sections + bfd_{abs,com,und}_section. This could be fixed by making + these globals be per-bfd (or per-target-flavor). FIXME. */ + struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */ + + /* The text of the symbol. The name is left alone, and not copied; the + application may not alter it. */ + const char *name; + + /* The value of the symbol. This really should be a union of a + numeric value with a pointer, since some flags indicate that + a pointer to another symbol is stored here. */ + symvalue value; + + /* Attributes of a symbol. */ + #define BSF_NO_FLAGS 0x00 + + /* The symbol has local scope; `static' in `C'. The value + is the offset into the section of the data. */ + #define BSF_LOCAL 0x01 + + /* The symbol has global scope; initialized data in `C'. The + value is the offset into the section of the data. */ + #define BSF_GLOBAL 0x02 + + /* The symbol has global scope and is exported. The value is + the offset into the section of the data. */ + #define BSF_EXPORT BSF_GLOBAL /* No real difference. */ + + /* A normal C symbol would be one of: + `BSF_LOCAL', `BSF_FORT_COMM', `BSF_UNDEFINED' or + `BSF_GLOBAL'. */ + + /* The symbol is a debugging record. The value has an arbitrary + meaning, unless BSF_DEBUGGING_RELOC is also set. */ + #define BSF_DEBUGGING 0x08 + + /* The symbol denotes a function entry point. Used in ELF, + perhaps others someday. */ + #define BSF_FUNCTION 0x10 + + /* Used by the linker. */ + #define BSF_KEEP 0x20 + #define BSF_KEEP_G 0x40 + + /* A weak global symbol, overridable without warnings by + a regular global symbol of the same name. */ + #define BSF_WEAK 0x80 + + /* This symbol was created to point to a section, e.g. ELF's + STT_SECTION symbols. */ + #define BSF_SECTION_SYM 0x100 + + /* The symbol used to be a common symbol, but now it is + allocated. */ + #define BSF_OLD_COMMON 0x200 + + /* The default value for common data. */ + #define BFD_FORT_COMM_DEFAULT_VALUE 0 + + /* In some files the type of a symbol sometimes alters its + location in an output file - ie in coff a `ISFCN' symbol + which is also `C_EXT' symbol appears where it was + declared and not at the end of a section. This bit is set + by the target BFD part to convey this information. */ + #define BSF_NOT_AT_END 0x400 + + /* Signal that the symbol is the label of constructor section. */ + #define BSF_CONSTRUCTOR 0x800 + + /* Signal that the symbol is a warning symbol. The name is a + warning. The name of the next symbol is the one to warn about; + if a reference is made to a symbol with the same name as the next + symbol, a warning is issued by the linker. */ + #define BSF_WARNING 0x1000 + + /* Signal that the symbol is indirect. This symbol is an indirect + pointer to the symbol with the same name as the next symbol. */ + #define BSF_INDIRECT 0x2000 + + /* BSF_FILE marks symbols that contain a file name. This is used + for ELF STT_FILE symbols. */ + #define BSF_FILE 0x4000 + + /* Symbol is from dynamic linking information. */ + #define BSF_DYNAMIC 0x8000 + + /* The symbol denotes a data object. Used in ELF, and perhaps + others someday. */ + #define BSF_OBJECT 0x10000 + + /* This symbol is a debugging symbol. The value is the offset + into the section of the data. BSF_DEBUGGING should be set + as well. */ + #define BSF_DEBUGGING_RELOC 0x20000 + + /* This symbol is thread local. Used in ELF. */ + #define BSF_THREAD_LOCAL 0x40000 + + /* This symbol represents a complex relocation expression, + with the expression tree serialized in the symbol name. */ + #define BSF_RELC 0x80000 + + /* This symbol represents a signed complex relocation expression, + with the expression tree serialized in the symbol name. */ + #define BSF_SRELC 0x100000 + + flagword flags; + + /* A pointer to the section to which this symbol is + relative. This will always be non NULL, there are special + sections for undefined and absolute symbols. */ + struct bfd_section *section; + + /* Back end special data. */ + union + { + void *p; + bfd_vma i; + } + udata; + } + asymbol; + + +File: bfd.info, Node: symbol handling functions, Prev: typedef asymbol, Up: Symbols + +2.7.5 Symbol handling functions +------------------------------- + +2.7.5.1 `bfd_get_symtab_upper_bound' +.................................... + +*Description* +Return the number of bytes required to store a vector of pointers to +`asymbols' for all the symbols in the BFD ABFD, including a terminal +NULL pointer. If there are no symbols in the BFD, then return 0. If an +error occurs, return -1. + #define bfd_get_symtab_upper_bound(abfd) \ + BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd)) + +2.7.5.2 `bfd_is_local_label' +............................ + +*Synopsis* + bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym); + *Description* +Return TRUE if the given symbol SYM in the BFD ABFD is a compiler +generated local label, else return FALSE. + +2.7.5.3 `bfd_is_local_label_name' +................................. + +*Synopsis* + bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name); + *Description* +Return TRUE if a symbol with the name NAME in the BFD ABFD is a +compiler generated local label, else return FALSE. This just checks +whether the name has the form of a local label. + #define bfd_is_local_label_name(abfd, name) \ + BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name)) + +2.7.5.4 `bfd_is_target_special_symbol' +...................................... + +*Synopsis* + bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym); + *Description* +Return TRUE iff a symbol SYM in the BFD ABFD is something special to +the particular target represented by the BFD. Such symbols should +normally not be mentioned to the user. + #define bfd_is_target_special_symbol(abfd, sym) \ + BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym)) + +2.7.5.5 `bfd_canonicalize_symtab' +................................. + +*Description* +Read the symbols from the BFD ABFD, and fills in the vector LOCATION +with pointers to the symbols and a trailing NULL. Return the actual +number of symbol pointers, not including the NULL. + #define bfd_canonicalize_symtab(abfd, location) \ + BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location)) + +2.7.5.6 `bfd_set_symtab' +........................ + +*Synopsis* + bfd_boolean bfd_set_symtab + (bfd *abfd, asymbol **location, unsigned int count); + *Description* +Arrange that when the output BFD ABFD is closed, the table LOCATION of +COUNT pointers to symbols will be written. + +2.7.5.7 `bfd_print_symbol_vandf' +................................ + +*Synopsis* + void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol); + *Description* +Print the value and flags of the SYMBOL supplied to the stream FILE. + +2.7.5.8 `bfd_make_empty_symbol' +............................... + +*Description* +Create a new `asymbol' structure for the BFD ABFD and return a pointer +to it. + + This routine is necessary because each back end has private +information surrounding the `asymbol'. Building your own `asymbol' and +pointing to it will not create the private information, and will cause +problems later on. + #define bfd_make_empty_symbol(abfd) \ + BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd)) + +2.7.5.9 `_bfd_generic_make_empty_symbol' +........................................ + +*Synopsis* + asymbol *_bfd_generic_make_empty_symbol (bfd *); + *Description* +Create a new `asymbol' structure for the BFD ABFD and return a pointer +to it. Used by core file routines, binary back-end and anywhere else +where no private info is needed. + +2.7.5.10 `bfd_make_debug_symbol' +................................ + +*Description* +Create a new `asymbol' structure for the BFD ABFD, to be used as a +debugging symbol. Further details of its use have yet to be worked out. + #define bfd_make_debug_symbol(abfd,ptr,size) \ + BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size)) + +2.7.5.11 `bfd_decode_symclass' +.............................. + +*Description* +Return a character corresponding to the symbol class of SYMBOL, or '?' +for an unknown class. + + *Synopsis* + int bfd_decode_symclass (asymbol *symbol); + +2.7.5.12 `bfd_is_undefined_symclass' +.................................... + +*Description* +Returns non-zero if the class symbol returned by bfd_decode_symclass +represents an undefined symbol. Returns zero otherwise. + + *Synopsis* + bfd_boolean bfd_is_undefined_symclass (int symclass); + +2.7.5.13 `bfd_symbol_info' +.......................... + +*Description* +Fill in the basic info about symbol that nm needs. Additional info may +be added by the back-ends after calling this function. + + *Synopsis* + void bfd_symbol_info (asymbol *symbol, symbol_info *ret); + +2.7.5.14 `bfd_copy_private_symbol_data' +....................................... + +*Synopsis* + bfd_boolean bfd_copy_private_symbol_data + (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym); + *Description* +Copy private symbol information from ISYM in the BFD IBFD to the symbol +OSYM in the BFD OBFD. Return `TRUE' on success, `FALSE' on error. +Possible error returns are: + + * `bfd_error_no_memory' - Not enough memory exists to create private + data for OSEC. + + #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \ + BFD_SEND (obfd, _bfd_copy_private_symbol_data, \ + (ibfd, isymbol, obfd, osymbol)) + + +File: bfd.info, Node: Archives, Next: Formats, Prev: Symbols, Up: BFD front end + +2.8 Archives +============ + +*Description* +An archive (or library) is just another BFD. It has a symbol table, +although there's not much a user program will do with it. + + The big difference between an archive BFD and an ordinary BFD is +that the archive doesn't have sections. Instead it has a chain of BFDs +that are considered its contents. These BFDs can be manipulated like +any other. The BFDs contained in an archive opened for reading will +all be opened for reading. You may put either input or output BFDs +into an archive opened for output; they will be handled correctly when +the archive is closed. + + Use `bfd_openr_next_archived_file' to step through the contents of +an archive opened for input. You don't have to read the entire archive +if you don't want to! Read it until you find what you want. + + Archive contents of output BFDs are chained through the `next' +pointer in a BFD. The first one is findable through the `archive_head' +slot of the archive. Set it with `bfd_set_archive_head' (q.v.). A +given BFD may be in only one open output archive at a time. + + As expected, the BFD archive code is more general than the archive +code of any given environment. BFD archives may contain files of +different formats (e.g., a.out and coff) and even different +architectures. You may even place archives recursively into archives! + + This can cause unexpected confusion, since some archive formats are +more expressive than others. For instance, Intel COFF archives can +preserve long filenames; SunOS a.out archives cannot. If you move a +file from the first to the second format and back again, the filename +may be truncated. Likewise, different a.out environments have different +conventions as to how they truncate filenames, whether they preserve +directory names in filenames, etc. When interoperating with native +tools, be sure your files are homogeneous. + + Beware: most of these formats do not react well to the presence of +spaces in filenames. We do the best we can, but can't always handle +this case due to restrictions in the format of archives. Many Unix +utilities are braindead in regards to spaces and such in filenames +anyway, so this shouldn't be much of a restriction. + + Archives are supported in BFD in `archive.c'. + +2.8.1 Archive functions +----------------------- + +2.8.1.1 `bfd_get_next_mapent' +............................. + +*Synopsis* + symindex bfd_get_next_mapent + (bfd *abfd, symindex previous, carsym **sym); + *Description* +Step through archive ABFD's symbol table (if it has one). Successively +update SYM with the next symbol's information, returning that symbol's +(internal) index into the symbol table. + + Supply `BFD_NO_MORE_SYMBOLS' as the PREVIOUS entry to get the first +one; returns `BFD_NO_MORE_SYMBOLS' when you've already got the last one. + + A `carsym' is a canonical archive symbol. The only user-visible +element is its name, a null-terminated string. + +2.8.1.2 `bfd_set_archive_head' +.............................. + +*Synopsis* + bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head); + *Description* +Set the head of the chain of BFDs contained in the archive OUTPUT to +NEW_HEAD. + +2.8.1.3 `bfd_openr_next_archived_file' +...................................... + +*Synopsis* + bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous); + *Description* +Provided a BFD, ARCHIVE, containing an archive and NULL, open an input +BFD on the first contained element and returns that. Subsequent calls +should pass the archive and the previous return value to return a +created BFD to the next contained element. NULL is returned when there +are no more. + + +File: bfd.info, Node: Formats, Next: Relocations, Prev: Archives, Up: BFD front end + +2.9 File formats +================ + +A format is a BFD concept of high level file contents type. The formats +supported by BFD are: + + * `bfd_object' + The BFD may contain data, symbols, relocations and debug info. + + * `bfd_archive' + The BFD contains other BFDs and an optional index. + + * `bfd_core' + The BFD contains the result of an executable core dump. + +2.9.1 File format functions +--------------------------- + +2.9.1.1 `bfd_check_format' +.......................... + +*Synopsis* + bfd_boolean bfd_check_format (bfd *abfd, bfd_format format); + *Description* +Verify if the file attached to the BFD ABFD is compatible with the +format FORMAT (i.e., one of `bfd_object', `bfd_archive' or `bfd_core'). + + If the BFD has been set to a specific target before the call, only +the named target and format combination is checked. If the target has +not been set, or has been set to `default', then all the known target +backends is interrogated to determine a match. If the default target +matches, it is used. If not, exactly one target must recognize the +file, or an error results. + + The function returns `TRUE' on success, otherwise `FALSE' with one +of the following error codes: + + * `bfd_error_invalid_operation' - if `format' is not one of + `bfd_object', `bfd_archive' or `bfd_core'. + + * `bfd_error_system_call' - if an error occured during a read - even + some file mismatches can cause bfd_error_system_calls. + + * `file_not_recognised' - none of the backends recognised the file + format. + + * `bfd_error_file_ambiguously_recognized' - more than one backend + recognised the file format. + +2.9.1.2 `bfd_check_format_matches' +.................................. + +*Synopsis* + bfd_boolean bfd_check_format_matches + (bfd *abfd, bfd_format format, char ***matching); + *Description* +Like `bfd_check_format', except when it returns FALSE with `bfd_errno' +set to `bfd_error_file_ambiguously_recognized'. In that case, if +MATCHING is not NULL, it will be filled in with a NULL-terminated list +of the names of the formats that matched, allocated with `malloc'. +Then the user may choose a format and try again. + + When done with the list that MATCHING points to, the caller should +free it. + +2.9.1.3 `bfd_set_format' +........................ + +*Synopsis* + bfd_boolean bfd_set_format (bfd *abfd, bfd_format format); + *Description* +This function sets the file format of the BFD ABFD to the format +FORMAT. If the target set in the BFD does not support the format +requested, the format is invalid, or the BFD is not open for writing, +then an error occurs. + +2.9.1.4 `bfd_format_string' +........................... + +*Synopsis* + const char *bfd_format_string (bfd_format format); + *Description* +Return a pointer to a const string `invalid', `object', `archive', +`core', or `unknown', depending upon the value of FORMAT. + + +File: bfd.info, Node: Relocations, Next: Core Files, Prev: Formats, Up: BFD front end + +2.10 Relocations +================ + +BFD maintains relocations in much the same way it maintains symbols: +they are left alone until required, then read in en-masse and +translated into an internal form. A common routine +`bfd_perform_relocation' acts upon the canonical form to do the fixup. + + Relocations are maintained on a per section basis, while symbols are +maintained on a per BFD basis. + + All that a back end has to do to fit the BFD interface is to create +a `struct reloc_cache_entry' for each relocation in a particular +section, and fill in the right bits of the structures. + +* Menu: + +* typedef arelent:: +* howto manager:: + + +File: bfd.info, Node: typedef arelent, Next: howto manager, Prev: Relocations, Up: Relocations + +2.10.1 typedef arelent +---------------------- + +This is the structure of a relocation entry: + + + typedef enum bfd_reloc_status + { + /* No errors detected. */ + bfd_reloc_ok, + + /* The relocation was performed, but there was an overflow. */ + bfd_reloc_overflow, + + /* The address to relocate was not within the section supplied. */ + bfd_reloc_outofrange, + + /* Used by special functions. */ + bfd_reloc_continue, + + /* Unsupported relocation size requested. */ + bfd_reloc_notsupported, + + /* Unused. */ + bfd_reloc_other, + + /* The symbol to relocate against was undefined. */ + bfd_reloc_undefined, + + /* The relocation was performed, but may not be ok - presently + generated only when linking i960 coff files with i960 b.out + symbols. If this type is returned, the error_message argument + to bfd_perform_relocation will be set. */ + bfd_reloc_dangerous + } + bfd_reloc_status_type; + + + typedef struct reloc_cache_entry + { + /* A pointer into the canonical table of pointers. */ + struct bfd_symbol **sym_ptr_ptr; + + /* offset in section. */ + bfd_size_type address; + + /* addend for relocation value. */ + bfd_vma addend; + + /* Pointer to how to perform the required relocation. */ + reloc_howto_type *howto; + + } + arelent; + *Description* +Here is a description of each of the fields within an `arelent': + + * `sym_ptr_ptr' + The symbol table pointer points to a pointer to the symbol +associated with the relocation request. It is the pointer into the +table returned by the back end's `canonicalize_symtab' action. *Note +Symbols::. The symbol is referenced through a pointer to a pointer so +that tools like the linker can fix up all the symbols of the same name +by modifying only one pointer. The relocation routine looks in the +symbol and uses the base of the section the symbol is attached to and +the value of the symbol as the initial relocation offset. If the symbol +pointer is zero, then the section provided is looked up. + + * `address' + The `address' field gives the offset in bytes from the base of the +section data which owns the relocation record to the first byte of +relocatable information. The actual data relocated will be relative to +this point; for example, a relocation type which modifies the bottom +two bytes of a four byte word would not touch the first byte pointed to +in a big endian world. + + * `addend' + The `addend' is a value provided by the back end to be added (!) to +the relocation offset. Its interpretation is dependent upon the howto. +For example, on the 68k the code: + + char foo[]; + main() + { + return foo[0x12345678]; + } + + Could be compiled into: + + linkw fp,#-4 + moveb @#12345678,d0 + extbl d0 + unlk fp + rts + + This could create a reloc pointing to `foo', but leave the offset in +the data, something like: + + RELOCATION RECORDS FOR [.text]: + offset type value + 00000006 32 _foo + + 00000000 4e56 fffc ; linkw fp,#-4 + 00000004 1039 1234 5678 ; moveb @#12345678,d0 + 0000000a 49c0 ; extbl d0 + 0000000c 4e5e ; unlk fp + 0000000e 4e75 ; rts + + Using coff and an 88k, some instructions don't have enough space in +them to represent the full address range, and pointers have to be +loaded in two parts. So you'd get something like: + + or.u r13,r0,hi16(_foo+0x12345678) + ld.b r2,r13,lo16(_foo+0x12345678) + jmp r1 + + This should create two relocs, both pointing to `_foo', and with +0x12340000 in their addend field. The data would consist of: + + RELOCATION RECORDS FOR [.text]: + offset type value + 00000002 HVRT16 _foo+0x12340000 + 00000006 LVRT16 _foo+0x12340000 + + 00000000 5da05678 ; or.u r13,r0,0x5678 + 00000004 1c4d5678 ; ld.b r2,r13,0x5678 + 00000008 f400c001 ; jmp r1 + + The relocation routine digs out the value from the data, adds it to +the addend to get the original offset, and then adds the value of +`_foo'. Note that all 32 bits have to be kept around somewhere, to cope +with carry from bit 15 to bit 16. + + One further example is the sparc and the a.out format. The sparc has +a similar problem to the 88k, in that some instructions don't have room +for an entire offset, but on the sparc the parts are created in odd +sized lumps. The designers of the a.out format chose to not use the +data within the section for storing part of the offset; all the offset +is kept within the reloc. Anything in the data should be ignored. + + save %sp,-112,%sp + sethi %hi(_foo+0x12345678),%g2 + ldsb [%g2+%lo(_foo+0x12345678)],%i0 + ret + restore + + Both relocs contain a pointer to `foo', and the offsets contain junk. + + RELOCATION RECORDS FOR [.text]: + offset type value + 00000004 HI22 _foo+0x12345678 + 00000008 LO10 _foo+0x12345678 + + 00000000 9de3bf90 ; save %sp,-112,%sp + 00000004 05000000 ; sethi %hi(_foo+0),%g2 + 00000008 f048a000 ; ldsb [%g2+%lo(_foo+0)],%i0 + 0000000c 81c7e008 ; ret + 00000010 81e80000 ; restore + + * `howto' + The `howto' field can be imagined as a relocation instruction. It is +a pointer to a structure which contains information on what to do with +all of the other information in the reloc record and data section. A +back end would normally have a relocation instruction set and turn +relocations into pointers to the correct structure on input - but it +would be possible to create each howto field on demand. + +2.10.1.1 `enum complain_overflow' +................................. + +Indicates what sort of overflow checking should be done when performing +a relocation. + + + enum complain_overflow + { + /* Do not complain on overflow. */ + complain_overflow_dont, + + /* Complain if the value overflows when considered as a signed + number one bit larger than the field. ie. A bitfield of N bits + is allowed to represent -2**n to 2**n-1. */ + complain_overflow_bitfield, + + /* Complain if the value overflows when considered as a signed + number. */ + complain_overflow_signed, + + /* Complain if the value overflows when considered as an + unsigned number. */ + complain_overflow_unsigned + }; + +2.10.1.2 `reloc_howto_type' +........................... + +The `reloc_howto_type' is a structure which contains all the +information that libbfd needs to know to tie up a back end's data. + + struct bfd_symbol; /* Forward declaration. */ + + struct reloc_howto_struct + { + /* The type field has mainly a documentary use - the back end can + do what it wants with it, though normally the back end's + external idea of what a reloc number is stored + in this field. For example, a PC relative word relocation + in a coff environment has the type 023 - because that's + what the outside world calls a R_PCRWORD reloc. */ + unsigned int type; + + /* The value the final relocation is shifted right by. This drops + unwanted data from the relocation. */ + unsigned int rightshift; + + /* The size of the item to be relocated. This is *not* a + power-of-two measure. To get the number of bytes operated + on by a type of relocation, use bfd_get_reloc_size. */ + int size; + + /* The number of bits in the item to be relocated. This is used + when doing overflow checking. */ + unsigned int bitsize; + + /* Notes that the relocation is relative to the location in the + data section of the addend. The relocation function will + subtract from the relocation value the address of the location + being relocated. */ + bfd_boolean pc_relative; + + /* The bit position of the reloc value in the destination. + The relocated value is left shifted by this amount. */ + unsigned int bitpos; + + /* What type of overflow error should be checked for when + relocating. */ + enum complain_overflow complain_on_overflow; + + /* If this field is non null, then the supplied function is + called rather than the normal function. This allows really + strange relocation methods to be accommodated (e.g., i960 callj + instructions). */ + bfd_reloc_status_type (*special_function) + (bfd *, arelent *, struct bfd_symbol *, void *, asection *, + bfd *, char **); + + /* The textual name of the relocation type. */ + char *name; + + /* Some formats record a relocation addend in the section contents + rather than with the relocation. For ELF formats this is the + distinction between USE_REL and USE_RELA (though the code checks + for USE_REL == 1/0). The value of this field is TRUE if the + addend is recorded with the section contents; when performing a + partial link (ld -r) the section contents (the data) will be + modified. The value of this field is FALSE if addends are + recorded with the relocation (in arelent.addend); when performing + a partial link the relocation will be modified. + All relocations for all ELF USE_RELA targets should set this field + to FALSE (values of TRUE should be looked on with suspicion). + However, the converse is not true: not all relocations of all ELF + USE_REL targets set this field to TRUE. Why this is so is peculiar + to each particular target. For relocs that aren't used in partial + links (e.g. GOT stuff) it doesn't matter what this is set to. */ + bfd_boolean partial_inplace; + + /* src_mask selects the part of the instruction (or data) to be used + in the relocation sum. If the target relocations don't have an + addend in the reloc, eg. ELF USE_REL, src_mask will normally equal + dst_mask to extract the addend from the section contents. If + relocations do have an addend in the reloc, eg. ELF USE_RELA, this + field should be zero. Non-zero values for ELF USE_RELA targets are + bogus as in those cases the value in the dst_mask part of the + section contents should be treated as garbage. */ + bfd_vma src_mask; + + /* dst_mask selects which parts of the instruction (or data) are + replaced with a relocated value. */ + bfd_vma dst_mask; + + /* When some formats create PC relative instructions, they leave + the value of the pc of the place being relocated in the offset + slot of the instruction, so that a PC relative relocation can + be made just by adding in an ordinary offset (e.g., sun3 a.out). + Some formats leave the displacement part of an instruction + empty (e.g., m88k bcs); this flag signals the fact. */ + bfd_boolean pcrel_offset; + }; + +2.10.1.3 `The HOWTO Macro' +.......................... + +*Description* +The HOWTO define is horrible and will go away. + #define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \ + { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC } + + *Description* +And will be replaced with the totally magic way. But for the moment, we +are compatible, so do it this way. + #define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \ + HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \ + NAME, FALSE, 0, 0, IN) + + *Description* +This is used to fill in an empty howto entry in an array. + #define EMPTY_HOWTO(C) \ + HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \ + NULL, FALSE, 0, 0, FALSE) + + *Description* +Helper routine to turn a symbol into a relocation value. + #define HOWTO_PREPARE(relocation, symbol) \ + { \ + if (symbol != NULL) \ + { \ + if (bfd_is_com_section (symbol->section)) \ + { \ + relocation = 0; \ + } \ + else \ + { \ + relocation = symbol->value; \ + } \ + } \ + } + +2.10.1.4 `bfd_get_reloc_size' +............................. + +*Synopsis* + unsigned int bfd_get_reloc_size (reloc_howto_type *); + *Description* +For a reloc_howto_type that operates on a fixed number of bytes, this +returns the number of bytes operated on. + +2.10.1.5 `arelent_chain' +........................ + +*Description* +How relocs are tied together in an `asection': + typedef struct relent_chain + { + arelent relent; + struct relent_chain *next; + } + arelent_chain; + +2.10.1.6 `bfd_check_overflow' +............................. + +*Synopsis* + bfd_reloc_status_type bfd_check_overflow + (enum complain_overflow how, + unsigned int bitsize, + unsigned int rightshift, + unsigned int addrsize, + bfd_vma relocation); + *Description* +Perform overflow checking on RELOCATION which has BITSIZE significant +bits and will be shifted right by RIGHTSHIFT bits, on a machine with +addresses containing ADDRSIZE significant bits. The result is either of +`bfd_reloc_ok' or `bfd_reloc_overflow'. + +2.10.1.7 `bfd_perform_relocation' +................................. + +*Synopsis* + bfd_reloc_status_type bfd_perform_relocation + (bfd *abfd, + arelent *reloc_entry, + void *data, + asection *input_section, + bfd *output_bfd, + char **error_message); + *Description* +If OUTPUT_BFD is supplied to this function, the generated image will be +relocatable; the relocations are copied to the output file after they +have been changed to reflect the new state of the world. There are two +ways of reflecting the results of partial linkage in an output file: by +modifying the output data in place, and by modifying the relocation +record. Some native formats (e.g., basic a.out and basic coff) have no +way of specifying an addend in the relocation type, so the addend has +to go in the output data. This is no big deal since in these formats +the output data slot will always be big enough for the addend. Complex +reloc types with addends were invented to solve just this problem. The +ERROR_MESSAGE argument is set to an error message if this return +`bfd_reloc_dangerous'. + +2.10.1.8 `bfd_install_relocation' +................................. + +*Synopsis* + bfd_reloc_status_type bfd_install_relocation + (bfd *abfd, + arelent *reloc_entry, + void *data, bfd_vma data_start, + asection *input_section, + char **error_message); + *Description* +This looks remarkably like `bfd_perform_relocation', except it does not +expect that the section contents have been filled in. I.e., it's +suitable for use when creating, rather than applying a relocation. + + For now, this function should be considered reserved for the +assembler. + + +File: bfd.info, Node: howto manager, Prev: typedef arelent, Up: Relocations + +2.10.2 The howto manager +------------------------ + +When an application wants to create a relocation, but doesn't know what +the target machine might call it, it can find out by using this bit of +code. + +2.10.2.1 `bfd_reloc_code_type' +.............................. + +*Description* +The insides of a reloc code. The idea is that, eventually, there will +be one enumerator for every type of relocation we ever do. Pass one of +these values to `bfd_reloc_type_lookup', and it'll return a howto +pointer. + + This does mean that the application must determine the correct +enumerator value; you can't get a howto pointer from a random set of +attributes. + + Here are the possible values for `enum bfd_reloc_code_real': + + -- : BFD_RELOC_64 + -- : BFD_RELOC_32 + -- : BFD_RELOC_26 + -- : BFD_RELOC_24 + -- : BFD_RELOC_16 + -- : BFD_RELOC_14 + -- : BFD_RELOC_8 + Basic absolute relocations of N bits. + + -- : BFD_RELOC_64_PCREL + -- : BFD_RELOC_32_PCREL + -- : BFD_RELOC_24_PCREL + -- : BFD_RELOC_16_PCREL + -- : BFD_RELOC_12_PCREL + -- : BFD_RELOC_8_PCREL + PC-relative relocations. Sometimes these are relative to the + address of the relocation itself; sometimes they are relative to + the start of the section containing the relocation. It depends on + the specific target. + + The 24-bit relocation is used in some Intel 960 configurations. + + -- : BFD_RELOC_32_SECREL + Section relative relocations. Some targets need this for DWARF2. + + -- : BFD_RELOC_32_GOT_PCREL + -- : BFD_RELOC_16_GOT_PCREL + -- : BFD_RELOC_8_GOT_PCREL + -- : BFD_RELOC_32_GOTOFF + -- : BFD_RELOC_16_GOTOFF + -- : BFD_RELOC_LO16_GOTOFF + -- : BFD_RELOC_HI16_GOTOFF + -- : BFD_RELOC_HI16_S_GOTOFF + -- : BFD_RELOC_8_GOTOFF + -- : BFD_RELOC_64_PLT_PCREL + -- : BFD_RELOC_32_PLT_PCREL + -- : BFD_RELOC_24_PLT_PCREL + -- : BFD_RELOC_16_PLT_PCREL + -- : BFD_RELOC_8_PLT_PCREL + -- : BFD_RELOC_64_PLTOFF + -- : BFD_RELOC_32_PLTOFF + -- : BFD_RELOC_16_PLTOFF + -- : BFD_RELOC_LO16_PLTOFF + -- : BFD_RELOC_HI16_PLTOFF + -- : BFD_RELOC_HI16_S_PLTOFF + -- : BFD_RELOC_8_PLTOFF + For ELF. + + -- : BFD_RELOC_68K_GLOB_DAT + -- : BFD_RELOC_68K_JMP_SLOT + -- : BFD_RELOC_68K_RELATIVE + Relocations used by 68K ELF. + + -- : BFD_RELOC_32_BASEREL + -- : BFD_RELOC_16_BASEREL + -- : BFD_RELOC_LO16_BASEREL + -- : BFD_RELOC_HI16_BASEREL + -- : BFD_RELOC_HI16_S_BASEREL + -- : BFD_RELOC_8_BASEREL + -- : BFD_RELOC_RVA + Linkage-table relative. + + -- : BFD_RELOC_8_FFnn + Absolute 8-bit relocation, but used to form an address like 0xFFnn. + + -- : BFD_RELOC_32_PCREL_S2 + -- : BFD_RELOC_16_PCREL_S2 + -- : BFD_RELOC_23_PCREL_S2 + These PC-relative relocations are stored as word displacements - + i.e., byte displacements shifted right two bits. The 30-bit word + displacement (<<32_PCREL_S2>> - 32 bits, shifted 2) is used on the + SPARC. (SPARC tools generally refer to this as <>.) The + signed 16-bit displacement is used on the MIPS, and the 23-bit + displacement is used on the Alpha. + + -- : BFD_RELOC_HI22 + -- : BFD_RELOC_LO10 + High 22 bits and low 10 bits of 32-bit value, placed into lower + bits of the target word. These are used on the SPARC. + + -- : BFD_RELOC_GPREL16 + -- : BFD_RELOC_GPREL32 + For systems that allocate a Global Pointer register, these are + displacements off that register. These relocation types are + handled specially, because the value the register will have is + decided relatively late. + + -- : BFD_RELOC_I960_CALLJ + Reloc types used for i960/b.out. + + -- : BFD_RELOC_NONE + -- : BFD_RELOC_SPARC_WDISP22 + -- : BFD_RELOC_SPARC22 + -- : BFD_RELOC_SPARC13 + -- : BFD_RELOC_SPARC_GOT10 + -- : BFD_RELOC_SPARC_GOT13 + -- : BFD_RELOC_SPARC_GOT22 + -- : BFD_RELOC_SPARC_PC10 + -- : BFD_RELOC_SPARC_PC22 + -- : BFD_RELOC_SPARC_WPLT30 + -- : BFD_RELOC_SPARC_COPY + -- : BFD_RELOC_SPARC_GLOB_DAT + -- : BFD_RELOC_SPARC_JMP_SLOT + -- : BFD_RELOC_SPARC_RELATIVE + -- : BFD_RELOC_SPARC_UA16 + -- : BFD_RELOC_SPARC_UA32 + -- : BFD_RELOC_SPARC_UA64 + SPARC ELF relocations. There is probably some overlap with other + relocation types already defined. + + -- : BFD_RELOC_SPARC_BASE13 + -- : BFD_RELOC_SPARC_BASE22 + I think these are specific to SPARC a.out (e.g., Sun 4). + + -- : BFD_RELOC_SPARC_64 + -- : BFD_RELOC_SPARC_10 + -- : BFD_RELOC_SPARC_11 + -- : BFD_RELOC_SPARC_OLO10 + -- : BFD_RELOC_SPARC_HH22 + -- : BFD_RELOC_SPARC_HM10 + -- : BFD_RELOC_SPARC_LM22 + -- : BFD_RELOC_SPARC_PC_HH22 + -- : BFD_RELOC_SPARC_PC_HM10 + -- : BFD_RELOC_SPARC_PC_LM22 + -- : BFD_RELOC_SPARC_WDISP16 + -- : BFD_RELOC_SPARC_WDISP19 + -- : BFD_RELOC_SPARC_7 + -- : BFD_RELOC_SPARC_6 + -- : BFD_RELOC_SPARC_5 + -- : BFD_RELOC_SPARC_DISP64 + -- : BFD_RELOC_SPARC_PLT32 + -- : BFD_RELOC_SPARC_PLT64 + -- : BFD_RELOC_SPARC_HIX22 + -- : BFD_RELOC_SPARC_LOX10 + -- : BFD_RELOC_SPARC_H44 + -- : BFD_RELOC_SPARC_M44 + -- : BFD_RELOC_SPARC_L44 + -- : BFD_RELOC_SPARC_REGISTER + SPARC64 relocations + + -- : BFD_RELOC_SPARC_REV32 + SPARC little endian relocation + + -- : BFD_RELOC_SPARC_TLS_GD_HI22 + -- : BFD_RELOC_SPARC_TLS_GD_LO10 + -- : BFD_RELOC_SPARC_TLS_GD_ADD + -- : BFD_RELOC_SPARC_TLS_GD_CALL + -- : BFD_RELOC_SPARC_TLS_LDM_HI22 + -- : BFD_RELOC_SPARC_TLS_LDM_LO10 + -- : BFD_RELOC_SPARC_TLS_LDM_ADD + -- : BFD_RELOC_SPARC_TLS_LDM_CALL + -- : BFD_RELOC_SPARC_TLS_LDO_HIX22 + -- : BFD_RELOC_SPARC_TLS_LDO_LOX10 + -- : BFD_RELOC_SPARC_TLS_LDO_ADD + -- : BFD_RELOC_SPARC_TLS_IE_HI22 + -- : BFD_RELOC_SPARC_TLS_IE_LO10 + -- : BFD_RELOC_SPARC_TLS_IE_LD + -- : BFD_RELOC_SPARC_TLS_IE_LDX + -- : BFD_RELOC_SPARC_TLS_IE_ADD + -- : BFD_RELOC_SPARC_TLS_LE_HIX22 + -- : BFD_RELOC_SPARC_TLS_LE_LOX10 + -- : BFD_RELOC_SPARC_TLS_DTPMOD32 + -- : BFD_RELOC_SPARC_TLS_DTPMOD64 + -- : BFD_RELOC_SPARC_TLS_DTPOFF32 + -- : BFD_RELOC_SPARC_TLS_DTPOFF64 + -- : BFD_RELOC_SPARC_TLS_TPOFF32 + -- : BFD_RELOC_SPARC_TLS_TPOFF64 + SPARC TLS relocations + + -- : BFD_RELOC_SPU_IMM7 + -- : BFD_RELOC_SPU_IMM8 + -- : BFD_RELOC_SPU_IMM10 + -- : BFD_RELOC_SPU_IMM10W + -- : BFD_RELOC_SPU_IMM16 + -- : BFD_RELOC_SPU_IMM16W + -- : BFD_RELOC_SPU_IMM18 + -- : BFD_RELOC_SPU_PCREL9a + -- : BFD_RELOC_SPU_PCREL9b + -- : BFD_RELOC_SPU_PCREL16 + -- : BFD_RELOC_SPU_LO16 + -- : BFD_RELOC_SPU_HI16 + -- : BFD_RELOC_SPU_PPU32 + -- : BFD_RELOC_SPU_PPU64 + SPU Relocations. + + -- : BFD_RELOC_ALPHA_GPDISP_HI16 + Alpha ECOFF and ELF relocations. Some of these treat the symbol or + "addend" in some special way. For GPDISP_HI16 ("gpdisp") + relocations, the symbol is ignored when writing; when reading, it + will be the absolute section symbol. The addend is the + displacement in bytes of the "lda" instruction from the "ldah" + instruction (which is at the address of this reloc). + + -- : BFD_RELOC_ALPHA_GPDISP_LO16 + For GPDISP_LO16 ("ignore") relocations, the symbol is handled as + with GPDISP_HI16 relocs. The addend is ignored when writing the + relocations out, and is filled in with the file's GP value on + reading, for convenience. + + -- : BFD_RELOC_ALPHA_GPDISP + The ELF GPDISP relocation is exactly the same as the GPDISP_HI16 + relocation except that there is no accompanying GPDISP_LO16 + relocation. + + -- : BFD_RELOC_ALPHA_LITERAL + -- : BFD_RELOC_ALPHA_ELF_LITERAL + -- : BFD_RELOC_ALPHA_LITUSE + The Alpha LITERAL/LITUSE relocs are produced by a symbol reference; + the assembler turns it into a LDQ instruction to load the address + of the symbol, and then fills in a register in the real + instruction. + + The LITERAL reloc, at the LDQ instruction, refers to the .lita + section symbol. The addend is ignored when writing, but is filled + in with the file's GP value on reading, for convenience, as with + the GPDISP_LO16 reloc. + + The ELF_LITERAL reloc is somewhere between 16_GOTOFF and + GPDISP_LO16. It should refer to the symbol to be referenced, as + with 16_GOTOFF, but it generates output not based on the position + within the .got section, but relative to the GP value chosen for + the file during the final link stage. + + The LITUSE reloc, on the instruction using the loaded address, + gives information to the linker that it might be able to use to + optimize away some literal section references. The symbol is + ignored (read as the absolute section symbol), and the "addend" + indicates the type of instruction using the register: 1 - "memory" + fmt insn 2 - byte-manipulation (byte offset reg) 3 - jsr (target + of branch) + + -- : BFD_RELOC_ALPHA_HINT + The HINT relocation indicates a value that should be filled into + the "hint" field of a jmp/jsr/ret instruction, for possible branch- + prediction logic which may be provided on some processors. + + -- : BFD_RELOC_ALPHA_LINKAGE + The LINKAGE relocation outputs a linkage pair in the object file, + which is filled by the linker. + + -- : BFD_RELOC_ALPHA_CODEADDR + The CODEADDR relocation outputs a STO_CA in the object file, which + is filled by the linker. + + -- : BFD_RELOC_ALPHA_GPREL_HI16 + -- : BFD_RELOC_ALPHA_GPREL_LO16 + The GPREL_HI/LO relocations together form a 32-bit offset from the + GP register. + + -- : BFD_RELOC_ALPHA_BRSGP + Like BFD_RELOC_23_PCREL_S2, except that the source and target must + share a common GP, and the target address is adjusted for + STO_ALPHA_STD_GPLOAD. + + -- : BFD_RELOC_ALPHA_TLSGD + -- : BFD_RELOC_ALPHA_TLSLDM + -- : BFD_RELOC_ALPHA_DTPMOD64 + -- : BFD_RELOC_ALPHA_GOTDTPREL16 + -- : BFD_RELOC_ALPHA_DTPREL64 + -- : BFD_RELOC_ALPHA_DTPREL_HI16 + -- : BFD_RELOC_ALPHA_DTPREL_LO16 + -- : BFD_RELOC_ALPHA_DTPREL16 + -- : BFD_RELOC_ALPHA_GOTTPREL16 + -- : BFD_RELOC_ALPHA_TPREL64 + -- : BFD_RELOC_ALPHA_TPREL_HI16 + -- : BFD_RELOC_ALPHA_TPREL_LO16 + -- : BFD_RELOC_ALPHA_TPREL16 + Alpha thread-local storage relocations. + + -- : BFD_RELOC_MIPS_JMP + Bits 27..2 of the relocation address shifted right 2 bits; simple + reloc otherwise. + + -- : BFD_RELOC_MIPS16_JMP + The MIPS16 jump instruction. + + -- : BFD_RELOC_MIPS16_GPREL + MIPS16 GP relative reloc. + + -- : BFD_RELOC_HI16 + High 16 bits of 32-bit value; simple reloc. + + -- : BFD_RELOC_HI16_S + High 16 bits of 32-bit value but the low 16 bits will be sign + extended and added to form the final result. If the low 16 bits + form a negative number, we need to add one to the high value to + compensate for the borrow when the low bits are added. + + -- : BFD_RELOC_LO16 + Low 16 bits. + + -- : BFD_RELOC_HI16_PCREL + High 16 bits of 32-bit pc-relative value + + -- : BFD_RELOC_HI16_S_PCREL + High 16 bits of 32-bit pc-relative value, adjusted + + -- : BFD_RELOC_LO16_PCREL + Low 16 bits of pc-relative value + + -- : BFD_RELOC_MIPS16_HI16 + MIPS16 high 16 bits of 32-bit value. + + -- : BFD_RELOC_MIPS16_HI16_S + MIPS16 high 16 bits of 32-bit value but the low 16 bits will be + sign extended and added to form the final result. If the low 16 + bits form a negative number, we need to add one to the high value + to compensate for the borrow when the low bits are added. + + -- : BFD_RELOC_MIPS16_LO16 + MIPS16 low 16 bits. + + -- : BFD_RELOC_MIPS_LITERAL + Relocation against a MIPS literal section. + + -- : BFD_RELOC_MIPS_GOT16 + -- : BFD_RELOC_MIPS_CALL16 + -- : BFD_RELOC_MIPS_GOT_HI16 + -- : BFD_RELOC_MIPS_GOT_LO16 + -- : BFD_RELOC_MIPS_CALL_HI16 + -- : BFD_RELOC_MIPS_CALL_LO16 + -- : BFD_RELOC_MIPS_SUB + -- : BFD_RELOC_MIPS_GOT_PAGE + -- : BFD_RELOC_MIPS_GOT_OFST + -- : BFD_RELOC_MIPS_GOT_DISP + -- : BFD_RELOC_MIPS_SHIFT5 + -- : BFD_RELOC_MIPS_SHIFT6 + -- : BFD_RELOC_MIPS_INSERT_A + -- : BFD_RELOC_MIPS_INSERT_B + -- : BFD_RELOC_MIPS_DELETE + -- : BFD_RELOC_MIPS_HIGHEST + -- : BFD_RELOC_MIPS_HIGHER + -- : BFD_RELOC_MIPS_SCN_DISP + -- : BFD_RELOC_MIPS_REL16 + -- : BFD_RELOC_MIPS_RELGOT + -- : BFD_RELOC_MIPS_JALR + -- : BFD_RELOC_MIPS_TLS_DTPMOD32 + -- : BFD_RELOC_MIPS_TLS_DTPREL32 + -- : BFD_RELOC_MIPS_TLS_DTPMOD64 + -- : BFD_RELOC_MIPS_TLS_DTPREL64 + -- : BFD_RELOC_MIPS_TLS_GD + -- : BFD_RELOC_MIPS_TLS_LDM + -- : BFD_RELOC_MIPS_TLS_DTPREL_HI16 + -- : BFD_RELOC_MIPS_TLS_DTPREL_LO16 + -- : BFD_RELOC_MIPS_TLS_GOTTPREL + -- : BFD_RELOC_MIPS_TLS_TPREL32 + -- : BFD_RELOC_MIPS_TLS_TPREL64 + -- : BFD_RELOC_MIPS_TLS_TPREL_HI16 + -- : BFD_RELOC_MIPS_TLS_TPREL_LO16 + MIPS ELF relocations. + + -- : BFD_RELOC_MIPS_COPY + -- : BFD_RELOC_MIPS_JUMP_SLOT + MIPS ELF relocations (VxWorks extensions). + + -- : BFD_RELOC_FRV_LABEL16 + -- : BFD_RELOC_FRV_LABEL24 + -- : BFD_RELOC_FRV_LO16 + -- : BFD_RELOC_FRV_HI16 + -- : BFD_RELOC_FRV_GPREL12 + -- : BFD_RELOC_FRV_GPRELU12 + -- : BFD_RELOC_FRV_GPREL32 + -- : BFD_RELOC_FRV_GPRELHI + -- : BFD_RELOC_FRV_GPRELLO + -- : BFD_RELOC_FRV_GOT12 + -- : BFD_RELOC_FRV_GOTHI + -- : BFD_RELOC_FRV_GOTLO + -- : BFD_RELOC_FRV_FUNCDESC + -- : BFD_RELOC_FRV_FUNCDESC_GOT12 + -- : BFD_RELOC_FRV_FUNCDESC_GOTHI + -- : BFD_RELOC_FRV_FUNCDESC_GOTLO + -- : BFD_RELOC_FRV_FUNCDESC_VALUE + -- : BFD_RELOC_FRV_FUNCDESC_GOTOFF12 + -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFHI + -- : BFD_RELOC_FRV_FUNCDESC_GOTOFFLO + -- : BFD_RELOC_FRV_GOTOFF12 + -- : BFD_RELOC_FRV_GOTOFFHI + -- : BFD_RELOC_FRV_GOTOFFLO + -- : BFD_RELOC_FRV_GETTLSOFF + -- : BFD_RELOC_FRV_TLSDESC_VALUE + -- : BFD_RELOC_FRV_GOTTLSDESC12 + -- : BFD_RELOC_FRV_GOTTLSDESCHI + -- : BFD_RELOC_FRV_GOTTLSDESCLO + -- : BFD_RELOC_FRV_TLSMOFF12 + -- : BFD_RELOC_FRV_TLSMOFFHI + -- : BFD_RELOC_FRV_TLSMOFFLO + -- : BFD_RELOC_FRV_GOTTLSOFF12 + -- : BFD_RELOC_FRV_GOTTLSOFFHI + -- : BFD_RELOC_FRV_GOTTLSOFFLO + -- : BFD_RELOC_FRV_TLSOFF + -- : BFD_RELOC_FRV_TLSDESC_RELAX + -- : BFD_RELOC_FRV_GETTLSOFF_RELAX + -- : BFD_RELOC_FRV_TLSOFF_RELAX + -- : BFD_RELOC_FRV_TLSMOFF + Fujitsu Frv Relocations. + + -- : BFD_RELOC_MN10300_GOTOFF24 + This is a 24bit GOT-relative reloc for the mn10300. + + -- : BFD_RELOC_MN10300_GOT32 + This is a 32bit GOT-relative reloc for the mn10300, offset by two + bytes in the instruction. + + -- : BFD_RELOC_MN10300_GOT24 + This is a 24bit GOT-relative reloc for the mn10300, offset by two + bytes in the instruction. + + -- : BFD_RELOC_MN10300_GOT16 + This is a 16bit GOT-relative reloc for the mn10300, offset by two + bytes in the instruction. + + -- : BFD_RELOC_MN10300_COPY + Copy symbol at runtime. + + -- : BFD_RELOC_MN10300_GLOB_DAT + Create GOT entry. + + -- : BFD_RELOC_MN10300_JMP_SLOT + Create PLT entry. + + -- : BFD_RELOC_MN10300_RELATIVE + Adjust by program base. + + -- : BFD_RELOC_386_GOT32 + -- : BFD_RELOC_386_PLT32 + -- : BFD_RELOC_386_COPY + -- : BFD_RELOC_386_GLOB_DAT + -- : BFD_RELOC_386_JUMP_SLOT + -- : BFD_RELOC_386_RELATIVE + -- : BFD_RELOC_386_GOTOFF + -- : BFD_RELOC_386_GOTPC + -- : BFD_RELOC_386_TLS_TPOFF + -- : BFD_RELOC_386_TLS_IE + -- : BFD_RELOC_386_TLS_GOTIE + -- : BFD_RELOC_386_TLS_LE + -- : BFD_RELOC_386_TLS_GD + -- : BFD_RELOC_386_TLS_LDM + -- : BFD_RELOC_386_TLS_LDO_32 + -- : BFD_RELOC_386_TLS_IE_32 + -- : BFD_RELOC_386_TLS_LE_32 + -- : BFD_RELOC_386_TLS_DTPMOD32 + -- : BFD_RELOC_386_TLS_DTPOFF32 + -- : BFD_RELOC_386_TLS_TPOFF32 + -- : BFD_RELOC_386_TLS_GOTDESC + -- : BFD_RELOC_386_TLS_DESC_CALL + -- : BFD_RELOC_386_TLS_DESC + i386/elf relocations + + -- : BFD_RELOC_X86_64_GOT32 + -- : BFD_RELOC_X86_64_PLT32 + -- : BFD_RELOC_X86_64_COPY + -- : BFD_RELOC_X86_64_GLOB_DAT + -- : BFD_RELOC_X86_64_JUMP_SLOT + -- : BFD_RELOC_X86_64_RELATIVE + -- : BFD_RELOC_X86_64_GOTPCREL + -- : BFD_RELOC_X86_64_32S + -- : BFD_RELOC_X86_64_DTPMOD64 + -- : BFD_RELOC_X86_64_DTPOFF64 + -- : BFD_RELOC_X86_64_TPOFF64 + -- : BFD_RELOC_X86_64_TLSGD + -- : BFD_RELOC_X86_64_TLSLD + -- : BFD_RELOC_X86_64_DTPOFF32 + -- : BFD_RELOC_X86_64_GOTTPOFF + -- : BFD_RELOC_X86_64_TPOFF32 + -- : BFD_RELOC_X86_64_GOTOFF64 + -- : BFD_RELOC_X86_64_GOTPC32 + -- : BFD_RELOC_X86_64_GOT64 + -- : BFD_RELOC_X86_64_GOTPCREL64 + -- : BFD_RELOC_X86_64_GOTPC64 + -- : BFD_RELOC_X86_64_GOTPLT64 + -- : BFD_RELOC_X86_64_PLTOFF64 + -- : BFD_RELOC_X86_64_GOTPC32_TLSDESC + -- : BFD_RELOC_X86_64_TLSDESC_CALL + -- : BFD_RELOC_X86_64_TLSDESC + x86-64/elf relocations + + -- : BFD_RELOC_NS32K_IMM_8 + -- : BFD_RELOC_NS32K_IMM_16 + -- : BFD_RELOC_NS32K_IMM_32 + -- : BFD_RELOC_NS32K_IMM_8_PCREL + -- : BFD_RELOC_NS32K_IMM_16_PCREL + -- : BFD_RELOC_NS32K_IMM_32_PCREL + -- : BFD_RELOC_NS32K_DISP_8 + -- : BFD_RELOC_NS32K_DISP_16 + -- : BFD_RELOC_NS32K_DISP_32 + -- : BFD_RELOC_NS32K_DISP_8_PCREL + -- : BFD_RELOC_NS32K_DISP_16_PCREL + -- : BFD_RELOC_NS32K_DISP_32_PCREL + ns32k relocations + + -- : BFD_RELOC_PDP11_DISP_8_PCREL + -- : BFD_RELOC_PDP11_DISP_6_PCREL + PDP11 relocations + + -- : BFD_RELOC_PJ_CODE_HI16 + -- : BFD_RELOC_PJ_CODE_LO16 + -- : BFD_RELOC_PJ_CODE_DIR16 + -- : BFD_RELOC_PJ_CODE_DIR32 + -- : BFD_RELOC_PJ_CODE_REL16 + -- : BFD_RELOC_PJ_CODE_REL32 + Picojava relocs. Not all of these appear in object files. + + -- : BFD_RELOC_PPC_B26 + -- : BFD_RELOC_PPC_BA26 + -- : BFD_RELOC_PPC_TOC16 + -- : BFD_RELOC_PPC_B16 + -- : BFD_RELOC_PPC_B16_BRTAKEN + -- : BFD_RELOC_PPC_B16_BRNTAKEN + -- : BFD_RELOC_PPC_BA16 + -- : BFD_RELOC_PPC_BA16_BRTAKEN + -- : BFD_RELOC_PPC_BA16_BRNTAKEN + -- : BFD_RELOC_PPC_COPY + -- : BFD_RELOC_PPC_GLOB_DAT + -- : BFD_RELOC_PPC_JMP_SLOT + -- : BFD_RELOC_PPC_RELATIVE + -- : BFD_RELOC_PPC_LOCAL24PC + -- : BFD_RELOC_PPC_EMB_NADDR32 + -- : BFD_RELOC_PPC_EMB_NADDR16 + -- : BFD_RELOC_PPC_EMB_NADDR16_LO + -- : BFD_RELOC_PPC_EMB_NADDR16_HI + -- : BFD_RELOC_PPC_EMB_NADDR16_HA + -- : BFD_RELOC_PPC_EMB_SDAI16 + -- : BFD_RELOC_PPC_EMB_SDA2I16 + -- : BFD_RELOC_PPC_EMB_SDA2REL + -- : BFD_RELOC_PPC_EMB_SDA21 + -- : BFD_RELOC_PPC_EMB_MRKREF + -- : BFD_RELOC_PPC_EMB_RELSEC16 + -- : BFD_RELOC_PPC_EMB_RELST_LO + -- : BFD_RELOC_PPC_EMB_RELST_HI + -- : BFD_RELOC_PPC_EMB_RELST_HA + -- : BFD_RELOC_PPC_EMB_BIT_FLD + -- : BFD_RELOC_PPC_EMB_RELSDA + -- : BFD_RELOC_PPC64_HIGHER + -- : BFD_RELOC_PPC64_HIGHER_S + -- : BFD_RELOC_PPC64_HIGHEST + -- : BFD_RELOC_PPC64_HIGHEST_S + -- : BFD_RELOC_PPC64_TOC16_LO + -- : BFD_RELOC_PPC64_TOC16_HI + -- : BFD_RELOC_PPC64_TOC16_HA + -- : BFD_RELOC_PPC64_TOC + -- : BFD_RELOC_PPC64_PLTGOT16 + -- : BFD_RELOC_PPC64_PLTGOT16_LO + -- : BFD_RELOC_PPC64_PLTGOT16_HI + -- : BFD_RELOC_PPC64_PLTGOT16_HA + -- : BFD_RELOC_PPC64_ADDR16_DS + -- : BFD_RELOC_PPC64_ADDR16_LO_DS + -- : BFD_RELOC_PPC64_GOT16_DS + -- : BFD_RELOC_PPC64_GOT16_LO_DS + -- : BFD_RELOC_PPC64_PLT16_LO_DS + -- : BFD_RELOC_PPC64_SECTOFF_DS + -- : BFD_RELOC_PPC64_SECTOFF_LO_DS + -- : BFD_RELOC_PPC64_TOC16_DS + -- : BFD_RELOC_PPC64_TOC16_LO_DS + -- : BFD_RELOC_PPC64_PLTGOT16_DS + -- : BFD_RELOC_PPC64_PLTGOT16_LO_DS + Power(rs6000) and PowerPC relocations. + + -- : BFD_RELOC_PPC_TLS + -- : BFD_RELOC_PPC_DTPMOD + -- : BFD_RELOC_PPC_TPREL16 + -- : BFD_RELOC_PPC_TPREL16_LO + -- : BFD_RELOC_PPC_TPREL16_HI + -- : BFD_RELOC_PPC_TPREL16_HA + -- : BFD_RELOC_PPC_TPREL + -- : BFD_RELOC_PPC_DTPREL16 + -- : BFD_RELOC_PPC_DTPREL16_LO + -- : BFD_RELOC_PPC_DTPREL16_HI + -- : BFD_RELOC_PPC_DTPREL16_HA + -- : BFD_RELOC_PPC_DTPREL + -- : BFD_RELOC_PPC_GOT_TLSGD16 + -- : BFD_RELOC_PPC_GOT_TLSGD16_LO + -- : BFD_RELOC_PPC_GOT_TLSGD16_HI + -- : BFD_RELOC_PPC_GOT_TLSGD16_HA + -- : BFD_RELOC_PPC_GOT_TLSLD16 + -- : BFD_RELOC_PPC_GOT_TLSLD16_LO + -- : BFD_RELOC_PPC_GOT_TLSLD16_HI + -- : BFD_RELOC_PPC_GOT_TLSLD16_HA + -- : BFD_RELOC_PPC_GOT_TPREL16 + -- : BFD_RELOC_PPC_GOT_TPREL16_LO + -- : BFD_RELOC_PPC_GOT_TPREL16_HI + -- : BFD_RELOC_PPC_GOT_TPREL16_HA + -- : BFD_RELOC_PPC_GOT_DTPREL16 + -- : BFD_RELOC_PPC_GOT_DTPREL16_LO + -- : BFD_RELOC_PPC_GOT_DTPREL16_HI + -- : BFD_RELOC_PPC_GOT_DTPREL16_HA + -- : BFD_RELOC_PPC64_TPREL16_DS + -- : BFD_RELOC_PPC64_TPREL16_LO_DS + -- : BFD_RELOC_PPC64_TPREL16_HIGHER + -- : BFD_RELOC_PPC64_TPREL16_HIGHERA + -- : BFD_RELOC_PPC64_TPREL16_HIGHEST + -- : BFD_RELOC_PPC64_TPREL16_HIGHESTA + -- : BFD_RELOC_PPC64_DTPREL16_DS + -- : BFD_RELOC_PPC64_DTPREL16_LO_DS + -- : BFD_RELOC_PPC64_DTPREL16_HIGHER + -- : BFD_RELOC_PPC64_DTPREL16_HIGHERA + -- : BFD_RELOC_PPC64_DTPREL16_HIGHEST + -- : BFD_RELOC_PPC64_DTPREL16_HIGHESTA + PowerPC and PowerPC64 thread-local storage relocations. + + -- : BFD_RELOC_I370_D12 + IBM 370/390 relocations + + -- : BFD_RELOC_CTOR + The type of reloc used to build a constructor table - at the moment + probably a 32 bit wide absolute relocation, but the target can + choose. It generally does map to one of the other relocation + types. + + -- : BFD_RELOC_ARM_PCREL_BRANCH + ARM 26 bit pc-relative branch. The lowest two bits must be zero + and are not stored in the instruction. + + -- : BFD_RELOC_ARM_PCREL_BLX + ARM 26 bit pc-relative branch. The lowest bit must be zero and is + not stored in the instruction. The 2nd lowest bit comes from a 1 + bit field in the instruction. + + -- : BFD_RELOC_THUMB_PCREL_BLX + Thumb 22 bit pc-relative branch. The lowest bit must be zero and + is not stored in the instruction. The 2nd lowest bit comes from a + 1 bit field in the instruction. + + -- : BFD_RELOC_ARM_PCREL_CALL + ARM 26-bit pc-relative branch for an unconditional BL or BLX + instruction. + + -- : BFD_RELOC_ARM_PCREL_JUMP + ARM 26-bit pc-relative branch for B or conditional BL instruction. + + -- : BFD_RELOC_THUMB_PCREL_BRANCH7 + -- : BFD_RELOC_THUMB_PCREL_BRANCH9 + -- : BFD_RELOC_THUMB_PCREL_BRANCH12 + -- : BFD_RELOC_THUMB_PCREL_BRANCH20 + -- : BFD_RELOC_THUMB_PCREL_BRANCH23 + -- : BFD_RELOC_THUMB_PCREL_BRANCH25 + Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches. The + lowest bit must be zero and is not stored in the instruction. + Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an + "nn" one smaller in all cases. Note further that BRANCH23 + corresponds to R_ARM_THM_CALL. + + -- : BFD_RELOC_ARM_OFFSET_IMM + 12-bit immediate offset, used in ARM-format ldr and str + instructions. + + -- : BFD_RELOC_ARM_THUMB_OFFSET + 5-bit immediate offset, used in Thumb-format ldr and str + instructions. + + -- : BFD_RELOC_ARM_TARGET1 + Pc-relative or absolute relocation depending on target. Used for + entries in .init_array sections. + + -- : BFD_RELOC_ARM_ROSEGREL32 + Read-only segment base relative address. + + -- : BFD_RELOC_ARM_SBREL32 + Data segment base relative address. + + -- : BFD_RELOC_ARM_TARGET2 + This reloc is used for references to RTTI data from exception + handling tables. The actual definition depends on the target. It + may be a pc-relative or some form of GOT-indirect relocation. + + -- : BFD_RELOC_ARM_PREL31 + 31-bit PC relative address. + + -- : BFD_RELOC_ARM_MOVW + -- : BFD_RELOC_ARM_MOVT + -- : BFD_RELOC_ARM_MOVW_PCREL + -- : BFD_RELOC_ARM_MOVT_PCREL + -- : BFD_RELOC_ARM_THUMB_MOVW + -- : BFD_RELOC_ARM_THUMB_MOVT + -- : BFD_RELOC_ARM_THUMB_MOVW_PCREL + -- : BFD_RELOC_ARM_THUMB_MOVT_PCREL + Low and High halfword relocations for MOVW and MOVT instructions. + + -- : BFD_RELOC_ARM_JUMP_SLOT + -- : BFD_RELOC_ARM_GLOB_DAT + -- : BFD_RELOC_ARM_GOT32 + -- : BFD_RELOC_ARM_PLT32 + -- : BFD_RELOC_ARM_RELATIVE + -- : BFD_RELOC_ARM_GOTOFF + -- : BFD_RELOC_ARM_GOTPC + Relocations for setting up GOTs and PLTs for shared libraries. + + -- : BFD_RELOC_ARM_TLS_GD32 + -- : BFD_RELOC_ARM_TLS_LDO32 + -- : BFD_RELOC_ARM_TLS_LDM32 + -- : BFD_RELOC_ARM_TLS_DTPOFF32 + -- : BFD_RELOC_ARM_TLS_DTPMOD32 + -- : BFD_RELOC_ARM_TLS_TPOFF32 + -- : BFD_RELOC_ARM_TLS_IE32 + -- : BFD_RELOC_ARM_TLS_LE32 + ARM thread-local storage relocations. + + -- : BFD_RELOC_ARM_ALU_PC_G0_NC + -- : BFD_RELOC_ARM_ALU_PC_G0 + -- : BFD_RELOC_ARM_ALU_PC_G1_NC + -- : BFD_RELOC_ARM_ALU_PC_G1 + -- : BFD_RELOC_ARM_ALU_PC_G2 + -- : BFD_RELOC_ARM_LDR_PC_G0 + -- : BFD_RELOC_ARM_LDR_PC_G1 + -- : BFD_RELOC_ARM_LDR_PC_G2 + -- : BFD_RELOC_ARM_LDRS_PC_G0 + -- : BFD_RELOC_ARM_LDRS_PC_G1 + -- : BFD_RELOC_ARM_LDRS_PC_G2 + -- : BFD_RELOC_ARM_LDC_PC_G0 + -- : BFD_RELOC_ARM_LDC_PC_G1 + -- : BFD_RELOC_ARM_LDC_PC_G2 + -- : BFD_RELOC_ARM_ALU_SB_G0_NC + -- : BFD_RELOC_ARM_ALU_SB_G0 + -- : BFD_RELOC_ARM_ALU_SB_G1_NC + -- : BFD_RELOC_ARM_ALU_SB_G1 + -- : BFD_RELOC_ARM_ALU_SB_G2 + -- : BFD_RELOC_ARM_LDR_SB_G0 + -- : BFD_RELOC_ARM_LDR_SB_G1 + -- : BFD_RELOC_ARM_LDR_SB_G2 + -- : BFD_RELOC_ARM_LDRS_SB_G0 + -- : BFD_RELOC_ARM_LDRS_SB_G1 + -- : BFD_RELOC_ARM_LDRS_SB_G2 + -- : BFD_RELOC_ARM_LDC_SB_G0 + -- : BFD_RELOC_ARM_LDC_SB_G1 + -- : BFD_RELOC_ARM_LDC_SB_G2 + ARM group relocations. + + -- : BFD_RELOC_ARM_IMMEDIATE + -- : BFD_RELOC_ARM_ADRL_IMMEDIATE + -- : BFD_RELOC_ARM_T32_IMMEDIATE + -- : BFD_RELOC_ARM_T32_ADD_IMM + -- : BFD_RELOC_ARM_T32_IMM12 + -- : BFD_RELOC_ARM_T32_ADD_PC12 + -- : BFD_RELOC_ARM_SHIFT_IMM + -- : BFD_RELOC_ARM_SMC + -- : BFD_RELOC_ARM_SWI + -- : BFD_RELOC_ARM_MULTI + -- : BFD_RELOC_ARM_CP_OFF_IMM + -- : BFD_RELOC_ARM_CP_OFF_IMM_S2 + -- : BFD_RELOC_ARM_T32_CP_OFF_IMM + -- : BFD_RELOC_ARM_T32_CP_OFF_IMM_S2 + -- : BFD_RELOC_ARM_ADR_IMM + -- : BFD_RELOC_ARM_LDR_IMM + -- : BFD_RELOC_ARM_LITERAL + -- : BFD_RELOC_ARM_IN_POOL + -- : BFD_RELOC_ARM_OFFSET_IMM8 + -- : BFD_RELOC_ARM_T32_OFFSET_U8 + -- : BFD_RELOC_ARM_T32_OFFSET_IMM + -- : BFD_RELOC_ARM_HWLITERAL + -- : BFD_RELOC_ARM_THUMB_ADD + -- : BFD_RELOC_ARM_THUMB_IMM + -- : BFD_RELOC_ARM_THUMB_SHIFT + These relocs are only used within the ARM assembler. They are not + (at present) written to any object files. + + -- : BFD_RELOC_SH_PCDISP8BY2 + -- : BFD_RELOC_SH_PCDISP12BY2 + -- : BFD_RELOC_SH_IMM3 + -- : BFD_RELOC_SH_IMM3U + -- : BFD_RELOC_SH_DISP12 + -- : BFD_RELOC_SH_DISP12BY2 + -- : BFD_RELOC_SH_DISP12BY4 + -- : BFD_RELOC_SH_DISP12BY8 + -- : BFD_RELOC_SH_DISP20 + -- : BFD_RELOC_SH_DISP20BY8 + -- : BFD_RELOC_SH_IMM4 + -- : BFD_RELOC_SH_IMM4BY2 + -- : BFD_RELOC_SH_IMM4BY4 + -- : BFD_RELOC_SH_IMM8 + -- : BFD_RELOC_SH_IMM8BY2 + -- : BFD_RELOC_SH_IMM8BY4 + -- : BFD_RELOC_SH_PCRELIMM8BY2 + -- : BFD_RELOC_SH_PCRELIMM8BY4 + -- : BFD_RELOC_SH_SWITCH16 + -- : BFD_RELOC_SH_SWITCH32 + -- : BFD_RELOC_SH_USES + -- : BFD_RELOC_SH_COUNT + -- : BFD_RELOC_SH_ALIGN + -- : BFD_RELOC_SH_CODE + -- : BFD_RELOC_SH_DATA + -- : BFD_RELOC_SH_LABEL + -- : BFD_RELOC_SH_LOOP_START + -- : BFD_RELOC_SH_LOOP_END + -- : BFD_RELOC_SH_COPY + -- : BFD_RELOC_SH_GLOB_DAT + -- : BFD_RELOC_SH_JMP_SLOT + -- : BFD_RELOC_SH_RELATIVE + -- : BFD_RELOC_SH_GOTPC + -- : BFD_RELOC_SH_GOT_LOW16 + -- : BFD_RELOC_SH_GOT_MEDLOW16 + -- : BFD_RELOC_SH_GOT_MEDHI16 + -- : BFD_RELOC_SH_GOT_HI16 + -- : BFD_RELOC_SH_GOTPLT_LOW16 + -- : BFD_RELOC_SH_GOTPLT_MEDLOW16 + -- : BFD_RELOC_SH_GOTPLT_MEDHI16 + -- : BFD_RELOC_SH_GOTPLT_HI16 + -- : BFD_RELOC_SH_PLT_LOW16 + -- : BFD_RELOC_SH_PLT_MEDLOW16 + -- : BFD_RELOC_SH_PLT_MEDHI16 + -- : BFD_RELOC_SH_PLT_HI16 + -- : BFD_RELOC_SH_GOTOFF_LOW16 + -- : BFD_RELOC_SH_GOTOFF_MEDLOW16 + -- : BFD_RELOC_SH_GOTOFF_MEDHI16 + -- : BFD_RELOC_SH_GOTOFF_HI16 + -- : BFD_RELOC_SH_GOTPC_LOW16 + -- : BFD_RELOC_SH_GOTPC_MEDLOW16 + -- : BFD_RELOC_SH_GOTPC_MEDHI16 + -- : BFD_RELOC_SH_GOTPC_HI16 + -- : BFD_RELOC_SH_COPY64 + -- : BFD_RELOC_SH_GLOB_DAT64 + -- : BFD_RELOC_SH_JMP_SLOT64 + -- : BFD_RELOC_SH_RELATIVE64 + -- : BFD_RELOC_SH_GOT10BY4 + -- : BFD_RELOC_SH_GOT10BY8 + -- : BFD_RELOC_SH_GOTPLT10BY4 + -- : BFD_RELOC_SH_GOTPLT10BY8 + -- : BFD_RELOC_SH_GOTPLT32 + -- : BFD_RELOC_SH_SHMEDIA_CODE + -- : BFD_RELOC_SH_IMMU5 + -- : BFD_RELOC_SH_IMMS6 + -- : BFD_RELOC_SH_IMMS6BY32 + -- : BFD_RELOC_SH_IMMU6 + -- : BFD_RELOC_SH_IMMS10 + -- : BFD_RELOC_SH_IMMS10BY2 + -- : BFD_RELOC_SH_IMMS10BY4 + -- : BFD_RELOC_SH_IMMS10BY8 + -- : BFD_RELOC_SH_IMMS16 + -- : BFD_RELOC_SH_IMMU16 + -- : BFD_RELOC_SH_IMM_LOW16 + -- : BFD_RELOC_SH_IMM_LOW16_PCREL + -- : BFD_RELOC_SH_IMM_MEDLOW16 + -- : BFD_RELOC_SH_IMM_MEDLOW16_PCREL + -- : BFD_RELOC_SH_IMM_MEDHI16 + -- : BFD_RELOC_SH_IMM_MEDHI16_PCREL + -- : BFD_RELOC_SH_IMM_HI16 + -- : BFD_RELOC_SH_IMM_HI16_PCREL + -- : BFD_RELOC_SH_PT_16 + -- : BFD_RELOC_SH_TLS_GD_32 + -- : BFD_RELOC_SH_TLS_LD_32 + -- : BFD_RELOC_SH_TLS_LDO_32 + -- : BFD_RELOC_SH_TLS_IE_32 + -- : BFD_RELOC_SH_TLS_LE_32 + -- : BFD_RELOC_SH_TLS_DTPMOD32 + -- : BFD_RELOC_SH_TLS_DTPOFF32 + -- : BFD_RELOC_SH_TLS_TPOFF32 + Renesas / SuperH SH relocs. Not all of these appear in object + files. + + -- : BFD_RELOC_ARC_B22_PCREL + ARC Cores relocs. ARC 22 bit pc-relative branch. The lowest two + bits must be zero and are not stored in the instruction. The high + 20 bits are installed in bits 26 through 7 of the instruction. + + -- : BFD_RELOC_ARC_B26 + ARC 26 bit absolute branch. The lowest two bits must be zero and + are not stored in the instruction. The high 24 bits are installed + in bits 23 through 0. + + -- : BFD_RELOC_BFIN_16_IMM + ADI Blackfin 16 bit immediate absolute reloc. + + -- : BFD_RELOC_BFIN_16_HIGH + ADI Blackfin 16 bit immediate absolute reloc higher 16 bits. + + -- : BFD_RELOC_BFIN_4_PCREL + ADI Blackfin 'a' part of LSETUP. + + -- : BFD_RELOC_BFIN_5_PCREL + ADI Blackfin. + + -- : BFD_RELOC_BFIN_16_LOW + ADI Blackfin 16 bit immediate absolute reloc lower 16 bits. + + -- : BFD_RELOC_BFIN_10_PCREL + ADI Blackfin. + + -- : BFD_RELOC_BFIN_11_PCREL + ADI Blackfin 'b' part of LSETUP. + + -- : BFD_RELOC_BFIN_12_PCREL_JUMP + ADI Blackfin. + + -- : BFD_RELOC_BFIN_12_PCREL_JUMP_S + ADI Blackfin Short jump, pcrel. + + -- : BFD_RELOC_BFIN_24_PCREL_CALL_X + ADI Blackfin Call.x not implemented. + + -- : BFD_RELOC_BFIN_24_PCREL_JUMP_L + ADI Blackfin Long Jump pcrel. + + -- : BFD_RELOC_BFIN_GOT17M4 + -- : BFD_RELOC_BFIN_GOTHI + -- : BFD_RELOC_BFIN_GOTLO + -- : BFD_RELOC_BFIN_FUNCDESC + -- : BFD_RELOC_BFIN_FUNCDESC_GOT17M4 + -- : BFD_RELOC_BFIN_FUNCDESC_GOTHI + -- : BFD_RELOC_BFIN_FUNCDESC_GOTLO + -- : BFD_RELOC_BFIN_FUNCDESC_VALUE + -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4 + -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI + -- : BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO + -- : BFD_RELOC_BFIN_GOTOFF17M4 + -- : BFD_RELOC_BFIN_GOTOFFHI + -- : BFD_RELOC_BFIN_GOTOFFLO + ADI Blackfin FD-PIC relocations. + + -- : BFD_RELOC_BFIN_GOT + ADI Blackfin GOT relocation. + + -- : BFD_RELOC_BFIN_PLTPC + ADI Blackfin PLTPC relocation. + + -- : BFD_ARELOC_BFIN_PUSH + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_CONST + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_ADD + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_SUB + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_MULT + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_DIV + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_MOD + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_LSHIFT + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_RSHIFT + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_AND + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_OR + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_XOR + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_LAND + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_LOR + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_LEN + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_NEG + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_COMP + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_PAGE + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_HWPAGE + ADI Blackfin arithmetic relocation. + + -- : BFD_ARELOC_BFIN_ADDR + ADI Blackfin arithmetic relocation. + + -- : BFD_RELOC_D10V_10_PCREL_R + Mitsubishi D10V relocs. This is a 10-bit reloc with the right 2 + bits assumed to be 0. + + -- : BFD_RELOC_D10V_10_PCREL_L + Mitsubishi D10V relocs. This is a 10-bit reloc with the right 2 + bits assumed to be 0. This is the same as the previous reloc + except it is in the left container, i.e., shifted left 15 bits. + + -- : BFD_RELOC_D10V_18 + This is an 18-bit reloc with the right 2 bits assumed to be 0. + + -- : BFD_RELOC_D10V_18_PCREL + This is an 18-bit reloc with the right 2 bits assumed to be 0. + + -- : BFD_RELOC_D30V_6 + Mitsubishi D30V relocs. This is a 6-bit absolute reloc. + + -- : BFD_RELOC_D30V_9_PCREL + This is a 6-bit pc-relative reloc with the right 3 bits assumed to + be 0. + + -- : BFD_RELOC_D30V_9_PCREL_R + This is a 6-bit pc-relative reloc with the right 3 bits assumed to + be 0. Same as the previous reloc but on the right side of the + container. + + -- : BFD_RELOC_D30V_15 + This is a 12-bit absolute reloc with the right 3 bitsassumed to be + 0. + + -- : BFD_RELOC_D30V_15_PCREL + This is a 12-bit pc-relative reloc with the right 3 bits assumed + to be 0. + + -- : BFD_RELOC_D30V_15_PCREL_R + This is a 12-bit pc-relative reloc with the right 3 bits assumed + to be 0. Same as the previous reloc but on the right side of the + container. + + -- : BFD_RELOC_D30V_21 + This is an 18-bit absolute reloc with the right 3 bits assumed to + be 0. + + -- : BFD_RELOC_D30V_21_PCREL + This is an 18-bit pc-relative reloc with the right 3 bits assumed + to be 0. + + -- : BFD_RELOC_D30V_21_PCREL_R + This is an 18-bit pc-relative reloc with the right 3 bits assumed + to be 0. Same as the previous reloc but on the right side of the + container. + + -- : BFD_RELOC_D30V_32 + This is a 32-bit absolute reloc. + + -- : BFD_RELOC_D30V_32_PCREL + This is a 32-bit pc-relative reloc. + + -- : BFD_RELOC_DLX_HI16_S + DLX relocs + + -- : BFD_RELOC_DLX_LO16 + DLX relocs + + -- : BFD_RELOC_DLX_JMP26 + DLX relocs + + -- : BFD_RELOC_M32C_HI8 + -- : BFD_RELOC_M32C_RL_JUMP + -- : BFD_RELOC_M32C_RL_1ADDR + -- : BFD_RELOC_M32C_RL_2ADDR + Renesas M16C/M32C Relocations. + + -- : BFD_RELOC_M32R_24 + Renesas M32R (formerly Mitsubishi M32R) relocs. This is a 24 bit + absolute address. + + -- : BFD_RELOC_M32R_10_PCREL + This is a 10-bit pc-relative reloc with the right 2 bits assumed + to be 0. + + -- : BFD_RELOC_M32R_18_PCREL + This is an 18-bit reloc with the right 2 bits assumed to be 0. + + -- : BFD_RELOC_M32R_26_PCREL + This is a 26-bit reloc with the right 2 bits assumed to be 0. + + -- : BFD_RELOC_M32R_HI16_ULO + This is a 16-bit reloc containing the high 16 bits of an address + used when the lower 16 bits are treated as unsigned. + + -- : BFD_RELOC_M32R_HI16_SLO + This is a 16-bit reloc containing the high 16 bits of an address + used when the lower 16 bits are treated as signed. + + -- : BFD_RELOC_M32R_LO16 + This is a 16-bit reloc containing the lower 16 bits of an address. + + -- : BFD_RELOC_M32R_SDA16 + This is a 16-bit reloc containing the small data area offset for + use in add3, load, and store instructions. + + -- : BFD_RELOC_M32R_GOT24 + -- : BFD_RELOC_M32R_26_PLTREL + -- : BFD_RELOC_M32R_COPY + -- : BFD_RELOC_M32R_GLOB_DAT + -- : BFD_RELOC_M32R_JMP_SLOT + -- : BFD_RELOC_M32R_RELATIVE + -- : BFD_RELOC_M32R_GOTOFF + -- : BFD_RELOC_M32R_GOTOFF_HI_ULO + -- : BFD_RELOC_M32R_GOTOFF_HI_SLO + -- : BFD_RELOC_M32R_GOTOFF_LO + -- : BFD_RELOC_M32R_GOTPC24 + -- : BFD_RELOC_M32R_GOT16_HI_ULO + -- : BFD_RELOC_M32R_GOT16_HI_SLO + -- : BFD_RELOC_M32R_GOT16_LO + -- : BFD_RELOC_M32R_GOTPC_HI_ULO + -- : BFD_RELOC_M32R_GOTPC_HI_SLO + -- : BFD_RELOC_M32R_GOTPC_LO + For PIC. + + -- : BFD_RELOC_V850_9_PCREL + This is a 9-bit reloc + + -- : BFD_RELOC_V850_22_PCREL + This is a 22-bit reloc + + -- : BFD_RELOC_V850_SDA_16_16_OFFSET + This is a 16 bit offset from the short data area pointer. + + -- : BFD_RELOC_V850_SDA_15_16_OFFSET + This is a 16 bit offset (of which only 15 bits are used) from the + short data area pointer. + + -- : BFD_RELOC_V850_ZDA_16_16_OFFSET + This is a 16 bit offset from the zero data area pointer. + + -- : BFD_RELOC_V850_ZDA_15_16_OFFSET + This is a 16 bit offset (of which only 15 bits are used) from the + zero data area pointer. + + -- : BFD_RELOC_V850_TDA_6_8_OFFSET + This is an 8 bit offset (of which only 6 bits are used) from the + tiny data area pointer. + + -- : BFD_RELOC_V850_TDA_7_8_OFFSET + This is an 8bit offset (of which only 7 bits are used) from the + tiny data area pointer. + + -- : BFD_RELOC_V850_TDA_7_7_OFFSET + This is a 7 bit offset from the tiny data area pointer. + + -- : BFD_RELOC_V850_TDA_16_16_OFFSET + This is a 16 bit offset from the tiny data area pointer. + + -- : BFD_RELOC_V850_TDA_4_5_OFFSET + This is a 5 bit offset (of which only 4 bits are used) from the + tiny data area pointer. + + -- : BFD_RELOC_V850_TDA_4_4_OFFSET + This is a 4 bit offset from the tiny data area pointer. + + -- : BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET + This is a 16 bit offset from the short data area pointer, with the + bits placed non-contiguously in the instruction. + + -- : BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET + This is a 16 bit offset from the zero data area pointer, with the + bits placed non-contiguously in the instruction. + + -- : BFD_RELOC_V850_CALLT_6_7_OFFSET + This is a 6 bit offset from the call table base pointer. + + -- : BFD_RELOC_V850_CALLT_16_16_OFFSET + This is a 16 bit offset from the call table base pointer. + + -- : BFD_RELOC_V850_LONGCALL + Used for relaxing indirect function calls. + + -- : BFD_RELOC_V850_LONGJUMP + Used for relaxing indirect jumps. + + -- : BFD_RELOC_V850_ALIGN + Used to maintain alignment whilst relaxing. + + -- : BFD_RELOC_V850_LO16_SPLIT_OFFSET + This is a variation of BFD_RELOC_LO16 that can be used in v850e + ld.bu instructions. + + -- : BFD_RELOC_MN10300_32_PCREL + This is a 32bit pcrel reloc for the mn10300, offset by two bytes + in the instruction. + + -- : BFD_RELOC_MN10300_16_PCREL + This is a 16bit pcrel reloc for the mn10300, offset by two bytes + in the instruction. + + -- : BFD_RELOC_TIC30_LDP + This is a 8bit DP reloc for the tms320c30, where the most + significant 8 bits of a 24 bit word are placed into the least + significant 8 bits of the opcode. + + -- : BFD_RELOC_TIC54X_PARTLS7 + This is a 7bit reloc for the tms320c54x, where the least + significant 7 bits of a 16 bit word are placed into the least + significant 7 bits of the opcode. + + -- : BFD_RELOC_TIC54X_PARTMS9 + This is a 9bit DP reloc for the tms320c54x, where the most + significant 9 bits of a 16 bit word are placed into the least + significant 9 bits of the opcode. + + -- : BFD_RELOC_TIC54X_23 + This is an extended address 23-bit reloc for the tms320c54x. + + -- : BFD_RELOC_TIC54X_16_OF_23 + This is a 16-bit reloc for the tms320c54x, where the least + significant 16 bits of a 23-bit extended address are placed into + the opcode. + + -- : BFD_RELOC_TIC54X_MS7_OF_23 + This is a reloc for the tms320c54x, where the most significant 7 + bits of a 23-bit extended address are placed into the opcode. + + -- : BFD_RELOC_FR30_48 + This is a 48 bit reloc for the FR30 that stores 32 bits. + + -- : BFD_RELOC_FR30_20 + This is a 32 bit reloc for the FR30 that stores 20 bits split up + into two sections. + + -- : BFD_RELOC_FR30_6_IN_4 + This is a 16 bit reloc for the FR30 that stores a 6 bit word + offset in 4 bits. + + -- : BFD_RELOC_FR30_8_IN_8 + This is a 16 bit reloc for the FR30 that stores an 8 bit byte + offset into 8 bits. + + -- : BFD_RELOC_FR30_9_IN_8 + This is a 16 bit reloc for the FR30 that stores a 9 bit short + offset into 8 bits. + + -- : BFD_RELOC_FR30_10_IN_8 + This is a 16 bit reloc for the FR30 that stores a 10 bit word + offset into 8 bits. + + -- : BFD_RELOC_FR30_9_PCREL + This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative + short offset into 8 bits. + + -- : BFD_RELOC_FR30_12_PCREL + This is a 16 bit reloc for the FR30 that stores a 12 bit pc + relative short offset into 11 bits. + + -- : BFD_RELOC_MCORE_PCREL_IMM8BY4 + -- : BFD_RELOC_MCORE_PCREL_IMM11BY2 + -- : BFD_RELOC_MCORE_PCREL_IMM4BY2 + -- : BFD_RELOC_MCORE_PCREL_32 + -- : BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2 + -- : BFD_RELOC_MCORE_RVA + Motorola Mcore relocations. + + -- : BFD_RELOC_MEP_8 + -- : BFD_RELOC_MEP_16 + -- : BFD_RELOC_MEP_32 + -- : BFD_RELOC_MEP_PCREL8A2 + -- : BFD_RELOC_MEP_PCREL12A2 + -- : BFD_RELOC_MEP_PCREL17A2 + -- : BFD_RELOC_MEP_PCREL24A2 + -- : BFD_RELOC_MEP_PCABS24A2 + -- : BFD_RELOC_MEP_LOW16 + -- : BFD_RELOC_MEP_HI16U + -- : BFD_RELOC_MEP_HI16S + -- : BFD_RELOC_MEP_GPREL + -- : BFD_RELOC_MEP_TPREL + -- : BFD_RELOC_MEP_TPREL7 + -- : BFD_RELOC_MEP_TPREL7A2 + -- : BFD_RELOC_MEP_TPREL7A4 + -- : BFD_RELOC_MEP_UIMM24 + -- : BFD_RELOC_MEP_ADDR24A4 + -- : BFD_RELOC_MEP_GNU_VTINHERIT + -- : BFD_RELOC_MEP_GNU_VTENTRY + Toshiba Media Processor Relocations. + + -- : BFD_RELOC_MMIX_GETA + -- : BFD_RELOC_MMIX_GETA_1 + -- : BFD_RELOC_MMIX_GETA_2 + -- : BFD_RELOC_MMIX_GETA_3 + These are relocations for the GETA instruction. + + -- : BFD_RELOC_MMIX_CBRANCH + -- : BFD_RELOC_MMIX_CBRANCH_J + -- : BFD_RELOC_MMIX_CBRANCH_1 + -- : BFD_RELOC_MMIX_CBRANCH_2 + -- : BFD_RELOC_MMIX_CBRANCH_3 + These are relocations for a conditional branch instruction. + + -- : BFD_RELOC_MMIX_PUSHJ + -- : BFD_RELOC_MMIX_PUSHJ_1 + -- : BFD_RELOC_MMIX_PUSHJ_2 + -- : BFD_RELOC_MMIX_PUSHJ_3 + -- : BFD_RELOC_MMIX_PUSHJ_STUBBABLE + These are relocations for the PUSHJ instruction. + + -- : BFD_RELOC_MMIX_JMP + -- : BFD_RELOC_MMIX_JMP_1 + -- : BFD_RELOC_MMIX_JMP_2 + -- : BFD_RELOC_MMIX_JMP_3 + These are relocations for the JMP instruction. + + -- : BFD_RELOC_MMIX_ADDR19 + This is a relocation for a relative address as in a GETA + instruction or a branch. + + -- : BFD_RELOC_MMIX_ADDR27 + This is a relocation for a relative address as in a JMP + instruction. + + -- : BFD_RELOC_MMIX_REG_OR_BYTE + This is a relocation for an instruction field that may be a general + register or a value 0..255. + + -- : BFD_RELOC_MMIX_REG + This is a relocation for an instruction field that may be a general + register. + + -- : BFD_RELOC_MMIX_BASE_PLUS_OFFSET + This is a relocation for two instruction fields holding a register + and an offset, the equivalent of the relocation. + + -- : BFD_RELOC_MMIX_LOCAL + This relocation is an assertion that the expression is not + allocated as a global register. It does not modify contents. + + -- : BFD_RELOC_AVR_7_PCREL + This is a 16 bit reloc for the AVR that stores 8 bit pc relative + short offset into 7 bits. + + -- : BFD_RELOC_AVR_13_PCREL + This is a 16 bit reloc for the AVR that stores 13 bit pc relative + short offset into 12 bits. + + -- : BFD_RELOC_AVR_16_PM + This is a 16 bit reloc for the AVR that stores 17 bit value + (usually program memory address) into 16 bits. + + -- : BFD_RELOC_AVR_LO8_LDI + This is a 16 bit reloc for the AVR that stores 8 bit value (usually + data memory address) into 8 bit immediate value of LDI insn. + + -- : BFD_RELOC_AVR_HI8_LDI + This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 + bit of data memory address) into 8 bit immediate value of LDI insn. + + -- : BFD_RELOC_AVR_HH8_LDI + This is a 16 bit reloc for the AVR that stores 8 bit value (most + high 8 bit of program memory address) into 8 bit immediate value + of LDI insn. + + -- : BFD_RELOC_AVR_MS8_LDI + This is a 16 bit reloc for the AVR that stores 8 bit value (most + high 8 bit of 32 bit value) into 8 bit immediate value of LDI insn. + + -- : BFD_RELOC_AVR_LO8_LDI_NEG + This is a 16 bit reloc for the AVR that stores negated 8 bit value + (usually data memory address) into 8 bit immediate value of SUBI + insn. + + -- : BFD_RELOC_AVR_HI8_LDI_NEG + This is a 16 bit reloc for the AVR that stores negated 8 bit value + (high 8 bit of data memory address) into 8 bit immediate value of + SUBI insn. + + -- : BFD_RELOC_AVR_HH8_LDI_NEG + This is a 16 bit reloc for the AVR that stores negated 8 bit value + (most high 8 bit of program memory address) into 8 bit immediate + value of LDI or SUBI insn. + + -- : BFD_RELOC_AVR_MS8_LDI_NEG + This is a 16 bit reloc for the AVR that stores negated 8 bit value + (msb of 32 bit value) into 8 bit immediate value of LDI insn. + + -- : BFD_RELOC_AVR_LO8_LDI_PM + This is a 16 bit reloc for the AVR that stores 8 bit value (usually + command address) into 8 bit immediate value of LDI insn. + + -- : BFD_RELOC_AVR_LO8_LDI_GS + This is a 16 bit reloc for the AVR that stores 8 bit value + (command address) into 8 bit immediate value of LDI insn. If the + address is beyond the 128k boundary, the linker inserts a jump + stub for this reloc in the lower 128k. + + -- : BFD_RELOC_AVR_HI8_LDI_PM + This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 + bit of command address) into 8 bit immediate value of LDI insn. + + -- : BFD_RELOC_AVR_HI8_LDI_GS + This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 + bit of command address) into 8 bit immediate value of LDI insn. + If the address is beyond the 128k boundary, the linker inserts a + jump stub for this reloc below 128k. + + -- : BFD_RELOC_AVR_HH8_LDI_PM + This is a 16 bit reloc for the AVR that stores 8 bit value (most + high 8 bit of command address) into 8 bit immediate value of LDI + insn. + + -- : BFD_RELOC_AVR_LO8_LDI_PM_NEG + This is a 16 bit reloc for the AVR that stores negated 8 bit value + (usually command address) into 8 bit immediate value of SUBI insn. + + -- : BFD_RELOC_AVR_HI8_LDI_PM_NEG + This is a 16 bit reloc for the AVR that stores negated 8 bit value + (high 8 bit of 16 bit command address) into 8 bit immediate value + of SUBI insn. + + -- : BFD_RELOC_AVR_HH8_LDI_PM_NEG + This is a 16 bit reloc for the AVR that stores negated 8 bit value + (high 6 bit of 22 bit command address) into 8 bit immediate value + of SUBI insn. + + -- : BFD_RELOC_AVR_CALL + This is a 32 bit reloc for the AVR that stores 23 bit value into + 22 bits. + + -- : BFD_RELOC_AVR_LDI + This is a 16 bit reloc for the AVR that stores all needed bits for + absolute addressing with ldi with overflow check to linktime + + -- : BFD_RELOC_AVR_6 + This is a 6 bit reloc for the AVR that stores offset for ldd/std + instructions + + -- : BFD_RELOC_AVR_6_ADIW + This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw + instructions + + -- : BFD_RELOC_390_12 + Direct 12 bit. + + -- : BFD_RELOC_390_GOT12 + 12 bit GOT offset. + + -- : BFD_RELOC_390_PLT32 + 32 bit PC relative PLT address. + + -- : BFD_RELOC_390_COPY + Copy symbol at runtime. + + -- : BFD_RELOC_390_GLOB_DAT + Create GOT entry. + + -- : BFD_RELOC_390_JMP_SLOT + Create PLT entry. + + -- : BFD_RELOC_390_RELATIVE + Adjust by program base. + + -- : BFD_RELOC_390_GOTPC + 32 bit PC relative offset to GOT. + + -- : BFD_RELOC_390_GOT16 + 16 bit GOT offset. + + -- : BFD_RELOC_390_PC16DBL + PC relative 16 bit shifted by 1. + + -- : BFD_RELOC_390_PLT16DBL + 16 bit PC rel. PLT shifted by 1. + + -- : BFD_RELOC_390_PC32DBL + PC relative 32 bit shifted by 1. + + -- : BFD_RELOC_390_PLT32DBL + 32 bit PC rel. PLT shifted by 1. + + -- : BFD_RELOC_390_GOTPCDBL + 32 bit PC rel. GOT shifted by 1. + + -- : BFD_RELOC_390_GOT64 + 64 bit GOT offset. + + -- : BFD_RELOC_390_PLT64 + 64 bit PC relative PLT address. + + -- : BFD_RELOC_390_GOTENT + 32 bit rel. offset to GOT entry. + + -- : BFD_RELOC_390_GOTOFF64 + 64 bit offset to GOT. + + -- : BFD_RELOC_390_GOTPLT12 + 12-bit offset to symbol-entry within GOT, with PLT handling. + + -- : BFD_RELOC_390_GOTPLT16 + 16-bit offset to symbol-entry within GOT, with PLT handling. + + -- : BFD_RELOC_390_GOTPLT32 + 32-bit offset to symbol-entry within GOT, with PLT handling. + + -- : BFD_RELOC_390_GOTPLT64 + 64-bit offset to symbol-entry within GOT, with PLT handling. + + -- : BFD_RELOC_390_GOTPLTENT + 32-bit rel. offset to symbol-entry within GOT, with PLT handling. + + -- : BFD_RELOC_390_PLTOFF16 + 16-bit rel. offset from the GOT to a PLT entry. + + -- : BFD_RELOC_390_PLTOFF32 + 32-bit rel. offset from the GOT to a PLT entry. + + -- : BFD_RELOC_390_PLTOFF64 + 64-bit rel. offset from the GOT to a PLT entry. + + -- : BFD_RELOC_390_TLS_LOAD + -- : BFD_RELOC_390_TLS_GDCALL + -- : BFD_RELOC_390_TLS_LDCALL + -- : BFD_RELOC_390_TLS_GD32 + -- : BFD_RELOC_390_TLS_GD64 + -- : BFD_RELOC_390_TLS_GOTIE12 + -- : BFD_RELOC_390_TLS_GOTIE32 + -- : BFD_RELOC_390_TLS_GOTIE64 + -- : BFD_RELOC_390_TLS_LDM32 + -- : BFD_RELOC_390_TLS_LDM64 + -- : BFD_RELOC_390_TLS_IE32 + -- : BFD_RELOC_390_TLS_IE64 + -- : BFD_RELOC_390_TLS_IEENT + -- : BFD_RELOC_390_TLS_LE32 + -- : BFD_RELOC_390_TLS_LE64 + -- : BFD_RELOC_390_TLS_LDO32 + -- : BFD_RELOC_390_TLS_LDO64 + -- : BFD_RELOC_390_TLS_DTPMOD + -- : BFD_RELOC_390_TLS_DTPOFF + -- : BFD_RELOC_390_TLS_TPOFF + s390 tls relocations. + + -- : BFD_RELOC_390_20 + -- : BFD_RELOC_390_GOT20 + -- : BFD_RELOC_390_GOTPLT20 + -- : BFD_RELOC_390_TLS_GOTIE20 + Long displacement extension. + + -- : BFD_RELOC_SCORE_DUMMY1 + Score relocations + + -- : BFD_RELOC_SCORE_GPREL15 + Low 16 bit for load/store + + -- : BFD_RELOC_SCORE_DUMMY2 + -- : BFD_RELOC_SCORE_JMP + This is a 24-bit reloc with the right 1 bit assumed to be 0 + + -- : BFD_RELOC_SCORE_BRANCH + This is a 19-bit reloc with the right 1 bit assumed to be 0 + + -- : BFD_RELOC_SCORE16_JMP + This is a 11-bit reloc with the right 1 bit assumed to be 0 + + -- : BFD_RELOC_SCORE16_BRANCH + This is a 8-bit reloc with the right 1 bit assumed to be 0 + + -- : BFD_RELOC_SCORE_GOT15 + -- : BFD_RELOC_SCORE_GOT_LO16 + -- : BFD_RELOC_SCORE_CALL15 + -- : BFD_RELOC_SCORE_DUMMY_HI16 + Undocumented Score relocs + + -- : BFD_RELOC_IP2K_FR9 + Scenix IP2K - 9-bit register number / data address + + -- : BFD_RELOC_IP2K_BANK + Scenix IP2K - 4-bit register/data bank number + + -- : BFD_RELOC_IP2K_ADDR16CJP + Scenix IP2K - low 13 bits of instruction word address + + -- : BFD_RELOC_IP2K_PAGE3 + Scenix IP2K - high 3 bits of instruction word address + + -- : BFD_RELOC_IP2K_LO8DATA + -- : BFD_RELOC_IP2K_HI8DATA + -- : BFD_RELOC_IP2K_EX8DATA + Scenix IP2K - ext/low/high 8 bits of data address + + -- : BFD_RELOC_IP2K_LO8INSN + -- : BFD_RELOC_IP2K_HI8INSN + Scenix IP2K - low/high 8 bits of instruction word address + + -- : BFD_RELOC_IP2K_PC_SKIP + Scenix IP2K - even/odd PC modifier to modify snb pcl.0 + + -- : BFD_RELOC_IP2K_TEXT + Scenix IP2K - 16 bit word address in text section. + + -- : BFD_RELOC_IP2K_FR_OFFSET + Scenix IP2K - 7-bit sp or dp offset + + -- : BFD_RELOC_VPE4KMATH_DATA + -- : BFD_RELOC_VPE4KMATH_INSN + Scenix VPE4K coprocessor - data/insn-space addressing + + -- : BFD_RELOC_VTABLE_INHERIT + -- : BFD_RELOC_VTABLE_ENTRY + These two relocations are used by the linker to determine which of + the entries in a C++ virtual function table are actually used. + When the -gc-sections option is given, the linker will zero out + the entries that are not used, so that the code for those + functions need not be included in the output. + + VTABLE_INHERIT is a zero-space relocation used to describe to the + linker the inheritance tree of a C++ virtual function table. The + relocation's symbol should be the parent class' vtable, and the + relocation should be located at the child vtable. + + VTABLE_ENTRY is a zero-space relocation that describes the use of a + virtual function table entry. The reloc's symbol should refer to + the table of the class mentioned in the code. Off of that base, + an offset describes the entry that is being used. For Rela hosts, + this offset is stored in the reloc's addend. For Rel hosts, we + are forced to put this offset in the reloc's section offset. + + -- : BFD_RELOC_IA64_IMM14 + -- : BFD_RELOC_IA64_IMM22 + -- : BFD_RELOC_IA64_IMM64 + -- : BFD_RELOC_IA64_DIR32MSB + -- : BFD_RELOC_IA64_DIR32LSB + -- : BFD_RELOC_IA64_DIR64MSB + -- : BFD_RELOC_IA64_DIR64LSB + -- : BFD_RELOC_IA64_GPREL22 + -- : BFD_RELOC_IA64_GPREL64I + -- : BFD_RELOC_IA64_GPREL32MSB + -- : BFD_RELOC_IA64_GPREL32LSB + -- : BFD_RELOC_IA64_GPREL64MSB + -- : BFD_RELOC_IA64_GPREL64LSB + -- : BFD_RELOC_IA64_LTOFF22 + -- : BFD_RELOC_IA64_LTOFF64I + -- : BFD_RELOC_IA64_PLTOFF22 + -- : BFD_RELOC_IA64_PLTOFF64I + -- : BFD_RELOC_IA64_PLTOFF64MSB + -- : BFD_RELOC_IA64_PLTOFF64LSB + -- : BFD_RELOC_IA64_FPTR64I + -- : BFD_RELOC_IA64_FPTR32MSB + -- : BFD_RELOC_IA64_FPTR32LSB + -- : BFD_RELOC_IA64_FPTR64MSB + -- : BFD_RELOC_IA64_FPTR64LSB + -- : BFD_RELOC_IA64_PCREL21B + -- : BFD_RELOC_IA64_PCREL21BI + -- : BFD_RELOC_IA64_PCREL21M + -- : BFD_RELOC_IA64_PCREL21F + -- : BFD_RELOC_IA64_PCREL22 + -- : BFD_RELOC_IA64_PCREL60B + -- : BFD_RELOC_IA64_PCREL64I + -- : BFD_RELOC_IA64_PCREL32MSB + -- : BFD_RELOC_IA64_PCREL32LSB + -- : BFD_RELOC_IA64_PCREL64MSB + -- : BFD_RELOC_IA64_PCREL64LSB + -- : BFD_RELOC_IA64_LTOFF_FPTR22 + -- : BFD_RELOC_IA64_LTOFF_FPTR64I + -- : BFD_RELOC_IA64_LTOFF_FPTR32MSB + -- : BFD_RELOC_IA64_LTOFF_FPTR32LSB + -- : BFD_RELOC_IA64_LTOFF_FPTR64MSB + -- : BFD_RELOC_IA64_LTOFF_FPTR64LSB + -- : BFD_RELOC_IA64_SEGREL32MSB + -- : BFD_RELOC_IA64_SEGREL32LSB + -- : BFD_RELOC_IA64_SEGREL64MSB + -- : BFD_RELOC_IA64_SEGREL64LSB + -- : BFD_RELOC_IA64_SECREL32MSB + -- : BFD_RELOC_IA64_SECREL32LSB + -- : BFD_RELOC_IA64_SECREL64MSB + -- : BFD_RELOC_IA64_SECREL64LSB + -- : BFD_RELOC_IA64_REL32MSB + -- : BFD_RELOC_IA64_REL32LSB + -- : BFD_RELOC_IA64_REL64MSB + -- : BFD_RELOC_IA64_REL64LSB + -- : BFD_RELOC_IA64_LTV32MSB + -- : BFD_RELOC_IA64_LTV32LSB + -- : BFD_RELOC_IA64_LTV64MSB + -- : BFD_RELOC_IA64_LTV64LSB + -- : BFD_RELOC_IA64_IPLTMSB + -- : BFD_RELOC_IA64_IPLTLSB + -- : BFD_RELOC_IA64_COPY + -- : BFD_RELOC_IA64_LTOFF22X + -- : BFD_RELOC_IA64_LDXMOV + -- : BFD_RELOC_IA64_TPREL14 + -- : BFD_RELOC_IA64_TPREL22 + -- : BFD_RELOC_IA64_TPREL64I + -- : BFD_RELOC_IA64_TPREL64MSB + -- : BFD_RELOC_IA64_TPREL64LSB + -- : BFD_RELOC_IA64_LTOFF_TPREL22 + -- : BFD_RELOC_IA64_DTPMOD64MSB + -- : BFD_RELOC_IA64_DTPMOD64LSB + -- : BFD_RELOC_IA64_LTOFF_DTPMOD22 + -- : BFD_RELOC_IA64_DTPREL14 + -- : BFD_RELOC_IA64_DTPREL22 + -- : BFD_RELOC_IA64_DTPREL64I + -- : BFD_RELOC_IA64_DTPREL32MSB + -- : BFD_RELOC_IA64_DTPREL32LSB + -- : BFD_RELOC_IA64_DTPREL64MSB + -- : BFD_RELOC_IA64_DTPREL64LSB + -- : BFD_RELOC_IA64_LTOFF_DTPREL22 + Intel IA64 Relocations. + + -- : BFD_RELOC_M68HC11_HI8 + Motorola 68HC11 reloc. This is the 8 bit high part of an absolute + address. + + -- : BFD_RELOC_M68HC11_LO8 + Motorola 68HC11 reloc. This is the 8 bit low part of an absolute + address. + + -- : BFD_RELOC_M68HC11_3B + Motorola 68HC11 reloc. This is the 3 bit of a value. + + -- : BFD_RELOC_M68HC11_RL_JUMP + Motorola 68HC11 reloc. This reloc marks the beginning of a + jump/call instruction. It is used for linker relaxation to + correctly identify beginning of instruction and change some + branches to use PC-relative addressing mode. + + -- : BFD_RELOC_M68HC11_RL_GROUP + Motorola 68HC11 reloc. This reloc marks a group of several + instructions that gcc generates and for which the linker + relaxation pass can modify and/or remove some of them. + + -- : BFD_RELOC_M68HC11_LO16 + Motorola 68HC11 reloc. This is the 16-bit lower part of an + address. It is used for 'call' instruction to specify the symbol + address without any special transformation (due to memory bank + window). + + -- : BFD_RELOC_M68HC11_PAGE + Motorola 68HC11 reloc. This is a 8-bit reloc that specifies the + page number of an address. It is used by 'call' instruction to + specify the page number of the symbol. + + -- : BFD_RELOC_M68HC11_24 + Motorola 68HC11 reloc. This is a 24-bit reloc that represents the + address with a 16-bit value and a 8-bit page number. The symbol + address is transformed to follow the 16K memory bank of 68HC12 + (seen as mapped in the window). + + -- : BFD_RELOC_M68HC12_5B + Motorola 68HC12 reloc. This is the 5 bits of a value. + + -- : BFD_RELOC_16C_NUM08 + -- : BFD_RELOC_16C_NUM08_C + -- : BFD_RELOC_16C_NUM16 + -- : BFD_RELOC_16C_NUM16_C + -- : BFD_RELOC_16C_NUM32 + -- : BFD_RELOC_16C_NUM32_C + -- : BFD_RELOC_16C_DISP04 + -- : BFD_RELOC_16C_DISP04_C + -- : BFD_RELOC_16C_DISP08 + -- : BFD_RELOC_16C_DISP08_C + -- : BFD_RELOC_16C_DISP16 + -- : BFD_RELOC_16C_DISP16_C + -- : BFD_RELOC_16C_DISP24 + -- : BFD_RELOC_16C_DISP24_C + -- : BFD_RELOC_16C_DISP24a + -- : BFD_RELOC_16C_DISP24a_C + -- : BFD_RELOC_16C_REG04 + -- : BFD_RELOC_16C_REG04_C + -- : BFD_RELOC_16C_REG04a + -- : BFD_RELOC_16C_REG04a_C + -- : BFD_RELOC_16C_REG14 + -- : BFD_RELOC_16C_REG14_C + -- : BFD_RELOC_16C_REG16 + -- : BFD_RELOC_16C_REG16_C + -- : BFD_RELOC_16C_REG20 + -- : BFD_RELOC_16C_REG20_C + -- : BFD_RELOC_16C_ABS20 + -- : BFD_RELOC_16C_ABS20_C + -- : BFD_RELOC_16C_ABS24 + -- : BFD_RELOC_16C_ABS24_C + -- : BFD_RELOC_16C_IMM04 + -- : BFD_RELOC_16C_IMM04_C + -- : BFD_RELOC_16C_IMM16 + -- : BFD_RELOC_16C_IMM16_C + -- : BFD_RELOC_16C_IMM20 + -- : BFD_RELOC_16C_IMM20_C + -- : BFD_RELOC_16C_IMM24 + -- : BFD_RELOC_16C_IMM24_C + -- : BFD_RELOC_16C_IMM32 + -- : BFD_RELOC_16C_IMM32_C + NS CR16C Relocations. + + -- : BFD_RELOC_CR16_NUM8 + -- : BFD_RELOC_CR16_NUM16 + -- : BFD_RELOC_CR16_NUM32 + -- : BFD_RELOC_CR16_NUM32a + -- : BFD_RELOC_CR16_REGREL0 + -- : BFD_RELOC_CR16_REGREL4 + -- : BFD_RELOC_CR16_REGREL4a + -- : BFD_RELOC_CR16_REGREL14 + -- : BFD_RELOC_CR16_REGREL14a + -- : BFD_RELOC_CR16_REGREL16 + -- : BFD_RELOC_CR16_REGREL20 + -- : BFD_RELOC_CR16_REGREL20a + -- : BFD_RELOC_CR16_ABS20 + -- : BFD_RELOC_CR16_ABS24 + -- : BFD_RELOC_CR16_IMM4 + -- : BFD_RELOC_CR16_IMM8 + -- : BFD_RELOC_CR16_IMM16 + -- : BFD_RELOC_CR16_IMM20 + -- : BFD_RELOC_CR16_IMM24 + -- : BFD_RELOC_CR16_IMM32 + -- : BFD_RELOC_CR16_IMM32a + -- : BFD_RELOC_CR16_DISP4 + -- : BFD_RELOC_CR16_DISP8 + -- : BFD_RELOC_CR16_DISP16 + -- : BFD_RELOC_CR16_DISP20 + -- : BFD_RELOC_CR16_DISP24 + -- : BFD_RELOC_CR16_DISP24a + NS CR16 Relocations. + + -- : BFD_RELOC_CRX_REL4 + -- : BFD_RELOC_CRX_REL8 + -- : BFD_RELOC_CRX_REL8_CMP + -- : BFD_RELOC_CRX_REL16 + -- : BFD_RELOC_CRX_REL24 + -- : BFD_RELOC_CRX_REL32 + -- : BFD_RELOC_CRX_REGREL12 + -- : BFD_RELOC_CRX_REGREL22 + -- : BFD_RELOC_CRX_REGREL28 + -- : BFD_RELOC_CRX_REGREL32 + -- : BFD_RELOC_CRX_ABS16 + -- : BFD_RELOC_CRX_ABS32 + -- : BFD_RELOC_CRX_NUM8 + -- : BFD_RELOC_CRX_NUM16 + -- : BFD_RELOC_CRX_NUM32 + -- : BFD_RELOC_CRX_IMM16 + -- : BFD_RELOC_CRX_IMM32 + -- : BFD_RELOC_CRX_SWITCH8 + -- : BFD_RELOC_CRX_SWITCH16 + -- : BFD_RELOC_CRX_SWITCH32 + NS CRX Relocations. + + -- : BFD_RELOC_CRIS_BDISP8 + -- : BFD_RELOC_CRIS_UNSIGNED_5 + -- : BFD_RELOC_CRIS_SIGNED_6 + -- : BFD_RELOC_CRIS_UNSIGNED_6 + -- : BFD_RELOC_CRIS_SIGNED_8 + -- : BFD_RELOC_CRIS_UNSIGNED_8 + -- : BFD_RELOC_CRIS_SIGNED_16 + -- : BFD_RELOC_CRIS_UNSIGNED_16 + -- : BFD_RELOC_CRIS_LAPCQ_OFFSET + -- : BFD_RELOC_CRIS_UNSIGNED_4 + These relocs are only used within the CRIS assembler. They are not + (at present) written to any object files. + + -- : BFD_RELOC_CRIS_COPY + -- : BFD_RELOC_CRIS_GLOB_DAT + -- : BFD_RELOC_CRIS_JUMP_SLOT + -- : BFD_RELOC_CRIS_RELATIVE + Relocs used in ELF shared libraries for CRIS. + + -- : BFD_RELOC_CRIS_32_GOT + 32-bit offset to symbol-entry within GOT. + + -- : BFD_RELOC_CRIS_16_GOT + 16-bit offset to symbol-entry within GOT. + + -- : BFD_RELOC_CRIS_32_GOTPLT + 32-bit offset to symbol-entry within GOT, with PLT handling. + + -- : BFD_RELOC_CRIS_16_GOTPLT + 16-bit offset to symbol-entry within GOT, with PLT handling. + + -- : BFD_RELOC_CRIS_32_GOTREL + 32-bit offset to symbol, relative to GOT. + + -- : BFD_RELOC_CRIS_32_PLT_GOTREL + 32-bit offset to symbol with PLT entry, relative to GOT. + + -- : BFD_RELOC_CRIS_32_PLT_PCREL + 32-bit offset to symbol with PLT entry, relative to this + relocation. + + -- : BFD_RELOC_860_COPY + -- : BFD_RELOC_860_GLOB_DAT + -- : BFD_RELOC_860_JUMP_SLOT + -- : BFD_RELOC_860_RELATIVE + -- : BFD_RELOC_860_PC26 + -- : BFD_RELOC_860_PLT26 + -- : BFD_RELOC_860_PC16 + -- : BFD_RELOC_860_LOW0 + -- : BFD_RELOC_860_SPLIT0 + -- : BFD_RELOC_860_LOW1 + -- : BFD_RELOC_860_SPLIT1 + -- : BFD_RELOC_860_LOW2 + -- : BFD_RELOC_860_SPLIT2 + -- : BFD_RELOC_860_LOW3 + -- : BFD_RELOC_860_LOGOT0 + -- : BFD_RELOC_860_SPGOT0 + -- : BFD_RELOC_860_LOGOT1 + -- : BFD_RELOC_860_SPGOT1 + -- : BFD_RELOC_860_LOGOTOFF0 + -- : BFD_RELOC_860_SPGOTOFF0 + -- : BFD_RELOC_860_LOGOTOFF1 + -- : BFD_RELOC_860_SPGOTOFF1 + -- : BFD_RELOC_860_LOGOTOFF2 + -- : BFD_RELOC_860_LOGOTOFF3 + -- : BFD_RELOC_860_LOPC + -- : BFD_RELOC_860_HIGHADJ + -- : BFD_RELOC_860_HAGOT + -- : BFD_RELOC_860_HAGOTOFF + -- : BFD_RELOC_860_HAPC + -- : BFD_RELOC_860_HIGH + -- : BFD_RELOC_860_HIGOT + -- : BFD_RELOC_860_HIGOTOFF + Intel i860 Relocations. + + -- : BFD_RELOC_OPENRISC_ABS_26 + -- : BFD_RELOC_OPENRISC_REL_26 + OpenRISC Relocations. + + -- : BFD_RELOC_H8_DIR16A8 + -- : BFD_RELOC_H8_DIR16R8 + -- : BFD_RELOC_H8_DIR24A8 + -- : BFD_RELOC_H8_DIR24R8 + -- : BFD_RELOC_H8_DIR32A16 + H8 elf Relocations. + + -- : BFD_RELOC_XSTORMY16_REL_12 + -- : BFD_RELOC_XSTORMY16_12 + -- : BFD_RELOC_XSTORMY16_24 + -- : BFD_RELOC_XSTORMY16_FPTR16 + Sony Xstormy16 Relocations. + + -- : BFD_RELOC_RELC + Self-describing complex relocations. + + -- : BFD_RELOC_XC16X_PAG + -- : BFD_RELOC_XC16X_POF + -- : BFD_RELOC_XC16X_SEG + -- : BFD_RELOC_XC16X_SOF + Infineon Relocations. + + -- : BFD_RELOC_VAX_GLOB_DAT + -- : BFD_RELOC_VAX_JMP_SLOT + -- : BFD_RELOC_VAX_RELATIVE + Relocations used by VAX ELF. + + -- : BFD_RELOC_MT_PC16 + Morpho MT - 16 bit immediate relocation. + + -- : BFD_RELOC_MT_HI16 + Morpho MT - Hi 16 bits of an address. + + -- : BFD_RELOC_MT_LO16 + Morpho MT - Low 16 bits of an address. + + -- : BFD_RELOC_MT_GNU_VTINHERIT + Morpho MT - Used to tell the linker which vtable entries are used. + + -- : BFD_RELOC_MT_GNU_VTENTRY + Morpho MT - Used to tell the linker which vtable entries are used. + + -- : BFD_RELOC_MT_PCINSN8 + Morpho MT - 8 bit immediate relocation. + + -- : BFD_RELOC_MSP430_10_PCREL + -- : BFD_RELOC_MSP430_16_PCREL + -- : BFD_RELOC_MSP430_16 + -- : BFD_RELOC_MSP430_16_PCREL_BYTE + -- : BFD_RELOC_MSP430_16_BYTE + -- : BFD_RELOC_MSP430_2X_PCREL + -- : BFD_RELOC_MSP430_RL_PCREL + msp430 specific relocation codes + + -- : BFD_RELOC_IQ2000_OFFSET_16 + -- : BFD_RELOC_IQ2000_OFFSET_21 + -- : BFD_RELOC_IQ2000_UHI16 + IQ2000 Relocations. + + -- : BFD_RELOC_XTENSA_RTLD + Special Xtensa relocation used only by PLT entries in ELF shared + objects to indicate that the runtime linker should set the value + to one of its own internal functions or data structures. + + -- : BFD_RELOC_XTENSA_GLOB_DAT + -- : BFD_RELOC_XTENSA_JMP_SLOT + -- : BFD_RELOC_XTENSA_RELATIVE + Xtensa relocations for ELF shared objects. + + -- : BFD_RELOC_XTENSA_PLT + Xtensa relocation used in ELF object files for symbols that may + require PLT entries. Otherwise, this is just a generic 32-bit + relocation. + + -- : BFD_RELOC_XTENSA_DIFF8 + -- : BFD_RELOC_XTENSA_DIFF16 + -- : BFD_RELOC_XTENSA_DIFF32 + Xtensa relocations to mark the difference of two local symbols. + These are only needed to support linker relaxation and can be + ignored when not relaxing. The field is set to the value of the + difference assuming no relaxation. The relocation encodes the + position of the first symbol so the linker can determine whether + to adjust the field value. + + -- : BFD_RELOC_XTENSA_SLOT0_OP + -- : BFD_RELOC_XTENSA_SLOT1_OP + -- : BFD_RELOC_XTENSA_SLOT2_OP + -- : BFD_RELOC_XTENSA_SLOT3_OP + -- : BFD_RELOC_XTENSA_SLOT4_OP + -- : BFD_RELOC_XTENSA_SLOT5_OP + -- : BFD_RELOC_XTENSA_SLOT6_OP + -- : BFD_RELOC_XTENSA_SLOT7_OP + -- : BFD_RELOC_XTENSA_SLOT8_OP + -- : BFD_RELOC_XTENSA_SLOT9_OP + -- : BFD_RELOC_XTENSA_SLOT10_OP + -- : BFD_RELOC_XTENSA_SLOT11_OP + -- : BFD_RELOC_XTENSA_SLOT12_OP + -- : BFD_RELOC_XTENSA_SLOT13_OP + -- : BFD_RELOC_XTENSA_SLOT14_OP + Generic Xtensa relocations for instruction operands. Only the slot + number is encoded in the relocation. The relocation applies to the + last PC-relative immediate operand, or if there are no PC-relative + immediates, to the last immediate operand. + + -- : BFD_RELOC_XTENSA_SLOT0_ALT + -- : BFD_RELOC_XTENSA_SLOT1_ALT + -- : BFD_RELOC_XTENSA_SLOT2_ALT + -- : BFD_RELOC_XTENSA_SLOT3_ALT + -- : BFD_RELOC_XTENSA_SLOT4_ALT + -- : BFD_RELOC_XTENSA_SLOT5_ALT + -- : BFD_RELOC_XTENSA_SLOT6_ALT + -- : BFD_RELOC_XTENSA_SLOT7_ALT + -- : BFD_RELOC_XTENSA_SLOT8_ALT + -- : BFD_RELOC_XTENSA_SLOT9_ALT + -- : BFD_RELOC_XTENSA_SLOT10_ALT + -- : BFD_RELOC_XTENSA_SLOT11_ALT + -- : BFD_RELOC_XTENSA_SLOT12_ALT + -- : BFD_RELOC_XTENSA_SLOT13_ALT + -- : BFD_RELOC_XTENSA_SLOT14_ALT + Alternate Xtensa relocations. Only the slot is encoded in the + relocation. The meaning of these relocations is opcode-specific. + + -- : BFD_RELOC_XTENSA_OP0 + -- : BFD_RELOC_XTENSA_OP1 + -- : BFD_RELOC_XTENSA_OP2 + Xtensa relocations for backward compatibility. These have all been + replaced by BFD_RELOC_XTENSA_SLOT0_OP. + + -- : BFD_RELOC_XTENSA_ASM_EXPAND + Xtensa relocation to mark that the assembler expanded the + instructions from an original target. The expansion size is + encoded in the reloc size. + + -- : BFD_RELOC_XTENSA_ASM_SIMPLIFY + Xtensa relocation to mark that the linker should simplify + assembler-expanded instructions. This is commonly used internally + by the linker after analysis of a BFD_RELOC_XTENSA_ASM_EXPAND. + + -- : BFD_RELOC_Z80_DISP8 + 8 bit signed offset in (ix+d) or (iy+d). + + -- : BFD_RELOC_Z8K_DISP7 + DJNZ offset. + + -- : BFD_RELOC_Z8K_CALLR + CALR offset. + + -- : BFD_RELOC_Z8K_IMM4L + 4 bit value. + + + typedef enum bfd_reloc_code_real bfd_reloc_code_real_type; + +2.10.2.2 `bfd_reloc_type_lookup' +................................ + +*Synopsis* + reloc_howto_type *bfd_reloc_type_lookup + (bfd *abfd, bfd_reloc_code_real_type code); + reloc_howto_type *bfd_reloc_name_lookup + (bfd *abfd, const char *reloc_name); + *Description* +Return a pointer to a howto structure which, when invoked, will perform +the relocation CODE on data from the architecture noted. + +2.10.2.3 `bfd_default_reloc_type_lookup' +........................................ + +*Synopsis* + reloc_howto_type *bfd_default_reloc_type_lookup + (bfd *abfd, bfd_reloc_code_real_type code); + *Description* +Provides a default relocation lookup routine for any architecture. + +2.10.2.4 `bfd_get_reloc_code_name' +.................................. + +*Synopsis* + const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code); + *Description* +Provides a printable name for the supplied relocation code. Useful +mainly for printing error messages. + +2.10.2.5 `bfd_generic_relax_section' +.................................... + +*Synopsis* + bfd_boolean bfd_generic_relax_section + (bfd *abfd, + asection *section, + struct bfd_link_info *, + bfd_boolean *); + *Description* +Provides default handling for relaxing for back ends which don't do +relaxing. + +2.10.2.6 `bfd_generic_gc_sections' +.................................. + +*Synopsis* + bfd_boolean bfd_generic_gc_sections + (bfd *, struct bfd_link_info *); + *Description* +Provides default handling for relaxing for back ends which don't do +section gc - i.e., does nothing. + +2.10.2.7 `bfd_generic_merge_sections' +..................................... + +*Synopsis* + bfd_boolean bfd_generic_merge_sections + (bfd *, struct bfd_link_info *); + *Description* +Provides default handling for SEC_MERGE section merging for back ends +which don't have SEC_MERGE support - i.e., does nothing. + +2.10.2.8 `bfd_generic_get_relocated_section_contents' +..................................................... + +*Synopsis* + bfd_byte *bfd_generic_get_relocated_section_contents + (bfd *abfd, + struct bfd_link_info *link_info, + struct bfd_link_order *link_order, + bfd_byte *data, + bfd_boolean relocatable, + asymbol **symbols); + *Description* +Provides default handling of relocation effort for back ends which +can't be bothered to do it efficiently. + + +File: bfd.info, Node: Core Files, Next: Targets, Prev: Relocations, Up: BFD front end + +2.11 Core files +=============== + +2.11.1 Core file functions +-------------------------- + +*Description* +These are functions pertaining to core files. + +2.11.1.1 `bfd_core_file_failing_command' +........................................ + +*Synopsis* + const char *bfd_core_file_failing_command (bfd *abfd); + *Description* +Return a read-only string explaining which program was running when it +failed and produced the core file ABFD. + +2.11.1.2 `bfd_core_file_failing_signal' +....................................... + +*Synopsis* + int bfd_core_file_failing_signal (bfd *abfd); + *Description* +Returns the signal number which caused the core dump which generated +the file the BFD ABFD is attached to. + +2.11.1.3 `core_file_matches_executable_p' +......................................... + +*Synopsis* + bfd_boolean core_file_matches_executable_p + (bfd *core_bfd, bfd *exec_bfd); + *Description* +Return `TRUE' if the core file attached to CORE_BFD was generated by a +run of the executable file attached to EXEC_BFD, `FALSE' otherwise. + +2.11.1.4 `generic_core_file_matches_executable_p' +................................................. + +*Synopsis* + bfd_boolean generic_core_file_matches_executable_p + (bfd *core_bfd, bfd *exec_bfd); + *Description* +Return TRUE if the core file attached to CORE_BFD was generated by a +run of the executable file attached to EXEC_BFD. The match is based on +executable basenames only. + + Note: When not able to determine the core file failing command or +the executable name, we still return TRUE even though we're not sure +that core file and executable match. This is to avoid generating a +false warning in situations where we really don't know whether they +match or not. + + +File: bfd.info, Node: Targets, Next: Architectures, Prev: Core Files, Up: BFD front end + +2.12 Targets +============ + +*Description* +Each port of BFD to a different machine requires the creation of a +target back end. All the back end provides to the root part of BFD is a +structure containing pointers to functions which perform certain low +level operations on files. BFD translates the applications's requests +through a pointer into calls to the back end routines. + + When a file is opened with `bfd_openr', its format and target are +unknown. BFD uses various mechanisms to determine how to interpret the +file. The operations performed are: + + * Create a BFD by calling the internal routine `_bfd_new_bfd', then + call `bfd_find_target' with the target string supplied to + `bfd_openr' and the new BFD pointer. + + * If a null target string was provided to `bfd_find_target', look up + the environment variable `GNUTARGET' and use that as the target + string. + + * If the target string is still `NULL', or the target string is + `default', then use the first item in the target vector as the + target type, and set `target_defaulted' in the BFD to cause + `bfd_check_format' to loop through all the targets. *Note + bfd_target::. *Note Formats::. + + * Otherwise, inspect the elements in the target vector one by one, + until a match on target name is found. When found, use it. + + * Otherwise return the error `bfd_error_invalid_target' to + `bfd_openr'. + + * `bfd_openr' attempts to open the file using `bfd_open_file', and + returns the BFD. + Once the BFD has been opened and the target selected, the file +format may be determined. This is done by calling `bfd_check_format' on +the BFD with a suggested format. If `target_defaulted' has been set, +each possible target type is tried to see if it recognizes the +specified format. `bfd_check_format' returns `TRUE' when the caller +guesses right. + +* Menu: + +* bfd_target:: + + +File: bfd.info, Node: bfd_target, Prev: Targets, Up: Targets + +2.12.1 bfd_target +----------------- + +*Description* +This structure contains everything that BFD knows about a target. It +includes things like its byte order, name, and which routines to call +to do various operations. + + Every BFD points to a target structure with its `xvec' member. + + The macros below are used to dispatch to functions through the +`bfd_target' vector. They are used in a number of macros further down +in `bfd.h', and are also used when calling various routines by hand +inside the BFD implementation. The ARGLIST argument must be +parenthesized; it contains all the arguments to the called function. + + They make the documentation (more) unpleasant to read, so if someone +wants to fix this and not break the above, please do. + #define BFD_SEND(bfd, message, arglist) \ + ((*((bfd)->xvec->message)) arglist) + + #ifdef DEBUG_BFD_SEND + #undef BFD_SEND + #define BFD_SEND(bfd, message, arglist) \ + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ + ((*((bfd)->xvec->message)) arglist) : \ + (bfd_assert (__FILE__,__LINE__), NULL)) + #endif + For operations which index on the BFD format: + #define BFD_SEND_FMT(bfd, message, arglist) \ + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) + + #ifdef DEBUG_BFD_SEND + #undef BFD_SEND_FMT + #define BFD_SEND_FMT(bfd, message, arglist) \ + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \ + (bfd_assert (__FILE__,__LINE__), NULL)) + #endif + This is the structure which defines the type of BFD this is. The +`xvec' member of the struct `bfd' itself points here. Each module that +implements access to a different target under BFD, defines one of these. + + FIXME, these names should be rationalised with the names of the +entry points which call them. Too bad we can't have one macro to define +them both! + enum bfd_flavour + { + bfd_target_unknown_flavour, + bfd_target_aout_flavour, + bfd_target_coff_flavour, + bfd_target_ecoff_flavour, + bfd_target_xcoff_flavour, + bfd_target_elf_flavour, + bfd_target_ieee_flavour, + bfd_target_nlm_flavour, + bfd_target_oasys_flavour, + bfd_target_tekhex_flavour, + bfd_target_srec_flavour, + bfd_target_ihex_flavour, + bfd_target_som_flavour, + bfd_target_os9k_flavour, + bfd_target_versados_flavour, + bfd_target_msdos_flavour, + bfd_target_ovax_flavour, + bfd_target_evax_flavour, + bfd_target_mmo_flavour, + bfd_target_mach_o_flavour, + bfd_target_pef_flavour, + bfd_target_pef_xlib_flavour, + bfd_target_sym_flavour + }; + + enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; + + /* Forward declaration. */ + typedef struct bfd_link_info _bfd_link_info; + + typedef struct bfd_target + { + /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ + char *name; + + /* The "flavour" of a back end is a general indication about + the contents of a file. */ + enum bfd_flavour flavour; + + /* The order of bytes within the data area of a file. */ + enum bfd_endian byteorder; + + /* The order of bytes within the header parts of a file. */ + enum bfd_endian header_byteorder; + + /* A mask of all the flags which an executable may have set - + from the set `BFD_NO_FLAGS', `HAS_RELOC', ...`D_PAGED'. */ + flagword object_flags; + + /* A mask of all the flags which a section may have set - from + the set `SEC_NO_FLAGS', `SEC_ALLOC', ...`SET_NEVER_LOAD'. */ + flagword section_flags; + + /* The character normally found at the front of a symbol. + (if any), perhaps `_'. */ + char symbol_leading_char; + + /* The pad character for file names within an archive header. */ + char ar_pad_char; + + /* The maximum number of characters in an archive header. */ + unsigned short ar_max_namelen; + + /* Entries for byte swapping for data. These are different from the + other entry points, since they don't take a BFD as the first argument. + Certain other handlers could do the same. */ + bfd_uint64_t (*bfd_getx64) (const void *); + bfd_int64_t (*bfd_getx_signed_64) (const void *); + void (*bfd_putx64) (bfd_uint64_t, void *); + bfd_vma (*bfd_getx32) (const void *); + bfd_signed_vma (*bfd_getx_signed_32) (const void *); + void (*bfd_putx32) (bfd_vma, void *); + bfd_vma (*bfd_getx16) (const void *); + bfd_signed_vma (*bfd_getx_signed_16) (const void *); + void (*bfd_putx16) (bfd_vma, void *); + + /* Byte swapping for the headers. */ + bfd_uint64_t (*bfd_h_getx64) (const void *); + bfd_int64_t (*bfd_h_getx_signed_64) (const void *); + void (*bfd_h_putx64) (bfd_uint64_t, void *); + bfd_vma (*bfd_h_getx32) (const void *); + bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); + void (*bfd_h_putx32) (bfd_vma, void *); + bfd_vma (*bfd_h_getx16) (const void *); + bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); + void (*bfd_h_putx16) (bfd_vma, void *); + + /* Format dependent routines: these are vectors of entry points + within the target vector structure, one for each format to check. */ + + /* Check the format of a file being read. Return a `bfd_target *' or zero. */ + const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *); + + /* Set the format of a file being written. */ + bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); + + /* Write cached information into a file being written, at `bfd_close'. */ + bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *); + The general target vector. These vectors are initialized using the +BFD_JUMP_TABLE macros. + + /* Generic entry points. */ + #define BFD_JUMP_TABLE_GENERIC(NAME) \ + NAME##_close_and_cleanup, \ + NAME##_bfd_free_cached_info, \ + NAME##_new_section_hook, \ + NAME##_get_section_contents, \ + NAME##_get_section_contents_in_window + + /* Called when the BFD is being closed to do any necessary cleanup. */ + bfd_boolean (*_close_and_cleanup) (bfd *); + /* Ask the BFD to free all cached information. */ + bfd_boolean (*_bfd_free_cached_info) (bfd *); + /* Called when a new section is created. */ + bfd_boolean (*_new_section_hook) (bfd *, sec_ptr); + /* Read the contents of a section. */ + bfd_boolean (*_bfd_get_section_contents) + (bfd *, sec_ptr, void *, file_ptr, bfd_size_type); + bfd_boolean (*_bfd_get_section_contents_in_window) + (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type); + + /* Entry points to copy private data. */ + #define BFD_JUMP_TABLE_COPY(NAME) \ + NAME##_bfd_copy_private_bfd_data, \ + NAME##_bfd_merge_private_bfd_data, \ + _bfd_generic_init_private_section_data, \ + NAME##_bfd_copy_private_section_data, \ + NAME##_bfd_copy_private_symbol_data, \ + NAME##_bfd_copy_private_header_data, \ + NAME##_bfd_set_private_flags, \ + NAME##_bfd_print_private_bfd_data + + /* Called to copy BFD general private data from one object file + to another. */ + bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *); + /* Called to merge BFD general private data from one object file + to a common output file when linking. */ + bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *); + /* Called to initialize BFD private section data from one object file + to another. */ + #define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \ + BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info)) + bfd_boolean (*_bfd_init_private_section_data) + (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *); + /* Called to copy BFD private section data from one object file + to another. */ + bfd_boolean (*_bfd_copy_private_section_data) + (bfd *, sec_ptr, bfd *, sec_ptr); + /* Called to copy BFD private symbol data from one symbol + to another. */ + bfd_boolean (*_bfd_copy_private_symbol_data) + (bfd *, asymbol *, bfd *, asymbol *); + /* Called to copy BFD private header data from one object file + to another. */ + bfd_boolean (*_bfd_copy_private_header_data) + (bfd *, bfd *); + /* Called to set private backend flags. */ + bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword); + + /* Called to print private BFD data. */ + bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *); + + /* Core file entry points. */ + #define BFD_JUMP_TABLE_CORE(NAME) \ + NAME##_core_file_failing_command, \ + NAME##_core_file_failing_signal, \ + NAME##_core_file_matches_executable_p + + char * (*_core_file_failing_command) (bfd *); + int (*_core_file_failing_signal) (bfd *); + bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); + + /* Archive entry points. */ + #define BFD_JUMP_TABLE_ARCHIVE(NAME) \ + NAME##_slurp_armap, \ + NAME##_slurp_extended_name_table, \ + NAME##_construct_extended_name_table, \ + NAME##_truncate_arname, \ + NAME##_write_armap, \ + NAME##_read_ar_hdr, \ + NAME##_openr_next_archived_file, \ + NAME##_get_elt_at_index, \ + NAME##_generic_stat_arch_elt, \ + NAME##_update_armap_timestamp + + bfd_boolean (*_bfd_slurp_armap) (bfd *); + bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *); + bfd_boolean (*_bfd_construct_extended_name_table) + (bfd *, char **, bfd_size_type *, const char **); + void (*_bfd_truncate_arname) (bfd *, const char *, char *); + bfd_boolean (*write_armap) + (bfd *, unsigned int, struct orl *, unsigned int, int); + void * (*_bfd_read_ar_hdr_fn) (bfd *); + bfd * (*openr_next_archived_file) (bfd *, bfd *); + #define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) + bfd * (*_bfd_get_elt_at_index) (bfd *, symindex); + int (*_bfd_stat_arch_elt) (bfd *, struct stat *); + bfd_boolean (*_bfd_update_armap_timestamp) (bfd *); + + /* Entry points used for symbols. */ + #define BFD_JUMP_TABLE_SYMBOLS(NAME) \ + NAME##_get_symtab_upper_bound, \ + NAME##_canonicalize_symtab, \ + NAME##_make_empty_symbol, \ + NAME##_print_symbol, \ + NAME##_get_symbol_info, \ + NAME##_bfd_is_local_label_name, \ + NAME##_bfd_is_target_special_symbol, \ + NAME##_get_lineno, \ + NAME##_find_nearest_line, \ + _bfd_generic_find_line, \ + NAME##_find_inliner_info, \ + NAME##_bfd_make_debug_symbol, \ + NAME##_read_minisymbols, \ + NAME##_minisymbol_to_symbol + + long (*_bfd_get_symtab_upper_bound) (bfd *); + long (*_bfd_canonicalize_symtab) + (bfd *, struct bfd_symbol **); + struct bfd_symbol * + (*_bfd_make_empty_symbol) (bfd *); + void (*_bfd_print_symbol) + (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type); + #define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) + void (*_bfd_get_symbol_info) + (bfd *, struct bfd_symbol *, symbol_info *); + #define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) + bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); + bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); + alent * (*_get_lineno) (bfd *, struct bfd_symbol *); + bfd_boolean (*_bfd_find_nearest_line) + (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma, + const char **, const char **, unsigned int *); + bfd_boolean (*_bfd_find_line) + (bfd *, struct bfd_symbol **, struct bfd_symbol *, + const char **, unsigned int *); + bfd_boolean (*_bfd_find_inliner_info) + (bfd *, const char **, const char **, unsigned int *); + /* Back-door to allow format-aware applications to create debug symbols + while using BFD for everything else. Currently used by the assembler + when creating COFF files. */ + asymbol * (*_bfd_make_debug_symbol) + (bfd *, void *, unsigned long size); + #define bfd_read_minisymbols(b, d, m, s) \ + BFD_SEND (b, _read_minisymbols, (b, d, m, s)) + long (*_read_minisymbols) + (bfd *, bfd_boolean, void **, unsigned int *); + #define bfd_minisymbol_to_symbol(b, d, m, f) \ + BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) + asymbol * (*_minisymbol_to_symbol) + (bfd *, bfd_boolean, const void *, asymbol *); + + /* Routines for relocs. */ + #define BFD_JUMP_TABLE_RELOCS(NAME) \ + NAME##_get_reloc_upper_bound, \ + NAME##_canonicalize_reloc, \ + NAME##_bfd_reloc_type_lookup, \ + NAME##_bfd_reloc_name_lookup + + long (*_get_reloc_upper_bound) (bfd *, sec_ptr); + long (*_bfd_canonicalize_reloc) + (bfd *, sec_ptr, arelent **, struct bfd_symbol **); + /* See documentation on reloc types. */ + reloc_howto_type * + (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); + reloc_howto_type * + (*reloc_name_lookup) (bfd *, const char *); + + + /* Routines used when writing an object file. */ + #define BFD_JUMP_TABLE_WRITE(NAME) \ + NAME##_set_arch_mach, \ + NAME##_set_section_contents + + bfd_boolean (*_bfd_set_arch_mach) + (bfd *, enum bfd_architecture, unsigned long); + bfd_boolean (*_bfd_set_section_contents) + (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type); + + /* Routines used by the linker. */ + #define BFD_JUMP_TABLE_LINK(NAME) \ + NAME##_sizeof_headers, \ + NAME##_bfd_get_relocated_section_contents, \ + NAME##_bfd_relax_section, \ + NAME##_bfd_link_hash_table_create, \ + NAME##_bfd_link_hash_table_free, \ + NAME##_bfd_link_add_symbols, \ + NAME##_bfd_link_just_syms, \ + NAME##_bfd_final_link, \ + NAME##_bfd_link_split_section, \ + NAME##_bfd_gc_sections, \ + NAME##_bfd_merge_sections, \ + NAME##_bfd_is_group_section, \ + NAME##_bfd_discard_group, \ + NAME##_section_already_linked \ + + int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); + bfd_byte * (*_bfd_get_relocated_section_contents) + (bfd *, struct bfd_link_info *, struct bfd_link_order *, + bfd_byte *, bfd_boolean, struct bfd_symbol **); + + bfd_boolean (*_bfd_relax_section) + (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *); + + /* Create a hash table for the linker. Different backends store + different information in this table. */ + struct bfd_link_hash_table * + (*_bfd_link_hash_table_create) (bfd *); + + /* Release the memory associated with the linker hash table. */ + void (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *); + + /* Add symbols from this object file into the hash table. */ + bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); + + /* Indicate that we are only retrieving symbol values from this section. */ + void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); + + /* Do a link based on the link_order structures attached to each + section of the BFD. */ + bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *); + + /* Should this section be split up into smaller pieces during linking. */ + bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); + + /* Remove sections that are not referenced from the output. */ + bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); + + /* Attempt to merge SEC_MERGE sections. */ + bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); + + /* Is this section a member of a group? */ + bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *); + + /* Discard members of a group. */ + bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *); + + /* Check if SEC has been already linked during a reloceatable or + final link. */ + void (*_section_already_linked) (bfd *, struct bfd_section *, + struct bfd_link_info *); + + /* Routines to handle dynamic symbols and relocs. */ + #define BFD_JUMP_TABLE_DYNAMIC(NAME) \ + NAME##_get_dynamic_symtab_upper_bound, \ + NAME##_canonicalize_dynamic_symtab, \ + NAME##_get_synthetic_symtab, \ + NAME##_get_dynamic_reloc_upper_bound, \ + NAME##_canonicalize_dynamic_reloc + + /* Get the amount of memory required to hold the dynamic symbols. */ + long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); + /* Read in the dynamic symbols. */ + long (*_bfd_canonicalize_dynamic_symtab) + (bfd *, struct bfd_symbol **); + /* Create synthetized symbols. */ + long (*_bfd_get_synthetic_symtab) + (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **, + struct bfd_symbol **); + /* Get the amount of memory required to hold the dynamic relocs. */ + long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); + /* Read in the dynamic relocs. */ + long (*_bfd_canonicalize_dynamic_reloc) + (bfd *, arelent **, struct bfd_symbol **); + A pointer to an alternative bfd_target in case the current one is not +satisfactory. This can happen when the target cpu supports both big +and little endian code, and target chosen by the linker has the wrong +endianness. The function open_output() in ld/ldlang.c uses this field +to find an alternative output format that is suitable. + /* Opposite endian version of this target. */ + const struct bfd_target * alternative_target; + + /* Data for use by back-end routines, which isn't + generic enough to belong in this structure. */ + const void *backend_data; + + } bfd_target; + +2.12.1.1 `bfd_set_default_target' +................................. + +*Synopsis* + bfd_boolean bfd_set_default_target (const char *name); + *Description* +Set the default target vector to use when recognizing a BFD. This +takes the name of the target, which may be a BFD target name or a +configuration triplet. + +2.12.1.2 `bfd_find_target' +.......................... + +*Synopsis* + const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); + *Description* +Return a pointer to the transfer vector for the object target named +TARGET_NAME. If TARGET_NAME is `NULL', choose the one in the +environment variable `GNUTARGET'; if that is null or not defined, then +choose the first entry in the target list. Passing in the string +"default" or setting the environment variable to "default" will cause +the first entry in the target list to be returned, and +"target_defaulted" will be set in the BFD if ABFD isn't `NULL'. This +causes `bfd_check_format' to loop over all the targets to find the one +that matches the file being read. + +2.12.1.3 `bfd_target_list' +.......................... + +*Synopsis* + const char ** bfd_target_list (void); + *Description* +Return a freshly malloced NULL-terminated vector of the names of all +the valid BFD targets. Do not modify the names. + +2.12.1.4 `bfd_seach_for_target' +............................... + +*Synopsis* + const bfd_target *bfd_search_for_target + (int (*search_func) (const bfd_target *, void *), + void *); + *Description* +Return a pointer to the first transfer vector in the list of transfer +vectors maintained by BFD that produces a non-zero result when passed +to the function SEARCH_FUNC. The parameter DATA is passed, unexamined, +to the search function. + + +File: bfd.info, Node: Architectures, Next: Opening and Closing, Prev: Targets, Up: BFD front end + +2.13 Architectures +================== + +BFD keeps one atom in a BFD describing the architecture of the data +attached to the BFD: a pointer to a `bfd_arch_info_type'. + + Pointers to structures can be requested independently of a BFD so +that an architecture's information can be interrogated without access +to an open BFD. + + The architecture information is provided by each architecture +package. The set of default architectures is selected by the macro +`SELECT_ARCHITECTURES'. This is normally set up in the +`config/TARGET.mt' file of your choice. If the name is not defined, +then all the architectures supported are included. + + When BFD starts up, all the architectures are called with an +initialize method. It is up to the architecture back end to insert as +many items into the list of architectures as it wants to; generally +this would be one for each machine and one for the default case (an +item with a machine field of 0). + + BFD's idea of an architecture is implemented in `archures.c'. + +2.13.1 bfd_architecture +----------------------- + +*Description* +This enum gives the object file's CPU architecture, in a global +sense--i.e., what processor family does it belong to? Another field +indicates which processor within the family is in use. The machine +gives a number which distinguishes different versions of the +architecture, containing, for example, 2 and 3 for Intel i960 KA and +i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. + enum bfd_architecture + { + bfd_arch_unknown, /* File arch not known. */ + bfd_arch_obscure, /* Arch known, not one of these. */ + bfd_arch_m68k, /* Motorola 68xxx */ + #define bfd_mach_m68000 1 + #define bfd_mach_m68008 2 + #define bfd_mach_m68010 3 + #define bfd_mach_m68020 4 + #define bfd_mach_m68030 5 + #define bfd_mach_m68040 6 + #define bfd_mach_m68060 7 + #define bfd_mach_cpu32 8 + #define bfd_mach_fido 9 + #define bfd_mach_mcf_isa_a_nodiv 10 + #define bfd_mach_mcf_isa_a 11 + #define bfd_mach_mcf_isa_a_mac 12 + #define bfd_mach_mcf_isa_a_emac 13 + #define bfd_mach_mcf_isa_aplus 14 + #define bfd_mach_mcf_isa_aplus_mac 15 + #define bfd_mach_mcf_isa_aplus_emac 16 + #define bfd_mach_mcf_isa_b_nousp 17 + #define bfd_mach_mcf_isa_b_nousp_mac 18 + #define bfd_mach_mcf_isa_b_nousp_emac 19 + #define bfd_mach_mcf_isa_b 20 + #define bfd_mach_mcf_isa_b_mac 21 + #define bfd_mach_mcf_isa_b_emac 22 + #define bfd_mach_mcf_isa_b_float 23 + #define bfd_mach_mcf_isa_b_float_mac 24 + #define bfd_mach_mcf_isa_b_float_emac 25 + #define bfd_mach_mcf_isa_c 26 + #define bfd_mach_mcf_isa_c_mac 27 + #define bfd_mach_mcf_isa_c_emac 28 + bfd_arch_vax, /* DEC Vax */ + bfd_arch_i960, /* Intel 960 */ + /* The order of the following is important. + lower number indicates a machine type that + only accepts a subset of the instructions + available to machines with higher numbers. + The exception is the "ca", which is + incompatible with all other machines except + "core". */ + + #define bfd_mach_i960_core 1 + #define bfd_mach_i960_ka_sa 2 + #define bfd_mach_i960_kb_sb 3 + #define bfd_mach_i960_mc 4 + #define bfd_mach_i960_xa 5 + #define bfd_mach_i960_ca 6 + #define bfd_mach_i960_jx 7 + #define bfd_mach_i960_hx 8 + + bfd_arch_or32, /* OpenRISC 32 */ + + bfd_arch_sparc, /* SPARC */ + #define bfd_mach_sparc 1 + /* The difference between v8plus and v9 is that v9 is a true 64 bit env. */ + #define bfd_mach_sparc_sparclet 2 + #define bfd_mach_sparc_sparclite 3 + #define bfd_mach_sparc_v8plus 4 + #define bfd_mach_sparc_v8plusa 5 /* with ultrasparc add'ns. */ + #define bfd_mach_sparc_sparclite_le 6 + #define bfd_mach_sparc_v9 7 + #define bfd_mach_sparc_v9a 8 /* with ultrasparc add'ns. */ + #define bfd_mach_sparc_v8plusb 9 /* with cheetah add'ns. */ + #define bfd_mach_sparc_v9b 10 /* with cheetah add'ns. */ + /* Nonzero if MACH has the v9 instruction set. */ + #define bfd_mach_sparc_v9_p(mach) \ + ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \ + && (mach) != bfd_mach_sparc_sparclite_le) + /* Nonzero if MACH is a 64 bit sparc architecture. */ + #define bfd_mach_sparc_64bit_p(mach) \ + ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb) + bfd_arch_spu, /* PowerPC SPU */ + #define bfd_mach_spu 256 + bfd_arch_mips, /* MIPS Rxxxx */ + #define bfd_mach_mips3000 3000 + #define bfd_mach_mips3900 3900 + #define bfd_mach_mips4000 4000 + #define bfd_mach_mips4010 4010 + #define bfd_mach_mips4100 4100 + #define bfd_mach_mips4111 4111 + #define bfd_mach_mips4120 4120 + #define bfd_mach_mips4300 4300 + #define bfd_mach_mips4400 4400 + #define bfd_mach_mips4600 4600 + #define bfd_mach_mips4650 4650 + #define bfd_mach_mips5000 5000 + #define bfd_mach_mips5400 5400 + #define bfd_mach_mips5500 5500 + #define bfd_mach_mips6000 6000 + #define bfd_mach_mips7000 7000 + #define bfd_mach_mips8000 8000 + #define bfd_mach_mips9000 9000 + #define bfd_mach_mips10000 10000 + #define bfd_mach_mips12000 12000 + #define bfd_mach_mips16 16 + #define bfd_mach_mips5 5 + #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */ + #define bfd_mach_mipsisa32 32 + #define bfd_mach_mipsisa32r2 33 + #define bfd_mach_mipsisa64 64 + #define bfd_mach_mipsisa64r2 65 + bfd_arch_i386, /* Intel 386 */ + #define bfd_mach_i386_i386 1 + #define bfd_mach_i386_i8086 2 + #define bfd_mach_i386_i386_intel_syntax 3 + #define bfd_mach_x86_64 64 + #define bfd_mach_x86_64_intel_syntax 65 + bfd_arch_we32k, /* AT&T WE32xxx */ + bfd_arch_tahoe, /* CCI/Harris Tahoe */ + bfd_arch_i860, /* Intel 860 */ + bfd_arch_i370, /* IBM 360/370 Mainframes */ + bfd_arch_romp, /* IBM ROMP PC/RT */ + bfd_arch_convex, /* Convex */ + bfd_arch_m88k, /* Motorola 88xxx */ + bfd_arch_m98k, /* Motorola 98xxx */ + bfd_arch_pyramid, /* Pyramid Technology */ + bfd_arch_h8300, /* Renesas H8/300 (formerly Hitachi H8/300) */ + #define bfd_mach_h8300 1 + #define bfd_mach_h8300h 2 + #define bfd_mach_h8300s 3 + #define bfd_mach_h8300hn 4 + #define bfd_mach_h8300sn 5 + #define bfd_mach_h8300sx 6 + #define bfd_mach_h8300sxn 7 + bfd_arch_pdp11, /* DEC PDP-11 */ + bfd_arch_powerpc, /* PowerPC */ + #define bfd_mach_ppc 32 + #define bfd_mach_ppc64 64 + #define bfd_mach_ppc_403 403 + #define bfd_mach_ppc_403gc 4030 + #define bfd_mach_ppc_505 505 + #define bfd_mach_ppc_601 601 + #define bfd_mach_ppc_602 602 + #define bfd_mach_ppc_603 603 + #define bfd_mach_ppc_ec603e 6031 + #define bfd_mach_ppc_604 604 + #define bfd_mach_ppc_620 620 + #define bfd_mach_ppc_630 630 + #define bfd_mach_ppc_750 750 + #define bfd_mach_ppc_860 860 + #define bfd_mach_ppc_a35 35 + #define bfd_mach_ppc_rs64ii 642 + #define bfd_mach_ppc_rs64iii 643 + #define bfd_mach_ppc_7400 7400 + #define bfd_mach_ppc_e500 500 + bfd_arch_rs6000, /* IBM RS/6000 */ + #define bfd_mach_rs6k 6000 + #define bfd_mach_rs6k_rs1 6001 + #define bfd_mach_rs6k_rsc 6003 + #define bfd_mach_rs6k_rs2 6002 + bfd_arch_hppa, /* HP PA RISC */ + #define bfd_mach_hppa10 10 + #define bfd_mach_hppa11 11 + #define bfd_mach_hppa20 20 + #define bfd_mach_hppa20w 25 + bfd_arch_d10v, /* Mitsubishi D10V */ + #define bfd_mach_d10v 1 + #define bfd_mach_d10v_ts2 2 + #define bfd_mach_d10v_ts3 3 + bfd_arch_d30v, /* Mitsubishi D30V */ + bfd_arch_dlx, /* DLX */ + bfd_arch_m68hc11, /* Motorola 68HC11 */ + bfd_arch_m68hc12, /* Motorola 68HC12 */ + #define bfd_mach_m6812_default 0 + #define bfd_mach_m6812 1 + #define bfd_mach_m6812s 2 + bfd_arch_z8k, /* Zilog Z8000 */ + #define bfd_mach_z8001 1 + #define bfd_mach_z8002 2 + bfd_arch_h8500, /* Renesas H8/500 (formerly Hitachi H8/500) */ + bfd_arch_sh, /* Renesas / SuperH SH (formerly Hitachi SH) */ + #define bfd_mach_sh 1 + #define bfd_mach_sh2 0x20 + #define bfd_mach_sh_dsp 0x2d + #define bfd_mach_sh2a 0x2a + #define bfd_mach_sh2a_nofpu 0x2b + #define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1 + #define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2 + #define bfd_mach_sh2a_or_sh4 0x2a3 + #define bfd_mach_sh2a_or_sh3e 0x2a4 + #define bfd_mach_sh2e 0x2e + #define bfd_mach_sh3 0x30 + #define bfd_mach_sh3_nommu 0x31 + #define bfd_mach_sh3_dsp 0x3d + #define bfd_mach_sh3e 0x3e + #define bfd_mach_sh4 0x40 + #define bfd_mach_sh4_nofpu 0x41 + #define bfd_mach_sh4_nommu_nofpu 0x42 + #define bfd_mach_sh4a 0x4a + #define bfd_mach_sh4a_nofpu 0x4b + #define bfd_mach_sh4al_dsp 0x4d + #define bfd_mach_sh5 0x50 + bfd_arch_alpha, /* Dec Alpha */ + #define bfd_mach_alpha_ev4 0x10 + #define bfd_mach_alpha_ev5 0x20 + #define bfd_mach_alpha_ev6 0x30 + bfd_arch_arm, /* Advanced Risc Machines ARM. */ + #define bfd_mach_arm_unknown 0 + #define bfd_mach_arm_2 1 + #define bfd_mach_arm_2a 2 + #define bfd_mach_arm_3 3 + #define bfd_mach_arm_3M 4 + #define bfd_mach_arm_4 5 + #define bfd_mach_arm_4T 6 + #define bfd_mach_arm_5 7 + #define bfd_mach_arm_5T 8 + #define bfd_mach_arm_5TE 9 + #define bfd_mach_arm_XScale 10 + #define bfd_mach_arm_ep9312 11 + #define bfd_mach_arm_iWMMXt 12 + #define bfd_mach_arm_iWMMXt2 13 + bfd_arch_ns32k, /* National Semiconductors ns32000 */ + bfd_arch_w65, /* WDC 65816 */ + bfd_arch_tic30, /* Texas Instruments TMS320C30 */ + bfd_arch_tic4x, /* Texas Instruments TMS320C3X/4X */ + #define bfd_mach_tic3x 30 + #define bfd_mach_tic4x 40 + bfd_arch_tic54x, /* Texas Instruments TMS320C54X */ + bfd_arch_tic80, /* TI TMS320c80 (MVP) */ + bfd_arch_v850, /* NEC V850 */ + #define bfd_mach_v850 1 + #define bfd_mach_v850e 'E' + #define bfd_mach_v850e1 '1' + bfd_arch_arc, /* ARC Cores */ + #define bfd_mach_arc_5 5 + #define bfd_mach_arc_6 6 + #define bfd_mach_arc_7 7 + #define bfd_mach_arc_8 8 + bfd_arch_m32c, /* Renesas M16C/M32C. */ + #define bfd_mach_m16c 0x75 + #define bfd_mach_m32c 0x78 + bfd_arch_m32r, /* Renesas M32R (formerly Mitsubishi M32R/D) */ + #define bfd_mach_m32r 1 /* For backwards compatibility. */ + #define bfd_mach_m32rx 'x' + #define bfd_mach_m32r2 '2' + bfd_arch_mn10200, /* Matsushita MN10200 */ + bfd_arch_mn10300, /* Matsushita MN10300 */ + #define bfd_mach_mn10300 300 + #define bfd_mach_am33 330 + #define bfd_mach_am33_2 332 + bfd_arch_fr30, + #define bfd_mach_fr30 0x46523330 + bfd_arch_frv, + #define bfd_mach_frv 1 + #define bfd_mach_frvsimple 2 + #define bfd_mach_fr300 300 + #define bfd_mach_fr400 400 + #define bfd_mach_fr450 450 + #define bfd_mach_frvtomcat 499 /* fr500 prototype */ + #define bfd_mach_fr500 500 + #define bfd_mach_fr550 550 + bfd_arch_mcore, + bfd_arch_mep, + #define bfd_mach_mep 1 + #define bfd_mach_mep_h1 0x6831 + bfd_arch_ia64, /* HP/Intel ia64 */ + #define bfd_mach_ia64_elf64 64 + #define bfd_mach_ia64_elf32 32 + bfd_arch_ip2k, /* Ubicom IP2K microcontrollers. */ + #define bfd_mach_ip2022 1 + #define bfd_mach_ip2022ext 2 + bfd_arch_iq2000, /* Vitesse IQ2000. */ + #define bfd_mach_iq2000 1 + #define bfd_mach_iq10 2 + bfd_arch_mt, + #define bfd_mach_ms1 1 + #define bfd_mach_mrisc2 2 + #define bfd_mach_ms2 3 + bfd_arch_pj, + bfd_arch_avr, /* Atmel AVR microcontrollers. */ + #define bfd_mach_avr1 1 + #define bfd_mach_avr2 2 + #define bfd_mach_avr3 3 + #define bfd_mach_avr4 4 + #define bfd_mach_avr5 5 + #define bfd_mach_avr6 6 + bfd_arch_bfin, /* ADI Blackfin */ + #define bfd_mach_bfin 1 + bfd_arch_cr16, /* National Semiconductor CompactRISC (ie CR16). */ + #define bfd_mach_cr16 1 + bfd_arch_cr16c, /* National Semiconductor CompactRISC. */ + #define bfd_mach_cr16c 1 + bfd_arch_crx, /* National Semiconductor CRX. */ + #define bfd_mach_crx 1 + bfd_arch_cris, /* Axis CRIS */ + #define bfd_mach_cris_v0_v10 255 + #define bfd_mach_cris_v32 32 + #define bfd_mach_cris_v10_v32 1032 + bfd_arch_s390, /* IBM s390 */ + #define bfd_mach_s390_31 31 + #define bfd_mach_s390_64 64 + bfd_arch_score, /* Sunplus score */ + bfd_arch_openrisc, /* OpenRISC */ + bfd_arch_mmix, /* Donald Knuth's educational processor. */ + bfd_arch_xstormy16, + #define bfd_mach_xstormy16 1 + bfd_arch_msp430, /* Texas Instruments MSP430 architecture. */ + #define bfd_mach_msp11 11 + #define bfd_mach_msp110 110 + #define bfd_mach_msp12 12 + #define bfd_mach_msp13 13 + #define bfd_mach_msp14 14 + #define bfd_mach_msp15 15 + #define bfd_mach_msp16 16 + #define bfd_mach_msp21 21 + #define bfd_mach_msp31 31 + #define bfd_mach_msp32 32 + #define bfd_mach_msp33 33 + #define bfd_mach_msp41 41 + #define bfd_mach_msp42 42 + #define bfd_mach_msp43 43 + #define bfd_mach_msp44 44 + bfd_arch_xc16x, /* Infineon's XC16X Series. */ + #define bfd_mach_xc16x 1 + #define bfd_mach_xc16xl 2 + #define bfd_mach_xc16xs 3 + bfd_arch_xtensa, /* Tensilica's Xtensa cores. */ + #define bfd_mach_xtensa 1 + bfd_arch_maxq, /* Dallas MAXQ 10/20 */ + #define bfd_mach_maxq10 10 + #define bfd_mach_maxq20 20 + bfd_arch_z80, + #define bfd_mach_z80strict 1 /* No undocumented opcodes. */ + #define bfd_mach_z80 3 /* With ixl, ixh, iyl, and iyh. */ + #define bfd_mach_z80full 7 /* All undocumented instructions. */ + #define bfd_mach_r800 11 /* R800: successor with multiplication. */ + bfd_arch_last + }; + +2.13.2 bfd_arch_info +-------------------- + +*Description* +This structure contains information on architectures for use within BFD. + + typedef struct bfd_arch_info + { + int bits_per_word; + int bits_per_address; + int bits_per_byte; + enum bfd_architecture arch; + unsigned long mach; + const char *arch_name; + const char *printable_name; + unsigned int section_align_power; + /* TRUE if this is the default machine for the architecture. + The default arch should be the first entry for an arch so that + all the entries for that arch can be accessed via `next'. */ + bfd_boolean the_default; + const struct bfd_arch_info * (*compatible) + (const struct bfd_arch_info *a, const struct bfd_arch_info *b); + + bfd_boolean (*scan) (const struct bfd_arch_info *, const char *); + + const struct bfd_arch_info *next; + } + bfd_arch_info_type; + +2.13.2.1 `bfd_printable_name' +............................. + +*Synopsis* + const char *bfd_printable_name (bfd *abfd); + *Description* +Return a printable string representing the architecture and machine +from the pointer to the architecture info structure. + +2.13.2.2 `bfd_scan_arch' +........................ + +*Synopsis* + const bfd_arch_info_type *bfd_scan_arch (const char *string); + *Description* +Figure out if BFD supports any cpu which could be described with the +name STRING. Return a pointer to an `arch_info' structure if a machine +is found, otherwise NULL. + +2.13.2.3 `bfd_arch_list' +........................ + +*Synopsis* + const char **bfd_arch_list (void); + *Description* +Return a freshly malloced NULL-terminated vector of the names of all +the valid BFD architectures. Do not modify the names. + +2.13.2.4 `bfd_arch_get_compatible' +.................................. + +*Synopsis* + const bfd_arch_info_type *bfd_arch_get_compatible + (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns); + *Description* +Determine whether two BFDs' architectures and machine types are +compatible. Calculates the lowest common denominator between the two +architectures and machine types implied by the BFDs and returns a +pointer to an `arch_info' structure describing the compatible machine. + +2.13.2.5 `bfd_default_arch_struct' +.................................. + +*Description* +The `bfd_default_arch_struct' is an item of `bfd_arch_info_type' which +has been initialized to a fairly generic state. A BFD starts life by +pointing to this structure, until the correct back end has determined +the real architecture of the file. + extern const bfd_arch_info_type bfd_default_arch_struct; + +2.13.2.6 `bfd_set_arch_info' +............................ + +*Synopsis* + void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg); + *Description* +Set the architecture info of ABFD to ARG. + +2.13.2.7 `bfd_default_set_arch_mach' +.................................... + +*Synopsis* + bfd_boolean bfd_default_set_arch_mach + (bfd *abfd, enum bfd_architecture arch, unsigned long mach); + *Description* +Set the architecture and machine type in BFD ABFD to ARCH and MACH. +Find the correct pointer to a structure and insert it into the +`arch_info' pointer. + +2.13.2.8 `bfd_get_arch' +....................... + +*Synopsis* + enum bfd_architecture bfd_get_arch (bfd *abfd); + *Description* +Return the enumerated type which describes the BFD ABFD's architecture. + +2.13.2.9 `bfd_get_mach' +....................... + +*Synopsis* + unsigned long bfd_get_mach (bfd *abfd); + *Description* +Return the long type which describes the BFD ABFD's machine. + +2.13.2.10 `bfd_arch_bits_per_byte' +.................................. + +*Synopsis* + unsigned int bfd_arch_bits_per_byte (bfd *abfd); + *Description* +Return the number of bits in one of the BFD ABFD's architecture's bytes. + +2.13.2.11 `bfd_arch_bits_per_address' +..................................... + +*Synopsis* + unsigned int bfd_arch_bits_per_address (bfd *abfd); + *Description* +Return the number of bits in one of the BFD ABFD's architecture's +addresses. + +2.13.2.12 `bfd_default_compatible' +.................................. + +*Synopsis* + const bfd_arch_info_type *bfd_default_compatible + (const bfd_arch_info_type *a, const bfd_arch_info_type *b); + *Description* +The default function for testing for compatibility. + +2.13.2.13 `bfd_default_scan' +............................ + +*Synopsis* + bfd_boolean bfd_default_scan + (const struct bfd_arch_info *info, const char *string); + *Description* +The default function for working out whether this is an architecture +hit and a machine hit. + +2.13.2.14 `bfd_get_arch_info' +............................. + +*Synopsis* + const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd); + *Description* +Return the architecture info struct in ABFD. + +2.13.2.15 `bfd_lookup_arch' +........................... + +*Synopsis* + const bfd_arch_info_type *bfd_lookup_arch + (enum bfd_architecture arch, unsigned long machine); + *Description* +Look for the architecture info structure which matches the arguments +ARCH and MACHINE. A machine of 0 matches the machine/architecture +structure which marks itself as the default. + +2.13.2.16 `bfd_printable_arch_mach' +................................... + +*Synopsis* + const char *bfd_printable_arch_mach + (enum bfd_architecture arch, unsigned long machine); + *Description* +Return a printable string representing the architecture and machine +type. + + This routine is depreciated. + +2.13.2.17 `bfd_octets_per_byte' +............................... + +*Synopsis* + unsigned int bfd_octets_per_byte (bfd *abfd); + *Description* +Return the number of octets (8-bit quantities) per target byte (minimum +addressable unit). In most cases, this will be one, but some DSP +targets have 16, 32, or even 48 bits per byte. + +2.13.2.18 `bfd_arch_mach_octets_per_byte' +......................................... + +*Synopsis* + unsigned int bfd_arch_mach_octets_per_byte + (enum bfd_architecture arch, unsigned long machine); + *Description* +See bfd_octets_per_byte. + + This routine is provided for those cases where a bfd * is not +available + + +File: bfd.info, Node: Opening and Closing, Next: Internal, Prev: Architectures, Up: BFD front end + +2.14 Opening and closing BFDs +============================= + +2.14.1 Functions for opening and closing +---------------------------------------- + +2.14.1.1 `bfd_fopen' +.................... + +*Synopsis* + bfd *bfd_fopen (const char *filename, const char *target, + const char *mode, int fd); + *Description* +Open the file FILENAME with the target TARGET. Return a pointer to the +created BFD. If FD is not -1, then `fdopen' is used to open the file; +otherwise, `fopen' is used. MODE is passed directly to `fopen' or +`fdopen'. + + Calls `bfd_find_target', so TARGET is interpreted as by that +function. + + The new BFD is marked as cacheable iff FD is -1. + + If `NULL' is returned then an error has occured. Possible errors +are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call' +error. + +2.14.1.2 `bfd_openr' +.................... + +*Synopsis* + bfd *bfd_openr (const char *filename, const char *target); + *Description* +Open the file FILENAME (using `fopen') with the target TARGET. Return +a pointer to the created BFD. + + Calls `bfd_find_target', so TARGET is interpreted as by that +function. + + If `NULL' is returned then an error has occured. Possible errors +are `bfd_error_no_memory', `bfd_error_invalid_target' or `system_call' +error. + +2.14.1.3 `bfd_fdopenr' +...................... + +*Synopsis* + bfd *bfd_fdopenr (const char *filename, const char *target, int fd); + *Description* +`bfd_fdopenr' is to `bfd_fopenr' much like `fdopen' is to `fopen'. It +opens a BFD on a file already described by the FD supplied. + + When the file is later `bfd_close'd, the file descriptor will be +closed. If the caller desires that this file descriptor be cached by +BFD (opened as needed, closed as needed to free descriptors for other +opens), with the supplied FD used as an initial file descriptor (but +subject to closure at any time), call bfd_set_cacheable(bfd, 1) on the +returned BFD. The default is to assume no caching; the file descriptor +will remain open until `bfd_close', and will not be affected by BFD +operations on other files. + + Possible errors are `bfd_error_no_memory', +`bfd_error_invalid_target' and `bfd_error_system_call'. + +2.14.1.4 `bfd_openstreamr' +.......................... + +*Synopsis* + bfd *bfd_openstreamr (const char *, const char *, void *); + *Description* +Open a BFD for read access on an existing stdio stream. When the BFD +is passed to `bfd_close', the stream will be closed. + +2.14.1.5 `bfd_openr_iovec' +.......................... + +*Synopsis* + bfd *bfd_openr_iovec (const char *filename, const char *target, + void *(*open) (struct bfd *nbfd, + void *open_closure), + void *open_closure, + file_ptr (*pread) (struct bfd *nbfd, + void *stream, + void *buf, + file_ptr nbytes, + file_ptr offset), + int (*close) (struct bfd *nbfd, + void *stream), + int (*stat) (struct bfd *abfd, + void *stream, + struct stat *sb)); + *Description* +Create and return a BFD backed by a read-only STREAM. The STREAM is +created using OPEN, accessed using PREAD and destroyed using CLOSE. + + Calls `bfd_find_target', so TARGET is interpreted as by that +function. + + Calls OPEN (which can call `bfd_zalloc' and `bfd_get_filename') to +obtain the read-only stream backing the BFD. OPEN either succeeds +returning the non-`NULL' STREAM, or fails returning `NULL' (setting +`bfd_error'). + + Calls PREAD to request NBYTES of data from STREAM starting at OFFSET +(e.g., via a call to `bfd_read'). PREAD either succeeds returning the +number of bytes read (which can be less than NBYTES when end-of-file), +or fails returning -1 (setting `bfd_error'). + + Calls CLOSE when the BFD is later closed using `bfd_close'. CLOSE +either succeeds returning 0, or fails returning -1 (setting +`bfd_error'). + + Calls STAT to fill in a stat structure for bfd_stat, bfd_get_size, +and bfd_get_mtime calls. STAT returns 0 on success, or returns -1 on +failure (setting `bfd_error'). + + If `bfd_openr_iovec' returns `NULL' then an error has occurred. +Possible errors are `bfd_error_no_memory', `bfd_error_invalid_target' +and `bfd_error_system_call'. + +2.14.1.6 `bfd_openw' +.................... + +*Synopsis* + bfd *bfd_openw (const char *filename, const char *target); + *Description* +Create a BFD, associated with file FILENAME, using the file format +TARGET, and return a pointer to it. + + Possible errors are `bfd_error_system_call', `bfd_error_no_memory', +`bfd_error_invalid_target'. + +2.14.1.7 `bfd_close' +.................... + +*Synopsis* + bfd_boolean bfd_close (bfd *abfd); + *Description* +Close a BFD. If the BFD was open for writing, then pending operations +are completed and the file written out and closed. If the created file +is executable, then `chmod' is called to mark it as such. + + All memory attached to the BFD is released. + + The file descriptor associated with the BFD is closed (even if it +was passed in to BFD by `bfd_fdopenr'). + + *Returns* +`TRUE' is returned if all is ok, otherwise `FALSE'. + +2.14.1.8 `bfd_close_all_done' +............................. + +*Synopsis* + bfd_boolean bfd_close_all_done (bfd *); + *Description* +Close a BFD. Differs from `bfd_close' since it does not complete any +pending operations. This routine would be used if the application had +just used BFD for swapping and didn't want to use any of the writing +code. + + If the created file is executable, then `chmod' is called to mark it +as such. + + All memory attached to the BFD is released. + + *Returns* +`TRUE' is returned if all is ok, otherwise `FALSE'. + +2.14.1.9 `bfd_create' +..................... + +*Synopsis* + bfd *bfd_create (const char *filename, bfd *templ); + *Description* +Create a new BFD in the manner of `bfd_openw', but without opening a +file. The new BFD takes the target from the target used by TEMPLATE. +The format is always set to `bfd_object'. + +2.14.1.10 `bfd_make_writable' +............................. + +*Synopsis* + bfd_boolean bfd_make_writable (bfd *abfd); + *Description* +Takes a BFD as created by `bfd_create' and converts it into one like as +returned by `bfd_openw'. It does this by converting the BFD to +BFD_IN_MEMORY. It's assumed that you will call `bfd_make_readable' on +this bfd later. + + *Returns* +`TRUE' is returned if all is ok, otherwise `FALSE'. + +2.14.1.11 `bfd_make_readable' +............................. + +*Synopsis* + bfd_boolean bfd_make_readable (bfd *abfd); + *Description* +Takes a BFD as created by `bfd_create' and `bfd_make_writable' and +converts it into one like as returned by `bfd_openr'. It does this by +writing the contents out to the memory buffer, then reversing the +direction. + + *Returns* +`TRUE' is returned if all is ok, otherwise `FALSE'. + +2.14.1.12 `bfd_alloc' +..................... + +*Synopsis* + void *bfd_alloc (bfd *abfd, bfd_size_type wanted); + *Description* +Allocate a block of WANTED bytes of memory attached to `abfd' and +return a pointer to it. + +2.14.1.13 `bfd_alloc2' +...................... + +*Synopsis* + void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); + *Description* +Allocate a block of NMEMB elements of SIZE bytes each of memory +attached to `abfd' and return a pointer to it. + +2.14.1.14 `bfd_zalloc' +...................... + +*Synopsis* + void *bfd_zalloc (bfd *abfd, bfd_size_type wanted); + *Description* +Allocate a block of WANTED bytes of zeroed memory attached to `abfd' +and return a pointer to it. + +2.14.1.15 `bfd_zalloc2' +....................... + +*Synopsis* + void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); + *Description* +Allocate a block of NMEMB elements of SIZE bytes each of zeroed memory +attached to `abfd' and return a pointer to it. + +2.14.1.16 `bfd_calc_gnu_debuglink_crc32' +........................................ + +*Synopsis* + unsigned long bfd_calc_gnu_debuglink_crc32 + (unsigned long crc, const unsigned char *buf, bfd_size_type len); + *Description* +Computes a CRC value as used in the .gnu_debuglink section. Advances +the previously computed CRC value by computing and adding in the crc32 +for LEN bytes of BUF. + + *Returns* +Return the updated CRC32 value. + +2.14.1.17 `get_debug_link_info' +............................... + +*Synopsis* + char *get_debug_link_info (bfd *abfd, unsigned long *crc32_out); + *Description* +fetch the filename and CRC32 value for any separate debuginfo +associated with ABFD. Return NULL if no such info found, otherwise +return filename and update CRC32_OUT. + +2.14.1.18 `separate_debug_file_exists' +...................................... + +*Synopsis* + bfd_boolean separate_debug_file_exists + (char *name, unsigned long crc32); + *Description* +Checks to see if NAME is a file and if its contents match CRC32. + +2.14.1.19 `find_separate_debug_file' +.................................... + +*Synopsis* + char *find_separate_debug_file (bfd *abfd); + *Description* +Searches ABFD for a reference to separate debugging information, scans +various locations in the filesystem, including the file tree rooted at +DEBUG_FILE_DIRECTORY, and returns a filename of such debugging +information if the file is found and has matching CRC32. Returns NULL +if no reference to debugging file exists, or file cannot be found. + +2.14.1.20 `bfd_follow_gnu_debuglink' +.................................... + +*Synopsis* + char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir); + *Description* +Takes a BFD and searches it for a .gnu_debuglink section. If this +section is found, it examines the section for the name and checksum of +a '.debug' file containing auxiliary debugging information. It then +searches the filesystem for this .debug file in some standard +locations, including the directory tree rooted at DIR, and if found +returns the full filename. + + If DIR is NULL, it will search a default path configured into libbfd +at build time. [XXX this feature is not currently implemented]. + + *Returns* +`NULL' on any errors or failure to locate the .debug file, otherwise a +pointer to a heap-allocated string containing the filename. The caller +is responsible for freeing this string. + +2.14.1.21 `bfd_create_gnu_debuglink_section' +............................................ + +*Synopsis* + struct bfd_section *bfd_create_gnu_debuglink_section + (bfd *abfd, const char *filename); + *Description* +Takes a BFD and adds a .gnu_debuglink section to it. The section is +sized to be big enough to contain a link to the specified FILENAME. + + *Returns* +A pointer to the new section is returned if all is ok. Otherwise +`NULL' is returned and bfd_error is set. + +2.14.1.22 `bfd_fill_in_gnu_debuglink_section' +............................................. + +*Synopsis* + bfd_boolean bfd_fill_in_gnu_debuglink_section + (bfd *abfd, struct bfd_section *sect, const char *filename); + *Description* +Takes a BFD and containing a .gnu_debuglink section SECT and fills in +the contents of the section to contain a link to the specified +FILENAME. The filename should be relative to the current directory. + + *Returns* +`TRUE' is returned if all is ok. Otherwise `FALSE' is returned and +bfd_error is set. + + +File: bfd.info, Node: Internal, Next: File Caching, Prev: Opening and Closing, Up: BFD front end + +2.15 Implementation details +=========================== + +2.15.1 Internal functions +------------------------- + +*Description* +These routines are used within BFD. They are not intended for export, +but are documented here for completeness. + +2.15.1.1 `bfd_write_bigendian_4byte_int' +........................................ + +*Synopsis* + bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int); + *Description* +Write a 4 byte integer I to the output BFD ABFD, in big endian order +regardless of what else is going on. This is useful in archives. + +2.15.1.2 `bfd_put_size' +....................... + +2.15.1.3 `bfd_get_size' +....................... + +*Description* +These macros as used for reading and writing raw data in sections; each +access (except for bytes) is vectored through the target format of the +BFD and mangled accordingly. The mangling performs any necessary endian +translations and removes alignment restrictions. Note that types +accepted and returned by these macros are identical so they can be +swapped around in macros--for example, `libaout.h' defines `GET_WORD' +to either `bfd_get_32' or `bfd_get_64'. + + In the put routines, VAL must be a `bfd_vma'. If we are on a system +without prototypes, the caller is responsible for making sure that is +true, with a cast if necessary. We don't cast them in the macro +definitions because that would prevent `lint' or `gcc -Wall' from +detecting sins such as passing a pointer. To detect calling these with +less than a `bfd_vma', use `gcc -Wconversion' on a host with 64 bit +`bfd_vma''s. + + /* Byte swapping macros for user section data. */ + + #define bfd_put_8(abfd, val, ptr) \ + ((void) (*((unsigned char *) (ptr)) = (val) & 0xff)) + #define bfd_put_signed_8 \ + bfd_put_8 + #define bfd_get_8(abfd, ptr) \ + (*(unsigned char *) (ptr) & 0xff) + #define bfd_get_signed_8(abfd, ptr) \ + (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80) + + #define bfd_put_16(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_putx16, ((val),(ptr))) + #define bfd_put_signed_16 \ + bfd_put_16 + #define bfd_get_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx16, (ptr)) + #define bfd_get_signed_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx_signed_16, (ptr)) + + #define bfd_put_32(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_putx32, ((val),(ptr))) + #define bfd_put_signed_32 \ + bfd_put_32 + #define bfd_get_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx32, (ptr)) + #define bfd_get_signed_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx_signed_32, (ptr)) + + #define bfd_put_64(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_putx64, ((val), (ptr))) + #define bfd_put_signed_64 \ + bfd_put_64 + #define bfd_get_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx64, (ptr)) + #define bfd_get_signed_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) + + #define bfd_get(bits, abfd, ptr) \ + ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ + : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ + : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ + : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ + : (abort (), (bfd_vma) - 1)) + + #define bfd_put(bits, abfd, val, ptr) \ + ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \ + : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \ + : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \ + : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \ + : (abort (), (void) 0)) + +2.15.1.4 `bfd_h_put_size' +......................... + +*Description* +These macros have the same function as their `bfd_get_x' brethren, +except that they are used for removing information for the header +records of object files. Believe it or not, some object files keep +their header records in big endian order and their data in little +endian order. + + /* Byte swapping macros for file header data. */ + + #define bfd_h_put_8(abfd, val, ptr) \ + bfd_put_8 (abfd, val, ptr) + #define bfd_h_put_signed_8(abfd, val, ptr) \ + bfd_put_8 (abfd, val, ptr) + #define bfd_h_get_8(abfd, ptr) \ + bfd_get_8 (abfd, ptr) + #define bfd_h_get_signed_8(abfd, ptr) \ + bfd_get_signed_8 (abfd, ptr) + + #define bfd_h_put_16(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_h_putx16, (val, ptr)) + #define bfd_h_put_signed_16 \ + bfd_h_put_16 + #define bfd_h_get_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx16, (ptr)) + #define bfd_h_get_signed_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr)) + + #define bfd_h_put_32(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_h_putx32, (val, ptr)) + #define bfd_h_put_signed_32 \ + bfd_h_put_32 + #define bfd_h_get_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx32, (ptr)) + #define bfd_h_get_signed_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr)) + + #define bfd_h_put_64(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_h_putx64, (val, ptr)) + #define bfd_h_put_signed_64 \ + bfd_h_put_64 + #define bfd_h_get_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx64, (ptr)) + #define bfd_h_get_signed_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr)) + + /* Aliases for the above, which should eventually go away. */ + + #define H_PUT_64 bfd_h_put_64 + #define H_PUT_32 bfd_h_put_32 + #define H_PUT_16 bfd_h_put_16 + #define H_PUT_8 bfd_h_put_8 + #define H_PUT_S64 bfd_h_put_signed_64 + #define H_PUT_S32 bfd_h_put_signed_32 + #define H_PUT_S16 bfd_h_put_signed_16 + #define H_PUT_S8 bfd_h_put_signed_8 + #define H_GET_64 bfd_h_get_64 + #define H_GET_32 bfd_h_get_32 + #define H_GET_16 bfd_h_get_16 + #define H_GET_8 bfd_h_get_8 + #define H_GET_S64 bfd_h_get_signed_64 + #define H_GET_S32 bfd_h_get_signed_32 + #define H_GET_S16 bfd_h_get_signed_16 + #define H_GET_S8 bfd_h_get_signed_8 + +2.15.1.5 `bfd_log2' +................... + +*Synopsis* + unsigned int bfd_log2 (bfd_vma x); + *Description* +Return the log base 2 of the value supplied, rounded up. E.g., an X of +1025 returns 11. A X of 0 returns 0. + + +File: bfd.info, Node: File Caching, Next: Linker Functions, Prev: Internal, Up: BFD front end + +2.16 File caching +================= + +The file caching mechanism is embedded within BFD and allows the +application to open as many BFDs as it wants without regard to the +underlying operating system's file descriptor limit (often as low as 20 +open files). The module in `cache.c' maintains a least recently used +list of `BFD_CACHE_MAX_OPEN' files, and exports the name +`bfd_cache_lookup', which runs around and makes sure that the required +BFD is open. If not, then it chooses a file to close, closes it and +opens the one wanted, returning its file handle. + +2.16.1 Caching functions +------------------------ + +2.16.1.1 `bfd_cache_init' +......................... + +*Synopsis* + bfd_boolean bfd_cache_init (bfd *abfd); + *Description* +Add a newly opened BFD to the cache. + +2.16.1.2 `bfd_cache_close' +.......................... + +*Synopsis* + bfd_boolean bfd_cache_close (bfd *abfd); + *Description* +Remove the BFD ABFD from the cache. If the attached file is open, then +close it too. + + *Returns* +`FALSE' is returned if closing the file fails, `TRUE' is returned if +all is well. + +2.16.1.3 `bfd_cache_close_all' +.............................. + +*Synopsis* + bfd_boolean bfd_cache_close_all (void); + *Description* +Remove all BFDs from the cache. If the attached file is open, then +close it too. + + *Returns* +`FALSE' is returned if closing one of the file fails, `TRUE' is +returned if all is well. + +2.16.1.4 `bfd_open_file' +........................ + +*Synopsis* + FILE* bfd_open_file (bfd *abfd); + *Description* +Call the OS to open a file for ABFD. Return the `FILE *' (possibly +`NULL') that results from this operation. Set up the BFD so that +future accesses know the file is open. If the `FILE *' returned is +`NULL', then it won't have been put in the cache, so it won't have to +be removed from it. + + +File: bfd.info, Node: Linker Functions, Next: Hash Tables, Prev: File Caching, Up: BFD front end + +2.17 Linker Functions +===================== + +The linker uses three special entry points in the BFD target vector. +It is not necessary to write special routines for these entry points +when creating a new BFD back end, since generic versions are provided. +However, writing them can speed up linking and make it use +significantly less runtime memory. + + The first routine creates a hash table used by the other routines. +The second routine adds the symbols from an object file to the hash +table. The third routine takes all the object files and links them +together to create the output file. These routines are designed so +that the linker proper does not need to know anything about the symbols +in the object files that it is linking. The linker merely arranges the +sections as directed by the linker script and lets BFD handle the +details of symbols and relocs. + + The second routine and third routines are passed a pointer to a +`struct bfd_link_info' structure (defined in `bfdlink.h') which holds +information relevant to the link, including the linker hash table +(which was created by the first routine) and a set of callback +functions to the linker proper. + + The generic linker routines are in `linker.c', and use the header +file `genlink.h'. As of this writing, the only back ends which have +implemented versions of these routines are a.out (in `aoutx.h') and +ECOFF (in `ecoff.c'). The a.out routines are used as examples +throughout this section. + +* Menu: + +* Creating a Linker Hash Table:: +* Adding Symbols to the Hash Table:: +* Performing the Final Link:: + + +File: bfd.info, Node: Creating a Linker Hash Table, Next: Adding Symbols to the Hash Table, Prev: Linker Functions, Up: Linker Functions + +2.17.1 Creating a linker hash table +----------------------------------- + +The linker routines must create a hash table, which must be derived +from `struct bfd_link_hash_table' described in `bfdlink.c'. *Note Hash +Tables::, for information on how to create a derived hash table. This +entry point is called using the target vector of the linker output file. + + The `_bfd_link_hash_table_create' entry point must allocate and +initialize an instance of the desired hash table. If the back end does +not require any additional information to be stored with the entries in +the hash table, the entry point may simply create a `struct +bfd_link_hash_table'. Most likely, however, some additional +information will be needed. + + For example, with each entry in the hash table the a.out linker +keeps the index the symbol has in the final output file (this index +number is used so that when doing a relocatable link the symbol index +used in the output file can be quickly filled in when copying over a +reloc). The a.out linker code defines the required structures and +functions for a hash table derived from `struct bfd_link_hash_table'. +The a.out linker hash table is created by the function +`NAME(aout,link_hash_table_create)'; it simply allocates space for the +hash table, initializes it, and returns a pointer to it. + + When writing the linker routines for a new back end, you will +generally not know exactly which fields will be required until you have +finished. You should simply create a new hash table which defines no +additional fields, and then simply add fields as they become necessary. + + +File: bfd.info, Node: Adding Symbols to the Hash Table, Next: Performing the Final Link, Prev: Creating a Linker Hash Table, Up: Linker Functions + +2.17.2 Adding symbols to the hash table +--------------------------------------- + +The linker proper will call the `_bfd_link_add_symbols' entry point for +each object file or archive which is to be linked (typically these are +the files named on the command line, but some may also come from the +linker script). The entry point is responsible for examining the file. +For an object file, BFD must add any relevant symbol information to +the hash table. For an archive, BFD must determine which elements of +the archive should be used and adding them to the link. + + The a.out version of this entry point is +`NAME(aout,link_add_symbols)'. + +* Menu: + +* Differing file formats:: +* Adding symbols from an object file:: +* Adding symbols from an archive:: + + +File: bfd.info, Node: Differing file formats, Next: Adding symbols from an object file, Prev: Adding Symbols to the Hash Table, Up: Adding Symbols to the Hash Table + +2.17.2.1 Differing file formats +............................... + +Normally all the files involved in a link will be of the same format, +but it is also possible to link together different format object files, +and the back end must support that. The `_bfd_link_add_symbols' entry +point is called via the target vector of the file to be added. This +has an important consequence: the function may not assume that the hash +table is the type created by the corresponding +`_bfd_link_hash_table_create' vector. All the `_bfd_link_add_symbols' +function can assume about the hash table is that it is derived from +`struct bfd_link_hash_table'. + + Sometimes the `_bfd_link_add_symbols' function must store some +information in the hash table entry to be used by the `_bfd_final_link' +function. In such a case the `creator' field of the hash table must be +checked to make sure that the hash table was created by an object file +of the same format. + + The `_bfd_final_link' routine must be prepared to handle a hash +entry without any extra information added by the +`_bfd_link_add_symbols' function. A hash entry without extra +information will also occur when the linker script directs the linker +to create a symbol. Note that, regardless of how a hash table entry is +added, all the fields will be initialized to some sort of null value by +the hash table entry initialization function. + + See `ecoff_link_add_externals' for an example of how to check the +`creator' field before saving information (in this case, the ECOFF +external symbol debugging information) in a hash table entry. + + +File: bfd.info, Node: Adding symbols from an object file, Next: Adding symbols from an archive, Prev: Differing file formats, Up: Adding Symbols to the Hash Table + +2.17.2.2 Adding symbols from an object file +........................................... + +When the `_bfd_link_add_symbols' routine is passed an object file, it +must add all externally visible symbols in that object file to the hash +table. The actual work of adding the symbol to the hash table is +normally handled by the function `_bfd_generic_link_add_one_symbol'. +The `_bfd_link_add_symbols' routine is responsible for reading all the +symbols from the object file and passing the correct information to +`_bfd_generic_link_add_one_symbol'. + + The `_bfd_link_add_symbols' routine should not use +`bfd_canonicalize_symtab' to read the symbols. The point of providing +this routine is to avoid the overhead of converting the symbols into +generic `asymbol' structures. + + `_bfd_generic_link_add_one_symbol' handles the details of combining +common symbols, warning about multiple definitions, and so forth. It +takes arguments which describe the symbol to add, notably symbol flags, +a section, and an offset. The symbol flags include such things as +`BSF_WEAK' or `BSF_INDIRECT'. The section is a section in the object +file, or something like `bfd_und_section_ptr' for an undefined symbol +or `bfd_com_section_ptr' for a common symbol. + + If the `_bfd_final_link' routine is also going to need to read the +symbol information, the `_bfd_link_add_symbols' routine should save it +somewhere attached to the object file BFD. However, the information +should only be saved if the `keep_memory' field of the `info' argument +is TRUE, so that the `-no-keep-memory' linker switch is effective. + + The a.out function which adds symbols from an object file is +`aout_link_add_object_symbols', and most of the interesting work is in +`aout_link_add_symbols'. The latter saves pointers to the hash tables +entries created by `_bfd_generic_link_add_one_symbol' indexed by symbol +number, so that the `_bfd_final_link' routine does not have to call the +hash table lookup routine to locate the entry. + + +File: bfd.info, Node: Adding symbols from an archive, Prev: Adding symbols from an object file, Up: Adding Symbols to the Hash Table + +2.17.2.3 Adding symbols from an archive +....................................... + +When the `_bfd_link_add_symbols' routine is passed an archive, it must +look through the symbols defined by the archive and decide which +elements of the archive should be included in the link. For each such +element it must call the `add_archive_element' linker callback, and it +must add the symbols from the object file to the linker hash table. + + In most cases the work of looking through the symbols in the archive +should be done by the `_bfd_generic_link_add_archive_symbols' function. +This function builds a hash table from the archive symbol table and +looks through the list of undefined symbols to see which elements +should be included. `_bfd_generic_link_add_archive_symbols' is passed +a function to call to make the final decision about adding an archive +element to the link and to do the actual work of adding the symbols to +the linker hash table. + + The function passed to `_bfd_generic_link_add_archive_symbols' must +read the symbols of the archive element and decide whether the archive +element should be included in the link. If the element is to be +included, the `add_archive_element' linker callback routine must be +called with the element as an argument, and the elements symbols must +be added to the linker hash table just as though the element had itself +been passed to the `_bfd_link_add_symbols' function. + + When the a.out `_bfd_link_add_symbols' function receives an archive, +it calls `_bfd_generic_link_add_archive_symbols' passing +`aout_link_check_archive_element' as the function argument. +`aout_link_check_archive_element' calls `aout_link_check_ar_symbols'. +If the latter decides to add the element (an element is only added if +it provides a real, non-common, definition for a previously undefined +or common symbol) it calls the `add_archive_element' callback and then +`aout_link_check_archive_element' calls `aout_link_add_symbols' to +actually add the symbols to the linker hash table. + + The ECOFF back end is unusual in that it does not normally call +`_bfd_generic_link_add_archive_symbols', because ECOFF archives already +contain a hash table of symbols. The ECOFF back end searches the +archive itself to avoid the overhead of creating a new hash table. + + +File: bfd.info, Node: Performing the Final Link, Prev: Adding Symbols to the Hash Table, Up: Linker Functions + +2.17.3 Performing the final link +-------------------------------- + +When all the input files have been processed, the linker calls the +`_bfd_final_link' entry point of the output BFD. This routine is +responsible for producing the final output file, which has several +aspects. It must relocate the contents of the input sections and copy +the data into the output sections. It must build an output symbol +table including any local symbols from the input files and the global +symbols from the hash table. When producing relocatable output, it must +modify the input relocs and write them into the output file. There may +also be object format dependent work to be done. + + The linker will also call the `write_object_contents' entry point +when the BFD is closed. The two entry points must work together in +order to produce the correct output file. + + The details of how this works are inevitably dependent upon the +specific object file format. The a.out `_bfd_final_link' routine is +`NAME(aout,final_link)'. + +* Menu: + +* Information provided by the linker:: +* Relocating the section contents:: +* Writing the symbol table:: + + +File: bfd.info, Node: Information provided by the linker, Next: Relocating the section contents, Prev: Performing the Final Link, Up: Performing the Final Link + +2.17.3.1 Information provided by the linker +........................................... + +Before the linker calls the `_bfd_final_link' entry point, it sets up +some data structures for the function to use. + + The `input_bfds' field of the `bfd_link_info' structure will point +to a list of all the input files included in the link. These files are +linked through the `link_next' field of the `bfd' structure. + + Each section in the output file will have a list of `link_order' +structures attached to the `map_head.link_order' field (the +`link_order' structure is defined in `bfdlink.h'). These structures +describe how to create the contents of the output section in terms of +the contents of various input sections, fill constants, and, +eventually, other types of information. They also describe relocs that +must be created by the BFD backend, but do not correspond to any input +file; this is used to support -Ur, which builds constructors while +generating a relocatable object file. + + +File: bfd.info, Node: Relocating the section contents, Next: Writing the symbol table, Prev: Information provided by the linker, Up: Performing the Final Link + +2.17.3.2 Relocating the section contents +........................................ + +The `_bfd_final_link' function should look through the `link_order' +structures attached to each section of the output file. Each +`link_order' structure should either be handled specially, or it should +be passed to the function `_bfd_default_link_order' which will do the +right thing (`_bfd_default_link_order' is defined in `linker.c'). + + For efficiency, a `link_order' of type `bfd_indirect_link_order' +whose associated section belongs to a BFD of the same format as the +output BFD must be handled specially. This type of `link_order' +describes part of an output section in terms of a section belonging to +one of the input files. The `_bfd_final_link' function should read the +contents of the section and any associated relocs, apply the relocs to +the section contents, and write out the modified section contents. If +performing a relocatable link, the relocs themselves must also be +modified and written out. + + The functions `_bfd_relocate_contents' and +`_bfd_final_link_relocate' provide some general support for performing +the actual relocations, notably overflow checking. Their arguments +include information about the symbol the relocation is against and a +`reloc_howto_type' argument which describes the relocation to perform. +These functions are defined in `reloc.c'. + + The a.out function which handles reading, relocating, and writing +section contents is `aout_link_input_section'. The actual relocation +is done in `aout_link_input_section_std' and +`aout_link_input_section_ext'. + + +File: bfd.info, Node: Writing the symbol table, Prev: Relocating the section contents, Up: Performing the Final Link + +2.17.3.3 Writing the symbol table +................................. + +The `_bfd_final_link' function must gather all the symbols in the input +files and write them out. It must also write out all the symbols in +the global hash table. This must be controlled by the `strip' and +`discard' fields of the `bfd_link_info' structure. + + The local symbols of the input files will not have been entered into +the linker hash table. The `_bfd_final_link' routine must consider +each input file and include the symbols in the output file. It may be +convenient to do this when looking through the `link_order' structures, +or it may be done by stepping through the `input_bfds' list. + + The `_bfd_final_link' routine must also traverse the global hash +table to gather all the externally visible symbols. It is possible +that most of the externally visible symbols may be written out when +considering the symbols of each input file, but it is still necessary +to traverse the hash table since the linker script may have defined +some symbols that are not in any of the input files. + + The `strip' field of the `bfd_link_info' structure controls which +symbols are written out. The possible values are listed in +`bfdlink.h'. If the value is `strip_some', then the `keep_hash' field +of the `bfd_link_info' structure is a hash table of symbols to keep; +each symbol should be looked up in this hash table, and only symbols +which are present should be included in the output file. + + If the `strip' field of the `bfd_link_info' structure permits local +symbols to be written out, the `discard' field is used to further +controls which local symbols are included in the output file. If the +value is `discard_l', then all local symbols which begin with a certain +prefix are discarded; this is controlled by the +`bfd_is_local_label_name' entry point. + + The a.out backend handles symbols by calling +`aout_link_write_symbols' on each input BFD and then traversing the +global hash table with the function `aout_link_write_other_symbol'. It +builds a string table while writing out the symbols, which is written +to the output file at the end of `NAME(aout,final_link)'. + +2.17.3.4 `bfd_link_split_section' +................................. + +*Synopsis* + bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec); + *Description* +Return nonzero if SEC should be split during a reloceatable or final +link. + #define bfd_link_split_section(abfd, sec) \ + BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec)) + +2.17.3.5 `bfd_section_already_linked' +..................................... + +*Synopsis* + void bfd_section_already_linked (bfd *abfd, asection *sec, + struct bfd_link_info *info); + *Description* +Check if SEC has been already linked during a reloceatable or final +link. + #define bfd_section_already_linked(abfd, sec, info) \ + BFD_SEND (abfd, _section_already_linked, (abfd, sec, info)) + + +File: bfd.info, Node: Hash Tables, Prev: Linker Functions, Up: BFD front end + +2.18 Hash Tables +================ + +BFD provides a simple set of hash table functions. Routines are +provided to initialize a hash table, to free a hash table, to look up a +string in a hash table and optionally create an entry for it, and to +traverse a hash table. There is currently no routine to delete an +string from a hash table. + + The basic hash table does not permit any data to be stored with a +string. However, a hash table is designed to present a base class from +which other types of hash tables may be derived. These derived types +may store additional information with the string. Hash tables were +implemented in this way, rather than simply providing a data pointer in +a hash table entry, because they were designed for use by the linker +back ends. The linker may create thousands of hash table entries, and +the overhead of allocating private data and storing and following +pointers becomes noticeable. + + The basic hash table code is in `hash.c'. + +* Menu: + +* Creating and Freeing a Hash Table:: +* Looking Up or Entering a String:: +* Traversing a Hash Table:: +* Deriving a New Hash Table Type:: + + +File: bfd.info, Node: Creating and Freeing a Hash Table, Next: Looking Up or Entering a String, Prev: Hash Tables, Up: Hash Tables + +2.18.1 Creating and freeing a hash table +---------------------------------------- + +To create a hash table, create an instance of a `struct bfd_hash_table' +(defined in `bfd.h') and call `bfd_hash_table_init' (if you know +approximately how many entries you will need, the function +`bfd_hash_table_init_n', which takes a SIZE argument, may be used). +`bfd_hash_table_init' returns `FALSE' if some sort of error occurs. + + The function `bfd_hash_table_init' take as an argument a function to +use to create new entries. For a basic hash table, use the function +`bfd_hash_newfunc'. *Note Deriving a New Hash Table Type::, for why +you would want to use a different value for this argument. + + `bfd_hash_table_init' will create an objalloc which will be used to +allocate new entries. You may allocate memory on this objalloc using +`bfd_hash_allocate'. + + Use `bfd_hash_table_free' to free up all the memory that has been +allocated for a hash table. This will not free up the `struct +bfd_hash_table' itself, which you must provide. + + Use `bfd_hash_set_default_size' to set the default size of hash +table to use. + + +File: bfd.info, Node: Looking Up or Entering a String, Next: Traversing a Hash Table, Prev: Creating and Freeing a Hash Table, Up: Hash Tables + +2.18.2 Looking up or entering a string +-------------------------------------- + +The function `bfd_hash_lookup' is used both to look up a string in the +hash table and to create a new entry. + + If the CREATE argument is `FALSE', `bfd_hash_lookup' will look up a +string. If the string is found, it will returns a pointer to a `struct +bfd_hash_entry'. If the string is not found in the table +`bfd_hash_lookup' will return `NULL'. You should not modify any of the +fields in the returns `struct bfd_hash_entry'. + + If the CREATE argument is `TRUE', the string will be entered into +the hash table if it is not already there. Either way a pointer to a +`struct bfd_hash_entry' will be returned, either to the existing +structure or to a newly created one. In this case, a `NULL' return +means that an error occurred. + + If the CREATE argument is `TRUE', and a new entry is created, the +COPY argument is used to decide whether to copy the string onto the +hash table objalloc or not. If COPY is passed as `FALSE', you must be +careful not to deallocate or modify the string as long as the hash table +exists. + + +File: bfd.info, Node: Traversing a Hash Table, Next: Deriving a New Hash Table Type, Prev: Looking Up or Entering a String, Up: Hash Tables + +2.18.3 Traversing a hash table +------------------------------ + +The function `bfd_hash_traverse' may be used to traverse a hash table, +calling a function on each element. The traversal is done in a random +order. + + `bfd_hash_traverse' takes as arguments a function and a generic +`void *' pointer. The function is called with a hash table entry (a +`struct bfd_hash_entry *') and the generic pointer passed to +`bfd_hash_traverse'. The function must return a `boolean' value, which +indicates whether to continue traversing the hash table. If the +function returns `FALSE', `bfd_hash_traverse' will stop the traversal +and return immediately. + + +File: bfd.info, Node: Deriving a New Hash Table Type, Prev: Traversing a Hash Table, Up: Hash Tables + +2.18.4 Deriving a new hash table type +------------------------------------- + +Many uses of hash tables want to store additional information which +each entry in the hash table. Some also find it convenient to store +additional information with the hash table itself. This may be done +using a derived hash table. + + Since C is not an object oriented language, creating a derived hash +table requires sticking together some boilerplate routines with a few +differences specific to the type of hash table you want to create. + + An example of a derived hash table is the linker hash table. The +structures for this are defined in `bfdlink.h'. The functions are in +`linker.c'. + + You may also derive a hash table from an already derived hash table. +For example, the a.out linker backend code uses a hash table derived +from the linker hash table. + +* Menu: + +* Define the Derived Structures:: +* Write the Derived Creation Routine:: +* Write Other Derived Routines:: + + +File: bfd.info, Node: Define the Derived Structures, Next: Write the Derived Creation Routine, Prev: Deriving a New Hash Table Type, Up: Deriving a New Hash Table Type + +2.18.4.1 Define the derived structures +...................................... + +You must define a structure for an entry in the hash table, and a +structure for the hash table itself. + + The first field in the structure for an entry in the hash table must +be of the type used for an entry in the hash table you are deriving +from. If you are deriving from a basic hash table this is `struct +bfd_hash_entry', which is defined in `bfd.h'. The first field in the +structure for the hash table itself must be of the type of the hash +table you are deriving from itself. If you are deriving from a basic +hash table, this is `struct bfd_hash_table'. + + For example, the linker hash table defines `struct +bfd_link_hash_entry' (in `bfdlink.h'). The first field, `root', is of +type `struct bfd_hash_entry'. Similarly, the first field in `struct +bfd_link_hash_table', `table', is of type `struct bfd_hash_table'. + + +File: bfd.info, Node: Write the Derived Creation Routine, Next: Write Other Derived Routines, Prev: Define the Derived Structures, Up: Deriving a New Hash Table Type + +2.18.4.2 Write the derived creation routine +........................................... + +You must write a routine which will create and initialize an entry in +the hash table. This routine is passed as the function argument to +`bfd_hash_table_init'. + + In order to permit other hash tables to be derived from the hash +table you are creating, this routine must be written in a standard way. + + The first argument to the creation routine is a pointer to a hash +table entry. This may be `NULL', in which case the routine should +allocate the right amount of space. Otherwise the space has already +been allocated by a hash table type derived from this one. + + After allocating space, the creation routine must call the creation +routine of the hash table type it is derived from, passing in a pointer +to the space it just allocated. This will initialize any fields used +by the base hash table. + + Finally the creation routine must initialize any local fields for +the new hash table type. + + Here is a boilerplate example of a creation routine. FUNCTION_NAME +is the name of the routine. ENTRY_TYPE is the type of an entry in the +hash table you are creating. BASE_NEWFUNC is the name of the creation +routine of the hash table type your hash table is derived from. + + struct bfd_hash_entry * + FUNCTION_NAME (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) + { + struct ENTRY_TYPE *ret = (ENTRY_TYPE *) entry; + + /* Allocate the structure if it has not already been allocated by a + derived class. */ + if (ret == NULL) + { + ret = bfd_hash_allocate (table, sizeof (* ret)); + if (ret == NULL) + return NULL; + } + + /* Call the allocation method of the base class. */ + ret = ((ENTRY_TYPE *) + BASE_NEWFUNC ((struct bfd_hash_entry *) ret, table, string)); + + /* Initialize the local fields here. */ + + return (struct bfd_hash_entry *) ret; + } + *Description* +The creation routine for the linker hash table, which is in `linker.c', +looks just like this example. FUNCTION_NAME is +`_bfd_link_hash_newfunc'. ENTRY_TYPE is `struct bfd_link_hash_entry'. +BASE_NEWFUNC is `bfd_hash_newfunc', the creation routine for a basic +hash table. + + `_bfd_link_hash_newfunc' also initializes the local fields in a +linker hash table entry: `type', `written' and `next'. + + +File: bfd.info, Node: Write Other Derived Routines, Prev: Write the Derived Creation Routine, Up: Deriving a New Hash Table Type + +2.18.4.3 Write other derived routines +..................................... + +You will want to write other routines for your new hash table, as well. + + You will want an initialization routine which calls the +initialization routine of the hash table you are deriving from and +initializes any other local fields. For the linker hash table, this is +`_bfd_link_hash_table_init' in `linker.c'. + + You will want a lookup routine which calls the lookup routine of the +hash table you are deriving from and casts the result. The linker hash +table uses `bfd_link_hash_lookup' in `linker.c' (this actually takes an +additional argument which it uses to decide how to return the looked up +value). + + You may want a traversal routine. This should just call the +traversal routine of the hash table you are deriving from with +appropriate casts. The linker hash table uses `bfd_link_hash_traverse' +in `linker.c'. + + These routines may simply be defined as macros. For example, the +a.out backend linker hash table, which is derived from the linker hash +table, uses macros for the lookup and traversal routines. These are +`aout_link_hash_lookup' and `aout_link_hash_traverse' in aoutx.h. + + +File: bfd.info, Node: BFD back ends, Next: GNU Free Documentation License, Prev: BFD front end, Up: Top + +3 BFD back ends +*************** + +* Menu: + +* What to Put Where:: +* aout :: a.out backends +* coff :: coff backends +* elf :: elf backends +* mmo :: mmo backend + + +File: bfd.info, Node: What to Put Where, Next: aout, Prev: BFD back ends, Up: BFD back ends + +3.1 What to Put Where +===================== + +All of BFD lives in one directory. + + +File: bfd.info, Node: aout, Next: coff, Prev: What to Put Where, Up: BFD back ends + +3.2 a.out backends +================== + +*Description* +BFD supports a number of different flavours of a.out format, though the +major differences are only the sizes of the structures on disk, and the +shape of the relocation information. + + The support is split into a basic support file `aoutx.h' and other +files which derive functions from the base. One derivation file is +`aoutf1.h' (for a.out flavour 1), and adds to the basic a.out functions +support for sun3, sun4, 386 and 29k a.out files, to create a target +jump vector for a specific target. + + This information is further split out into more specific files for +each machine, including `sunos.c' for sun3 and sun4, `newsos3.c' for +the Sony NEWS, and `demo64.c' for a demonstration of a 64 bit a.out +format. + + The base file `aoutx.h' defines general mechanisms for reading and +writing records to and from disk and various other methods which BFD +requires. It is included by `aout32.c' and `aout64.c' to form the names +`aout_32_swap_exec_header_in', `aout_64_swap_exec_header_in', etc. + + As an example, this is what goes on to make the back end for a sun4, +from `aout32.c': + + #define ARCH_SIZE 32 + #include "aoutx.h" + + Which exports names: + + ... + aout_32_canonicalize_reloc + aout_32_find_nearest_line + aout_32_get_lineno + aout_32_get_reloc_upper_bound + ... + + from `sunos.c': + + #define TARGET_NAME "a.out-sunos-big" + #define VECNAME sunos_big_vec + #include "aoutf1.h" + + requires all the names from `aout32.c', and produces the jump vector + + sunos_big_vec + + The file `host-aout.c' is a special case. It is for a large set of +hosts that use "more or less standard" a.out files, and for which +cross-debugging is not interesting. It uses the standard 32-bit a.out +support routines, but determines the file offsets and addresses of the +text, data, and BSS sections, the machine architecture and machine +type, and the entry point address, in a host-dependent manner. Once +these values have been determined, generic code is used to handle the +object file. + + When porting it to run on a new system, you must supply: + + HOST_PAGE_SIZE + HOST_SEGMENT_SIZE + HOST_MACHINE_ARCH (optional) + HOST_MACHINE_MACHINE (optional) + HOST_TEXT_START_ADDR + HOST_STACK_END_ADDR + + in the file `../include/sys/h-XXX.h' (for your host). These values, +plus the structures and macros defined in `a.out.h' on your host +system, will produce a BFD target that will access ordinary a.out files +on your host. To configure a new machine to use `host-aout.c', specify: + + TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec + TDEPFILES= host-aout.o trad-core.o + + in the `config/XXX.mt' file, and modify `configure.in' to use the +`XXX.mt' file (by setting "`bfd_target=XXX'") when your configuration +is selected. + +3.2.1 Relocations +----------------- + +*Description* +The file `aoutx.h' provides for both the _standard_ and _extended_ +forms of a.out relocation records. + + The standard records contain only an address, a symbol index, and a +type field. The extended records (used on 29ks and sparcs) also have a +full integer for an addend. + +3.2.2 Internal entry points +--------------------------- + +*Description* +`aoutx.h' exports several routines for accessing the contents of an +a.out file, which are gathered and exported in turn by various format +specific files (eg sunos.c). + +3.2.2.1 `aout_SIZE_swap_exec_header_in' +....................................... + +*Synopsis* + void aout_SIZE_swap_exec_header_in, + (bfd *abfd, + struct external_exec *bytes, + struct internal_exec *execp); + *Description* +Swap the information in an executable header RAW_BYTES taken from a raw +byte stream memory image into the internal exec header structure EXECP. + +3.2.2.2 `aout_SIZE_swap_exec_header_out' +........................................ + +*Synopsis* + void aout_SIZE_swap_exec_header_out + (bfd *abfd, + struct internal_exec *execp, + struct external_exec *raw_bytes); + *Description* +Swap the information in an internal exec header structure EXECP into +the buffer RAW_BYTES ready for writing to disk. + +3.2.2.3 `aout_SIZE_some_aout_object_p' +...................................... + +*Synopsis* + const bfd_target *aout_SIZE_some_aout_object_p + (bfd *abfd, + struct internal_exec *execp, + const bfd_target *(*callback_to_real_object_p) (bfd *)); + *Description* +Some a.out variant thinks that the file open in ABFD checking is an +a.out file. Do some more checking, and set up for access if it really +is. Call back to the calling environment's "finish up" function just +before returning, to handle any last-minute setup. + +3.2.2.4 `aout_SIZE_mkobject' +............................ + +*Synopsis* + bfd_boolean aout_SIZE_mkobject, (bfd *abfd); + *Description* +Initialize BFD ABFD for use with a.out files. + +3.2.2.5 `aout_SIZE_machine_type' +................................ + +*Synopsis* + enum machine_type aout_SIZE_machine_type + (enum bfd_architecture arch, + unsigned long machine, + bfd_boolean *unknown); + *Description* +Keep track of machine architecture and machine type for a.out's. Return +the `machine_type' for a particular architecture and machine, or +`M_UNKNOWN' if that exact architecture and machine can't be represented +in a.out format. + + If the architecture is understood, machine type 0 (default) is +always understood. + +3.2.2.6 `aout_SIZE_set_arch_mach' +................................. + +*Synopsis* + bfd_boolean aout_SIZE_set_arch_mach, + (bfd *, + enum bfd_architecture arch, + unsigned long machine); + *Description* +Set the architecture and the machine of the BFD ABFD to the values ARCH +and MACHINE. Verify that ABFD's format can support the architecture +required. + +3.2.2.7 `aout_SIZE_new_section_hook' +.................................... + +*Synopsis* + bfd_boolean aout_SIZE_new_section_hook, + (bfd *abfd, + asection *newsect); + *Description* +Called by the BFD in response to a `bfd_make_section' request. + + +File: bfd.info, Node: coff, Next: elf, Prev: aout, Up: BFD back ends + +3.3 coff backends +================= + +BFD supports a number of different flavours of coff format. The major +differences between formats are the sizes and alignments of fields in +structures on disk, and the occasional extra field. + + Coff in all its varieties is implemented with a few common files and +a number of implementation specific files. For example, The 88k bcs +coff format is implemented in the file `coff-m88k.c'. This file +`#include's `coff/m88k.h' which defines the external structure of the +coff format for the 88k, and `coff/internal.h' which defines the +internal structure. `coff-m88k.c' also defines the relocations used by +the 88k format *Note Relocations::. + + The Intel i960 processor version of coff is implemented in +`coff-i960.c'. This file has the same structure as `coff-m88k.c', +except that it includes `coff/i960.h' rather than `coff-m88k.h'. + +3.3.1 Porting to a new version of coff +-------------------------------------- + +The recommended method is to select from the existing implementations +the version of coff which is most like the one you want to use. For +example, we'll say that i386 coff is the one you select, and that your +coff flavour is called foo. Copy `i386coff.c' to `foocoff.c', copy +`../include/coff/i386.h' to `../include/coff/foo.h', and add the lines +to `targets.c' and `Makefile.in' so that your new back end is used. +Alter the shapes of the structures in `../include/coff/foo.h' so that +they match what you need. You will probably also have to add `#ifdef's +to the code in `coff/internal.h' and `coffcode.h' if your version of +coff is too wild. + + You can verify that your new BFD backend works quite simply by +building `objdump' from the `binutils' directory, and making sure that +its version of what's going on and your host system's idea (assuming it +has the pretty standard coff dump utility, usually called `att-dump' or +just `dump') are the same. Then clean up your code, and send what +you've done to Cygnus. Then your stuff will be in the next release, and +you won't have to keep integrating it. + +3.3.2 How the coff backend works +-------------------------------- + +3.3.2.1 File layout +................... + +The Coff backend is split into generic routines that are applicable to +any Coff target and routines that are specific to a particular target. +The target-specific routines are further split into ones which are +basically the same for all Coff targets except that they use the +external symbol format or use different values for certain constants. + + The generic routines are in `coffgen.c'. These routines work for +any Coff target. They use some hooks into the target specific code; +the hooks are in a `bfd_coff_backend_data' structure, one of which +exists for each target. + + The essentially similar target-specific routines are in +`coffcode.h'. This header file includes executable C code. The +various Coff targets first include the appropriate Coff header file, +make any special defines that are needed, and then include `coffcode.h'. + + Some of the Coff targets then also have additional routines in the +target source file itself. + + For example, `coff-i960.c' includes `coff/internal.h' and +`coff/i960.h'. It then defines a few constants, such as `I960', and +includes `coffcode.h'. Since the i960 has complex relocation types, +`coff-i960.c' also includes some code to manipulate the i960 relocs. +This code is not in `coffcode.h' because it would not be used by any +other target. + +3.3.2.2 Bit twiddling +..................... + +Each flavour of coff supported in BFD has its own header file +describing the external layout of the structures. There is also an +internal description of the coff layout, in `coff/internal.h'. A major +function of the coff backend is swapping the bytes and twiddling the +bits to translate the external form of the structures into the normal +internal form. This is all performed in the `bfd_swap'_thing_direction +routines. Some elements are different sizes between different versions +of coff; it is the duty of the coff version specific include file to +override the definitions of various packing routines in `coffcode.h'. +E.g., the size of line number entry in coff is sometimes 16 bits, and +sometimes 32 bits. `#define'ing `PUT_LNSZ_LNNO' and `GET_LNSZ_LNNO' +will select the correct one. No doubt, some day someone will find a +version of coff which has a varying field size not catered to at the +moment. To port BFD, that person will have to add more `#defines'. +Three of the bit twiddling routines are exported to `gdb'; +`coff_swap_aux_in', `coff_swap_sym_in' and `coff_swap_lineno_in'. `GDB' +reads the symbol table on its own, but uses BFD to fix things up. More +of the bit twiddlers are exported for `gas'; `coff_swap_aux_out', +`coff_swap_sym_out', `coff_swap_lineno_out', `coff_swap_reloc_out', +`coff_swap_filehdr_out', `coff_swap_aouthdr_out', +`coff_swap_scnhdr_out'. `Gas' currently keeps track of all the symbol +table and reloc drudgery itself, thereby saving the internal BFD +overhead, but uses BFD to swap things on the way out, making cross +ports much safer. Doing so also allows BFD (and thus the linker) to +use the same header files as `gas', which makes one avenue to disaster +disappear. + +3.3.2.3 Symbol reading +...................... + +The simple canonical form for symbols used by BFD is not rich enough to +keep all the information available in a coff symbol table. The back end +gets around this problem by keeping the original symbol table around, +"behind the scenes". + + When a symbol table is requested (through a call to +`bfd_canonicalize_symtab'), a request gets through to +`coff_get_normalized_symtab'. This reads the symbol table from the coff +file and swaps all the structures inside into the internal form. It +also fixes up all the pointers in the table (represented in the file by +offsets from the first symbol in the table) into physical pointers to +elements in the new internal table. This involves some work since the +meanings of fields change depending upon context: a field that is a +pointer to another structure in the symbol table at one moment may be +the size in bytes of a structure at the next. Another pass is made +over the table. All symbols which mark file names (`C_FILE' symbols) +are modified so that the internal string points to the value in the +auxent (the real filename) rather than the normal text associated with +the symbol (`".file"'). + + At this time the symbol names are moved around. Coff stores all +symbols less than nine characters long physically within the symbol +table; longer strings are kept at the end of the file in the string +table. This pass moves all strings into memory and replaces them with +pointers to the strings. + + The symbol table is massaged once again, this time to create the +canonical table used by the BFD application. Each symbol is inspected +in turn, and a decision made (using the `sclass' field) about the +various flags to set in the `asymbol'. *Note Symbols::. The generated +canonical table shares strings with the hidden internal symbol table. + + Any linenumbers are read from the coff file too, and attached to the +symbols which own the functions the linenumbers belong to. + +3.3.2.4 Symbol writing +...................... + +Writing a symbol to a coff file which didn't come from a coff file will +lose any debugging information. The `asymbol' structure remembers the +BFD from which the symbol was taken, and on output the back end makes +sure that the same destination target as source target is present. + + When the symbols have come from a coff file then all the debugging +information is preserved. + + Symbol tables are provided for writing to the back end in a vector +of pointers to pointers. This allows applications like the linker to +accumulate and output large symbol tables without having to do too much +byte copying. + + This function runs through the provided symbol table and patches +each symbol marked as a file place holder (`C_FILE') to point to the +next file place holder in the list. It also marks each `offset' field +in the list with the offset from the first symbol of the current symbol. + + Another function of this procedure is to turn the canonical value +form of BFD into the form used by coff. Internally, BFD expects symbol +values to be offsets from a section base; so a symbol physically at +0x120, but in a section starting at 0x100, would have the value 0x20. +Coff expects symbols to contain their final value, so symbols have +their values changed at this point to reflect their sum with their +owning section. This transformation uses the `output_section' field of +the `asymbol''s `asection' *Note Sections::. + + * `coff_mangle_symbols' + This routine runs though the provided symbol table and uses the +offsets generated by the previous pass and the pointers generated when +the symbol table was read in to create the structured hierarchy +required by coff. It changes each pointer to a symbol into the index +into the symbol table of the asymbol. + + * `coff_write_symbols' + This routine runs through the symbol table and patches up the +symbols from their internal form into the coff way, calls the bit +twiddlers, and writes out the table to the file. + +3.3.2.5 `coff_symbol_type' +.......................... + +*Description* +The hidden information for an `asymbol' is described in a +`combined_entry_type': + + + typedef struct coff_ptr_struct + { + /* Remembers the offset from the first symbol in the file for + this symbol. Generated by coff_renumber_symbols. */ + unsigned int offset; + + /* Should the value of this symbol be renumbered. Used for + XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */ + unsigned int fix_value : 1; + + /* Should the tag field of this symbol be renumbered. + Created by coff_pointerize_aux. */ + unsigned int fix_tag : 1; + + /* Should the endidx field of this symbol be renumbered. + Created by coff_pointerize_aux. */ + unsigned int fix_end : 1; + + /* Should the x_csect.x_scnlen field be renumbered. + Created by coff_pointerize_aux. */ + unsigned int fix_scnlen : 1; + + /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the + index into the line number entries. Set by coff_slurp_symbol_table. */ + unsigned int fix_line : 1; + + /* The container for the symbol structure as read and translated + from the file. */ + union + { + union internal_auxent auxent; + struct internal_syment syment; + } u; + } combined_entry_type; + + + /* Each canonical asymbol really looks like this: */ + + typedef struct coff_symbol_struct + { + /* The actual symbol which the rest of BFD works with */ + asymbol symbol; + + /* A pointer to the hidden information for this symbol */ + combined_entry_type *native; + + /* A pointer to the linenumber information for this symbol */ + struct lineno_cache_entry *lineno; + + /* Have the line numbers been relocated yet ? */ + bfd_boolean done_lineno; + } coff_symbol_type; + +3.3.2.6 `bfd_coff_backend_data' +............................... + + /* COFF symbol classifications. */ + + enum coff_symbol_classification + { + /* Global symbol. */ + COFF_SYMBOL_GLOBAL, + /* Common symbol. */ + COFF_SYMBOL_COMMON, + /* Undefined symbol. */ + COFF_SYMBOL_UNDEFINED, + /* Local symbol. */ + COFF_SYMBOL_LOCAL, + /* PE section symbol. */ + COFF_SYMBOL_PE_SECTION + }; +Special entry points for gdb to swap in coff symbol table parts: + typedef struct + { + void (*_bfd_coff_swap_aux_in) + (bfd *, void *, int, int, int, int, void *); + + void (*_bfd_coff_swap_sym_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_lineno_in) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_aux_out) + (bfd *, void *, int, int, int, int, void *); + + unsigned int (*_bfd_coff_swap_sym_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_lineno_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_reloc_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_filehdr_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_aouthdr_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_scnhdr_out) + (bfd *, void *, void *); + + unsigned int _bfd_filhsz; + unsigned int _bfd_aoutsz; + unsigned int _bfd_scnhsz; + unsigned int _bfd_symesz; + unsigned int _bfd_auxesz; + unsigned int _bfd_relsz; + unsigned int _bfd_linesz; + unsigned int _bfd_filnmlen; + bfd_boolean _bfd_coff_long_filenames; + bfd_boolean _bfd_coff_long_section_names; + unsigned int _bfd_coff_default_section_alignment_power; + bfd_boolean _bfd_coff_force_symnames_in_strings; + unsigned int _bfd_coff_debug_string_prefix_length; + + void (*_bfd_coff_swap_filehdr_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_aouthdr_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_scnhdr_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_reloc_in) + (bfd *abfd, void *, void *); + + bfd_boolean (*_bfd_coff_bad_format_hook) + (bfd *, void *); + + bfd_boolean (*_bfd_coff_set_arch_mach_hook) + (bfd *, void *); + + void * (*_bfd_coff_mkobject_hook) + (bfd *, void *, void *); + + bfd_boolean (*_bfd_styp_to_sec_flags_hook) + (bfd *, void *, const char *, asection *, flagword *); + + void (*_bfd_set_alignment_hook) + (bfd *, asection *, void *); + + bfd_boolean (*_bfd_coff_slurp_symbol_table) + (bfd *); + + bfd_boolean (*_bfd_coff_symname_in_debug) + (bfd *, struct internal_syment *); + + bfd_boolean (*_bfd_coff_pointerize_aux_hook) + (bfd *, combined_entry_type *, combined_entry_type *, + unsigned int, combined_entry_type *); + + bfd_boolean (*_bfd_coff_print_aux) + (bfd *, FILE *, combined_entry_type *, combined_entry_type *, + combined_entry_type *, unsigned int); + + void (*_bfd_coff_reloc16_extra_cases) + (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *, + bfd_byte *, unsigned int *, unsigned int *); + + int (*_bfd_coff_reloc16_estimate) + (bfd *, asection *, arelent *, unsigned int, + struct bfd_link_info *); + + enum coff_symbol_classification (*_bfd_coff_classify_symbol) + (bfd *, struct internal_syment *); + + bfd_boolean (*_bfd_coff_compute_section_file_positions) + (bfd *); + + bfd_boolean (*_bfd_coff_start_final_link) + (bfd *, struct bfd_link_info *); + + bfd_boolean (*_bfd_coff_relocate_section) + (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, + struct internal_reloc *, struct internal_syment *, asection **); + + reloc_howto_type *(*_bfd_coff_rtype_to_howto) + (bfd *, asection *, struct internal_reloc *, + struct coff_link_hash_entry *, struct internal_syment *, + bfd_vma *); + + bfd_boolean (*_bfd_coff_adjust_symndx) + (bfd *, struct bfd_link_info *, bfd *, asection *, + struct internal_reloc *, bfd_boolean *); + + bfd_boolean (*_bfd_coff_link_add_one_symbol) + (struct bfd_link_info *, bfd *, const char *, flagword, + asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean, + struct bfd_link_hash_entry **); + + bfd_boolean (*_bfd_coff_link_output_has_begun) + (bfd *, struct coff_final_link_info *); + + bfd_boolean (*_bfd_coff_final_link_postscript) + (bfd *, struct coff_final_link_info *); + + } bfd_coff_backend_data; + + #define coff_backend_info(abfd) \ + ((bfd_coff_backend_data *) (abfd)->xvec->backend_data) + + #define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \ + ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i)) + + #define bfd_coff_swap_sym_in(a,e,i) \ + ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i)) + + #define bfd_coff_swap_lineno_in(a,e,i) \ + ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i)) + + #define bfd_coff_swap_reloc_out(abfd, i, o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o)) + + #define bfd_coff_swap_lineno_out(abfd, i, o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o)) + + #define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \ + ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o)) + + #define bfd_coff_swap_sym_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o)) + + #define bfd_coff_swap_scnhdr_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o)) + + #define bfd_coff_swap_filehdr_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o)) + + #define bfd_coff_swap_aouthdr_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o)) + + #define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz) + #define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz) + #define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz) + #define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz) + #define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz) + #define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz) + #define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz) + #define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen) + #define bfd_coff_long_filenames(abfd) \ + (coff_backend_info (abfd)->_bfd_coff_long_filenames) + #define bfd_coff_long_section_names(abfd) \ + (coff_backend_info (abfd)->_bfd_coff_long_section_names) + #define bfd_coff_default_section_alignment_power(abfd) \ + (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power) + #define bfd_coff_swap_filehdr_in(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o)) + + #define bfd_coff_swap_aouthdr_in(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o)) + + #define bfd_coff_swap_scnhdr_in(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o)) + + #define bfd_coff_swap_reloc_in(abfd, i, o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o)) + + #define bfd_coff_bad_format_hook(abfd, filehdr) \ + ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr)) + + #define bfd_coff_set_arch_mach_hook(abfd, filehdr)\ + ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr)) + #define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\ + ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\ + (abfd, filehdr, aouthdr)) + + #define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\ + ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\ + (abfd, scnhdr, name, section, flags_ptr)) + + #define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\ + ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr)) + + #define bfd_coff_slurp_symbol_table(abfd)\ + ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd)) + + #define bfd_coff_symname_in_debug(abfd, sym)\ + ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym)) + + #define bfd_coff_force_symnames_in_strings(abfd)\ + (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings) + + #define bfd_coff_debug_string_prefix_length(abfd)\ + (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length) + + #define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\ + ((coff_backend_info (abfd)->_bfd_coff_print_aux)\ + (abfd, file, base, symbol, aux, indaux)) + + #define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\ + reloc, data, src_ptr, dst_ptr)\ + ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\ + (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)) + + #define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\ + ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\ + (abfd, section, reloc, shrink, link_info)) + + #define bfd_coff_classify_symbol(abfd, sym)\ + ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\ + (abfd, sym)) + + #define bfd_coff_compute_section_file_positions(abfd)\ + ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\ + (abfd)) + + #define bfd_coff_start_final_link(obfd, info)\ + ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\ + (obfd, info)) + #define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\ + ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\ + (obfd, info, ibfd, o, con, rel, isyms, secs)) + #define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\ + ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\ + (abfd, sec, rel, h, sym, addendp)) + #define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\ + ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\ + (obfd, info, ibfd, sec, rel, adjustedp)) + #define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\ + value, string, cp, coll, hashp)\ + ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\ + (info, abfd, name, flags, section, value, string, cp, coll, hashp)) + + #define bfd_coff_link_output_has_begun(a,p) \ + ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p)) + #define bfd_coff_final_link_postscript(a,p) \ + ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p)) + +3.3.2.7 Writing relocations +........................... + +To write relocations, the back end steps though the canonical +relocation table and create an `internal_reloc'. The symbol index to +use is removed from the `offset' field in the symbol table supplied. +The address comes directly from the sum of the section base address and +the relocation offset; the type is dug directly from the howto field. +Then the `internal_reloc' is swapped into the shape of an +`external_reloc' and written out to disk. + +3.3.2.8 Reading linenumbers +........................... + +Creating the linenumber table is done by reading in the entire coff +linenumber table, and creating another table for internal use. + + A coff linenumber table is structured so that each function is +marked as having a line number of 0. Each line within the function is +an offset from the first line in the function. The base of the line +number information for the table is stored in the symbol associated +with the function. + + Note: The PE format uses line number 0 for a flag indicating a new +source file. + + The information is copied from the external to the internal table, +and each symbol which marks a function is marked by pointing its... + + How does this work ? + +3.3.2.9 Reading relocations +........................... + +Coff relocations are easily transformed into the internal BFD form +(`arelent'). + + Reading a coff relocation table is done in the following stages: + + * Read the entire coff relocation table into memory. + + * Process each relocation in turn; first swap it from the external + to the internal form. + + * Turn the symbol referenced in the relocation's symbol index into a + pointer into the canonical symbol table. This table is the same + as the one returned by a call to `bfd_canonicalize_symtab'. The + back end will call that routine and save the result if a + canonicalization hasn't been done. + + * The reloc index is turned into a pointer to a howto structure, in + a back end specific way. For instance, the 386 and 960 use the + `r_type' to directly produce an index into a howto table vector; + the 88k subtracts a number from the `r_type' field and creates an + addend field. + + +File: bfd.info, Node: elf, Next: mmo, Prev: coff, Up: BFD back ends + +3.4 ELF backends +================ + +BFD support for ELF formats is being worked on. Currently, the best +supported back ends are for sparc and i386 (running svr4 or Solaris 2). + + Documentation of the internals of the support code still needs to be +written. The code is changing quickly enough that we haven't bothered +yet. + +3.4.0.1 `bfd_elf_find_section' +.............................. + +*Synopsis* + struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name); + *Description* +Helper functions for GDB to locate the string tables. Since BFD hides +string tables from callers, GDB needs to use an internal hook to find +them. Sun's .stabstr, in particular, isn't even pointed to by the +.stab section, so ordinary mechanisms wouldn't work to find it, even if +we had some. + + +File: bfd.info, Node: mmo, Prev: elf, Up: BFD back ends + +3.5 mmo backend +=============== + +The mmo object format is used exclusively together with Professor +Donald E. Knuth's educational 64-bit processor MMIX. The simulator +`mmix' which is available at +`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz' +understands this format. That package also includes a combined +assembler and linker called `mmixal'. The mmo format has no advantages +feature-wise compared to e.g. ELF. It is a simple non-relocatable +object format with no support for archives or debugging information, +except for symbol value information and line numbers (which is not yet +implemented in BFD). See +`http://www-cs-faculty.stanford.edu/~knuth/mmix.html' for more +information about MMIX. The ELF format is used for intermediate object +files in the BFD implementation. + +* Menu: + +* File layout:: +* Symbol-table:: +* mmo section mapping:: + + +File: bfd.info, Node: File layout, Next: Symbol-table, Prev: mmo, Up: mmo + +3.5.1 File layout +----------------- + +The mmo file contents is not partitioned into named sections as with +e.g. ELF. Memory areas is formed by specifying the location of the +data that follows. Only the memory area `0x0000...00' to `0x01ff...ff' +is executable, so it is used for code (and constants) and the area +`0x2000...00' to `0x20ff...ff' is used for writable data. *Note mmo +section mapping::. + + There is provision for specifying "special data" of 65536 different +types. We use type 80 (decimal), arbitrarily chosen the same as the +ELF `e_machine' number for MMIX, filling it with section information +normally found in ELF objects. *Note mmo section mapping::. + + Contents is entered as 32-bit words, xor:ed over previous contents, +always zero-initialized. A word that starts with the byte `0x98' forms +a command called a `lopcode', where the next byte distinguished between +the thirteen lopcodes. The two remaining bytes, called the `Y' and `Z' +fields, or the `YZ' field (a 16-bit big-endian number), are used for +various purposes different for each lopcode. As documented in +`http://www-cs-faculty.stanford.edu/~knuth/mmixal-intro.ps.gz', the +lopcodes are: + +`lop_quote' + 0x98000001. The next word is contents, regardless of whether it + starts with 0x98 or not. + +`lop_loc' + 0x9801YYZZ, where `Z' is 1 or 2. This is a location directive, + setting the location for the next data to the next 32-bit word + (for Z = 1) or 64-bit word (for Z = 2), plus Y * 2^56. Normally + `Y' is 0 for the text segment and 2 for the data segment. + +`lop_skip' + 0x9802YYZZ. Increase the current location by `YZ' bytes. + +`lop_fixo' + 0x9803YYZZ, where `Z' is 1 or 2. Store the current location as 64 + bits into the location pointed to by the next 32-bit (Z = 1) or + 64-bit (Z = 2) word, plus Y * 2^56. + +`lop_fixr' + 0x9804YYZZ. `YZ' is stored into the current location plus 2 - 4 * + YZ. + +`lop_fixrx' + 0x980500ZZ. `Z' is 16 or 24. A value `L' derived from the + following 32-bit word are used in a manner similar to `YZ' in + lop_fixr: it is xor:ed into the current location minus 4 * L. The + first byte of the word is 0 or 1. If it is 1, then L = (LOWEST 24 + BITS OF WORD) - 2^Z, if 0, then L = (LOWEST 24 BITS OF WORD). + +`lop_file' + 0x9806YYZZ. `Y' is the file number, `Z' is count of 32-bit words. + Set the file number to `Y' and the line counter to 0. The next Z + * 4 bytes contain the file name, padded with zeros if the count is + not a multiple of four. The same `Y' may occur multiple times, + but `Z' must be 0 for all but the first occurrence. + +`lop_line' + 0x9807YYZZ. `YZ' is the line number. Together with lop_file, it + forms the source location for the next 32-bit word. Note that for + each non-lopcode 32-bit word, line numbers are assumed incremented + by one. + +`lop_spec' + 0x9808YYZZ. `YZ' is the type number. Data until the next lopcode + other than lop_quote forms special data of type `YZ'. *Note mmo + section mapping::. + + Other types than 80, (or type 80 with a content that does not + parse) is stored in sections named `.MMIX.spec_data.N' where N is + the `YZ'-type. The flags for such a sections say not to allocate + or load the data. The vma is 0. Contents of multiple occurrences + of special data N is concatenated to the data of the previous + lop_spec Ns. The location in data or code at which the lop_spec + occurred is lost. + +`lop_pre' + 0x980901ZZ. The first lopcode in a file. The `Z' field forms the + length of header information in 32-bit words, where the first word + tells the time in seconds since `00:00:00 GMT Jan 1 1970'. + +`lop_post' + 0x980a00ZZ. Z > 32. This lopcode follows after all + content-generating lopcodes in a program. The `Z' field denotes + the value of `rG' at the beginning of the program. The following + 256 - Z big-endian 64-bit words are loaded into global registers + `$G' ... `$255'. + +`lop_stab' + 0x980b0000. The next-to-last lopcode in a program. Must follow + immediately after the lop_post lopcode and its data. After this + lopcode follows all symbols in a compressed format (*note + Symbol-table::). + +`lop_end' + 0x980cYYZZ. The last lopcode in a program. It must follow the + lop_stab lopcode and its data. The `YZ' field contains the number + of 32-bit words of symbol table information after the preceding + lop_stab lopcode. + + Note that the lopcode "fixups"; `lop_fixr', `lop_fixrx' and +`lop_fixo' are not generated by BFD, but are handled. They are +generated by `mmixal'. + + This trivial one-label, one-instruction file: + + :Main TRAP 1,2,3 + + can be represented this way in mmo: + + 0x98090101 - lop_pre, one 32-bit word with timestamp. + + 0x98010002 - lop_loc, text segment, using a 64-bit address. + Note that mmixal does not emit this for the file above. + 0x00000000 - Address, high 32 bits. + 0x00000000 - Address, low 32 bits. + 0x98060002 - lop_file, 2 32-bit words for file-name. + 0x74657374 - "test" + 0x2e730000 - ".s\0\0" + 0x98070001 - lop_line, line 1. + 0x00010203 - TRAP 1,2,3 + 0x980a00ff - lop_post, setting $255 to 0. + 0x00000000 + 0x00000000 + 0x980b0000 - lop_stab for ":Main" = 0, serial 1. + 0x203a4040 *Note Symbol-table::. + 0x10404020 + 0x4d206120 + 0x69016e00 + 0x81000000 + 0x980c0005 - lop_end; symbol table contained five 32-bit words. + + +File: bfd.info, Node: Symbol-table, Next: mmo section mapping, Prev: File layout, Up: mmo + +3.5.2 Symbol table format +------------------------- + +From mmixal.w (or really, the generated mmixal.tex) in +`http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz'): +"Symbols are stored and retrieved by means of a `ternary search trie', +following ideas of Bentley and Sedgewick. (See ACM-SIAM Symp. on +Discrete Algorithms `8' (1997), 360-369; R.Sedgewick, `Algorithms in C' +(Reading, Mass. Addison-Wesley, 1998), `15.4'.) Each trie node stores +a character, and there are branches to subtries for the cases where a +given character is less than, equal to, or greater than the character +in the trie. There also is a pointer to a symbol table entry if a +symbol ends at the current node." + + So it's a tree encoded as a stream of bytes. The stream of bytes +acts on a single virtual global symbol, adding and removing characters +and signalling complete symbol points. Here, we read the stream and +create symbols at the completion points. + + First, there's a control byte `m'. If any of the listed bits in `m' +is nonzero, we execute what stands at the right, in the listed order: + + (MMO3_LEFT) + 0x40 - Traverse left trie. + (Read a new command byte and recurse.) + + (MMO3_SYMBITS) + 0x2f - Read the next byte as a character and store it in the + current character position; increment character position. + Test the bits of `m': + + (MMO3_WCHAR) + 0x80 - The character is 16-bit (so read another byte, + merge into current character. + + (MMO3_TYPEBITS) + 0xf - We have a complete symbol; parse the type, value + and serial number and do what should be done + with a symbol. The type and length information + is in j = (m & 0xf). + + (MMO3_REGQUAL_BITS) + j == 0xf: A register variable. The following + byte tells which register. + j <= 8: An absolute symbol. Read j bytes as the + big-endian number the symbol equals. + A j = 2 with two zero bytes denotes an + unknown symbol. + j > 8: As with j <= 8, but add (0x20 << 56) + to the value in the following j - 8 + bytes. + + Then comes the serial number, as a variant of + uleb128, but better named ubeb128: + Read bytes and shift the previous value left 7 + (multiply by 128). Add in the new byte, repeat + until a byte has bit 7 set. The serial number + is the computed value minus 128. + + (MMO3_MIDDLE) + 0x20 - Traverse middle trie. (Read a new command byte + and recurse.) Decrement character position. + + (MMO3_RIGHT) + 0x10 - Traverse right trie. (Read a new command byte and + recurse.) + + Let's look again at the `lop_stab' for the trivial file (*note File +layout::). + + 0x980b0000 - lop_stab for ":Main" = 0, serial 1. + 0x203a4040 + 0x10404020 + 0x4d206120 + 0x69016e00 + 0x81000000 + + This forms the trivial trie (note that the path between ":" and "M" +is redundant): + + 203a ":" + 40 / + 40 / + 10 \ + 40 / + 40 / + 204d "M" + 2061 "a" + 2069 "i" + 016e "n" is the last character in a full symbol, and + with a value represented in one byte. + 00 The value is 0. + 81 The serial number is 1. + + +File: bfd.info, Node: mmo section mapping, Prev: Symbol-table, Up: mmo + +3.5.3 mmo section mapping +------------------------- + +The implementation in BFD uses special data type 80 (decimal) to +encapsulate and describe named sections, containing e.g. debug +information. If needed, any datum in the encapsulation will be quoted +using lop_quote. First comes a 32-bit word holding the number of +32-bit words containing the zero-terminated zero-padded segment name. +After the name there's a 32-bit word holding flags describing the +section type. Then comes a 64-bit big-endian word with the section +length (in bytes), then another with the section start address. +Depending on the type of section, the contents might follow, +zero-padded to 32-bit boundary. For a loadable section (such as data +or code), the contents might follow at some later point, not +necessarily immediately, as a lop_loc with the same start address as in +the section description, followed by the contents. This in effect +forms a descriptor that must be emitted before the actual contents. +Sections described this way must not overlap. + + For areas that don't have such descriptors, synthetic sections are +formed by BFD. Consecutive contents in the two memory areas +`0x0000...00' to `0x01ff...ff' and `0x2000...00' to `0x20ff...ff' are +entered in sections named `.text' and `.data' respectively. If an area +is not otherwise described, but would together with a neighboring lower +area be less than `0x40000000' bytes long, it is joined with the lower +area and the gap is zero-filled. For other cases, a new section is +formed, named `.MMIX.sec.N'. Here, N is a number, a running count +through the mmo file, starting at 0. + + A loadable section specified as: + + .section secname,"ax" + TETRA 1,2,3,4,-1,-2009 + BYTE 80 + + and linked to address `0x4', is represented by the sequence: + + 0x98080050 - lop_spec 80 + 0x00000002 - two 32-bit words for the section name + 0x7365636e - "secn" + 0x616d6500 - "ame\0" + 0x00000033 - flags CODE, READONLY, LOAD, ALLOC + 0x00000000 - high 32 bits of section length + 0x0000001c - section length is 28 bytes; 6 * 4 + 1 + alignment to 32 bits + 0x00000000 - high 32 bits of section address + 0x00000004 - section address is 4 + 0x98010002 - 64 bits with address of following data + 0x00000000 - high 32 bits of address + 0x00000004 - low 32 bits: data starts at address 4 + 0x00000001 - 1 + 0x00000002 - 2 + 0x00000003 - 3 + 0x00000004 - 4 + 0xffffffff - -1 + 0xfffff827 - -2009 + 0x50000000 - 80 as a byte, padded with zeros. + + Note that the lop_spec wrapping does not include the section +contents. Compare this to a non-loaded section specified as: + + .section thirdsec + TETRA 200001,100002 + BYTE 38,40 + + This, when linked to address `0x200000000000001c', is represented by: + + 0x98080050 - lop_spec 80 + 0x00000002 - two 32-bit words for the section name + 0x7365636e - "thir" + 0x616d6500 - "dsec" + 0x00000010 - flag READONLY + 0x00000000 - high 32 bits of section length + 0x0000000c - section length is 12 bytes; 2 * 4 + 2 + alignment to 32 bits + 0x20000000 - high 32 bits of address + 0x0000001c - low 32 bits of address 0x200000000000001c + 0x00030d41 - 200001 + 0x000186a2 - 100002 + 0x26280000 - 38, 40 as bytes, padded with zeros + + For the latter example, the section contents must not be loaded in +memory, and is therefore specified as part of the special data. The +address is usually unimportant but might provide information for e.g. +the DWARF 2 debugging format. + + +File: bfd.info, Node: GNU Free Documentation License, Next: BFD Index, Prev: BFD back ends, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.1, March 2000 + + Copyright (C) 2000, 2003 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + written document "free" in the sense of freedom: to assure everyone + the effective freedom to copy and redistribute it, with or without + modifying it, either commercially or noncommercially. Secondarily, + this License preserves for the author and publisher a way to get + credit for their work, while not being considered responsible for + modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work that contains a + notice placed by the copyright holder saying it can be distributed + under the terms of this License. The "Document", below, refers to + any such manual or work. Any member of the public is a licensee, + and is addressed as "you." + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter + section of the Document that deals exclusively with the + relationship of the publishers or authors of the Document to the + Document's overall subject (or to related matters) and contains + nothing that could fall directly within that overall subject. + (For example, if the Document is in part a textbook of + mathematics, a Secondary Section may not explain any mathematics.) + The relationship could be a matter of historical connection with + the subject or with related matters, or of legal, commercial, + philosophical, ethical or political position regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, whose contents can be viewed and edited directly + and straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup has been designed + to thwart or discourage subsequent modification by readers is not + Transparent. A copy that is not "Transparent" is called "Opaque." + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML designed for human modification. + Opaque formats include PostScript, PDF, proprietary formats that + can be read and edited only by proprietary word processors, SGML + or XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies of the Document numbering more than + 100, and the Document's license notice requires Cover Texts, you + must enclose the copies in covers that carry, clearly and legibly, + all these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a publicly-accessible + computer-network location containing a complete Transparent copy + of the Document, free of added material, which the general + network-using public has access to download anonymously at no + charge using public-standard network protocols. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that version + gives permission. + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in the + Modified Version, together with at least five of the principal + authors of the Document (all of its principal authors, if it + has less than five). + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + D. Preserve all the copyright notices of the Document. + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified Version + under the terms of this License, in the form shown in the + Addendum below. + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + H. Include an unaltered copy of this License. + I. Preserve the section entitled "History", and its title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. + If there is no section entitled "History" in the Document, + create one stating the title, year, authors, and publisher of + the Document as given on its Title Page, then add an item + describing the Modified Version as stated in the previous + sentence. + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + K. In any section entitled "Acknowledgements" or "Dedications", + preserve the section's title, and preserve in the section all the + substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. + M. Delete any section entitled "Endorsements." Such a section + may not be included in the Modified Version. + N. Do not retitle any existing section as "Endorsements" or to + conflict in title with any Invariant Section. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties-for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition + of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections entitled + "History" in the various original documents, forming one section + entitled "History"; likewise combine any sections entitled + "Acknowledgements", and any sections entitled "Dedications." You + must delete all sections entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, does not as a whole count as a + Modified Version of the Document, provided no compilation + copyright is claimed for the compilation. Such a compilation is + called an "aggregate", and this License does not apply to the + other self-contained works thus compiled with the Document, on + account of their being thus compiled, if they are not themselves + derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one + quarter of the entire aggregate, the Document's Cover Texts may be + placed on covers that surround only the Document within the + aggregate. Otherwise they must appear on covers around the whole + aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License provided that you also include the + original English version of this License. In case of a + disagreement between the translation and the original English + version of this License, the original English version will prevail. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + http://www.gnu.org/copyleft/. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + A copy of the license is included in the section entitled "GNU + Free Documentation License." + + If you have no Invariant Sections, write "with no Invariant Sections" +instead of saying which ones are invariant. If you have no Front-Cover +Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being +LIST"; likewise for Back-Cover Texts. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: bfd.info, Node: BFD Index, Prev: GNU Free Documentation License, Up: Top + +BFD Index +********* + +[index] +* Menu: + +* _bfd_final_link_relocate: Relocating the section contents. + (line 22) +* _bfd_generic_link_add_archive_symbols: Adding symbols from an archive. + (line 12) +* _bfd_generic_link_add_one_symbol: Adding symbols from an object file. + (line 19) +* _bfd_generic_make_empty_symbol: symbol handling functions. + (line 92) +* _bfd_link_add_symbols in target vector: Adding Symbols to the Hash Table. + (line 6) +* _bfd_link_final_link in target vector: Performing the Final Link. + (line 6) +* _bfd_link_hash_table_create in target vector: Creating a Linker Hash Table. + (line 6) +* _bfd_relocate_contents: Relocating the section contents. + (line 22) +* aout_SIZE_machine_type: aout. (line 147) +* aout_SIZE_mkobject: aout. (line 139) +* aout_SIZE_new_section_hook: aout. (line 177) +* aout_SIZE_set_arch_mach: aout. (line 164) +* aout_SIZE_some_aout_object_p: aout. (line 125) +* aout_SIZE_swap_exec_header_in: aout. (line 101) +* aout_SIZE_swap_exec_header_out: aout. (line 113) +* arelent_chain: typedef arelent. (line 339) +* BFD: Overview. (line 6) +* BFD canonical format: Canonical format. (line 11) +* bfd_alloc: Opening and Closing. + (line 210) +* bfd_alloc2: Opening and Closing. + (line 219) +* bfd_alt_mach_code: BFD front end. (line 602) +* bfd_arch_bits_per_address: Architectures. (line 490) +* bfd_arch_bits_per_byte: Architectures. (line 482) +* bfd_arch_get_compatible: Architectures. (line 425) +* bfd_arch_list: Architectures. (line 416) +* bfd_arch_mach_octets_per_byte: Architectures. (line 559) +* BFD_ARELOC_BFIN_ADD: howto manager. (line 944) +* BFD_ARELOC_BFIN_ADDR: howto manager. (line 995) +* BFD_ARELOC_BFIN_AND: howto manager. (line 965) +* BFD_ARELOC_BFIN_COMP: howto manager. (line 986) +* BFD_ARELOC_BFIN_CONST: howto manager. (line 941) +* BFD_ARELOC_BFIN_DIV: howto manager. (line 953) +* BFD_ARELOC_BFIN_HWPAGE: howto manager. (line 992) +* BFD_ARELOC_BFIN_LAND: howto manager. (line 974) +* BFD_ARELOC_BFIN_LEN: howto manager. (line 980) +* BFD_ARELOC_BFIN_LOR: howto manager. (line 977) +* BFD_ARELOC_BFIN_LSHIFT: howto manager. (line 959) +* BFD_ARELOC_BFIN_MOD: howto manager. (line 956) +* BFD_ARELOC_BFIN_MULT: howto manager. (line 950) +* BFD_ARELOC_BFIN_NEG: howto manager. (line 983) +* BFD_ARELOC_BFIN_OR: howto manager. (line 968) +* BFD_ARELOC_BFIN_PAGE: howto manager. (line 989) +* BFD_ARELOC_BFIN_PUSH: howto manager. (line 938) +* BFD_ARELOC_BFIN_RSHIFT: howto manager. (line 962) +* BFD_ARELOC_BFIN_SUB: howto manager. (line 947) +* BFD_ARELOC_BFIN_XOR: howto manager. (line 971) +* bfd_cache_close: File Caching. (line 26) +* bfd_cache_close_all: File Caching. (line 39) +* bfd_cache_init: File Caching. (line 18) +* bfd_calc_gnu_debuglink_crc32: Opening and Closing. + (line 246) +* bfd_canonicalize_reloc: BFD front end. (line 321) +* bfd_canonicalize_symtab: symbol handling functions. + (line 50) +* bfd_check_format: Formats. (line 21) +* bfd_check_format_matches: Formats. (line 52) +* bfd_check_overflow: typedef arelent. (line 351) +* bfd_close: Opening and Closing. + (line 135) +* bfd_close_all_done: Opening and Closing. + (line 153) +* bfd_coff_backend_data: coff. (line 246) +* bfd_copy_private_bfd_data: BFD front end. (line 460) +* bfd_copy_private_header_data: BFD front end. (line 442) +* bfd_copy_private_section_data: section prototypes. (line 255) +* bfd_copy_private_symbol_data: symbol handling functions. + (line 140) +* bfd_core_file_failing_command: Core Files. (line 12) +* bfd_core_file_failing_signal: Core Files. (line 21) +* bfd_create: Opening and Closing. + (line 172) +* bfd_create_gnu_debuglink_section: Opening and Closing. + (line 312) +* bfd_decode_symclass: symbol handling functions. + (line 111) +* bfd_default_arch_struct: Architectures. (line 437) +* bfd_default_compatible: Architectures. (line 499) +* bfd_default_reloc_type_lookup: howto manager. (line 2081) +* bfd_default_scan: Architectures. (line 508) +* bfd_default_set_arch_mach: Architectures. (line 455) +* bfd_demangle: BFD front end. (line 700) +* bfd_elf_find_section: elf. (line 13) +* bfd_emul_get_commonpagesize: BFD front end. (line 680) +* bfd_emul_get_maxpagesize: BFD front end. (line 660) +* bfd_emul_set_commonpagesize: BFD front end. (line 691) +* bfd_emul_set_maxpagesize: BFD front end. (line 671) +* bfd_errmsg: BFD front end. (line 246) +* bfd_fdopenr: Opening and Closing. + (line 46) +* bfd_fill_in_gnu_debuglink_section: Opening and Closing. + (line 326) +* bfd_find_target: bfd_target. (line 439) +* bfd_follow_gnu_debuglink: Opening and Closing. + (line 291) +* bfd_fopen: Opening and Closing. + (line 9) +* bfd_format_string: Formats. (line 79) +* bfd_generic_discard_group: section prototypes. (line 281) +* bfd_generic_gc_sections: howto manager. (line 2112) +* bfd_generic_get_relocated_section_contents: howto manager. (line 2132) +* bfd_generic_is_group_section: section prototypes. (line 273) +* bfd_generic_merge_sections: howto manager. (line 2122) +* bfd_generic_relax_section: howto manager. (line 2099) +* bfd_get_arch: Architectures. (line 466) +* bfd_get_arch_info: Architectures. (line 518) +* bfd_get_arch_size: BFD front end. (line 365) +* bfd_get_error: BFD front end. (line 227) +* bfd_get_error_handler: BFD front end. (line 297) +* bfd_get_gp_size: BFD front end. (line 406) +* bfd_get_mach: Architectures. (line 474) +* bfd_get_mtime: BFD front end. (line 741) +* bfd_get_next_mapent: Archives. (line 52) +* bfd_get_reloc_code_name: howto manager. (line 2090) +* bfd_get_reloc_size: typedef arelent. (line 330) +* bfd_get_reloc_upper_bound: BFD front end. (line 311) +* bfd_get_section_by_name: section prototypes. (line 17) +* bfd_get_section_by_name_if: section prototypes. (line 31) +* bfd_get_section_contents: section prototypes. (line 228) +* bfd_get_sign_extend_vma: BFD front end. (line 378) +* bfd_get_size <1>: Internal. (line 25) +* bfd_get_size: BFD front end. (line 750) +* bfd_get_symtab_upper_bound: symbol handling functions. + (line 6) +* bfd_get_unique_section_name: section prototypes. (line 50) +* bfd_h_put_size: Internal. (line 97) +* bfd_hash_allocate: Creating and Freeing a Hash Table. + (line 17) +* bfd_hash_lookup: Looking Up or Entering a String. + (line 6) +* bfd_hash_newfunc: Creating and Freeing a Hash Table. + (line 12) +* bfd_hash_set_default_size: Creating and Freeing a Hash Table. + (line 25) +* bfd_hash_table_free: Creating and Freeing a Hash Table. + (line 21) +* bfd_hash_table_init: Creating and Freeing a Hash Table. + (line 6) +* bfd_hash_table_init_n: Creating and Freeing a Hash Table. + (line 6) +* bfd_hash_traverse: Traversing a Hash Table. + (line 6) +* bfd_init: Initialization. (line 11) +* bfd_install_relocation: typedef arelent. (line 392) +* bfd_is_local_label: symbol handling functions. + (line 17) +* bfd_is_local_label_name: symbol handling functions. + (line 26) +* bfd_is_target_special_symbol: symbol handling functions. + (line 38) +* bfd_is_undefined_symclass: symbol handling functions. + (line 120) +* bfd_link_split_section: Writing the symbol table. + (line 44) +* bfd_log2: Internal. (line 164) +* bfd_lookup_arch: Architectures. (line 526) +* bfd_make_debug_symbol: symbol handling functions. + (line 102) +* bfd_make_empty_symbol: symbol handling functions. + (line 78) +* bfd_make_readable: Opening and Closing. + (line 196) +* bfd_make_section: section prototypes. (line 129) +* bfd_make_section_anyway: section prototypes. (line 100) +* bfd_make_section_anyway_with_flags: section prototypes. (line 82) +* bfd_make_section_old_way: section prototypes. (line 62) +* bfd_make_section_with_flags: section prototypes. (line 116) +* bfd_make_writable: Opening and Closing. + (line 182) +* bfd_malloc_and_get_section: section prototypes. (line 245) +* bfd_map_over_sections: section prototypes. (line 155) +* bfd_merge_private_bfd_data: BFD front end. (line 476) +* bfd_octets_per_byte: Architectures. (line 549) +* bfd_open_file: File Caching. (line 52) +* bfd_openr: Opening and Closing. + (line 30) +* bfd_openr_iovec: Opening and Closing. + (line 76) +* bfd_openr_next_archived_file: Archives. (line 78) +* bfd_openstreamr: Opening and Closing. + (line 67) +* bfd_openw: Opening and Closing. + (line 123) +* bfd_perform_relocation: typedef arelent. (line 367) +* bfd_perror: BFD front end. (line 255) +* bfd_preserve_finish: BFD front end. (line 650) +* bfd_preserve_restore: BFD front end. (line 640) +* bfd_preserve_save: BFD front end. (line 624) +* bfd_print_symbol_vandf: symbol handling functions. + (line 70) +* bfd_printable_arch_mach: Architectures. (line 537) +* bfd_printable_name: Architectures. (line 397) +* bfd_put_size: Internal. (line 22) +* BFD_RELOC_12_PCREL: howto manager. (line 39) +* BFD_RELOC_14: howto manager. (line 31) +* BFD_RELOC_16: howto manager. (line 30) +* BFD_RELOC_16_BASEREL: howto manager. (line 80) +* BFD_RELOC_16_GOT_PCREL: howto manager. (line 52) +* BFD_RELOC_16_GOTOFF: howto manager. (line 55) +* BFD_RELOC_16_PCREL: howto manager. (line 38) +* BFD_RELOC_16_PCREL_S2: howto manager. (line 92) +* BFD_RELOC_16_PLT_PCREL: howto manager. (line 63) +* BFD_RELOC_16_PLTOFF: howto manager. (line 67) +* BFD_RELOC_16C_ABS20: howto manager. (line 1771) +* BFD_RELOC_16C_ABS20_C: howto manager. (line 1772) +* BFD_RELOC_16C_ABS24: howto manager. (line 1773) +* BFD_RELOC_16C_ABS24_C: howto manager. (line 1774) +* BFD_RELOC_16C_DISP04: howto manager. (line 1751) +* BFD_RELOC_16C_DISP04_C: howto manager. (line 1752) +* BFD_RELOC_16C_DISP08: howto manager. (line 1753) +* BFD_RELOC_16C_DISP08_C: howto manager. (line 1754) +* BFD_RELOC_16C_DISP16: howto manager. (line 1755) +* BFD_RELOC_16C_DISP16_C: howto manager. (line 1756) +* BFD_RELOC_16C_DISP24: howto manager. (line 1757) +* BFD_RELOC_16C_DISP24_C: howto manager. (line 1758) +* BFD_RELOC_16C_DISP24a: howto manager. (line 1759) +* BFD_RELOC_16C_DISP24a_C: howto manager. (line 1760) +* BFD_RELOC_16C_IMM04: howto manager. (line 1775) +* BFD_RELOC_16C_IMM04_C: howto manager. (line 1776) +* BFD_RELOC_16C_IMM16: howto manager. (line 1777) +* BFD_RELOC_16C_IMM16_C: howto manager. (line 1778) +* BFD_RELOC_16C_IMM20: howto manager. (line 1779) +* BFD_RELOC_16C_IMM20_C: howto manager. (line 1780) +* BFD_RELOC_16C_IMM24: howto manager. (line 1781) +* BFD_RELOC_16C_IMM24_C: howto manager. (line 1782) +* BFD_RELOC_16C_IMM32: howto manager. (line 1783) +* BFD_RELOC_16C_IMM32_C: howto manager. (line 1784) +* BFD_RELOC_16C_NUM08: howto manager. (line 1745) +* BFD_RELOC_16C_NUM08_C: howto manager. (line 1746) +* BFD_RELOC_16C_NUM16: howto manager. (line 1747) +* BFD_RELOC_16C_NUM16_C: howto manager. (line 1748) +* BFD_RELOC_16C_NUM32: howto manager. (line 1749) +* BFD_RELOC_16C_NUM32_C: howto manager. (line 1750) +* BFD_RELOC_16C_REG04: howto manager. (line 1761) +* BFD_RELOC_16C_REG04_C: howto manager. (line 1762) +* BFD_RELOC_16C_REG04a: howto manager. (line 1763) +* BFD_RELOC_16C_REG04a_C: howto manager. (line 1764) +* BFD_RELOC_16C_REG14: howto manager. (line 1765) +* BFD_RELOC_16C_REG14_C: howto manager. (line 1766) +* BFD_RELOC_16C_REG16: howto manager. (line 1767) +* BFD_RELOC_16C_REG16_C: howto manager. (line 1768) +* BFD_RELOC_16C_REG20: howto manager. (line 1769) +* BFD_RELOC_16C_REG20_C: howto manager. (line 1770) +* BFD_RELOC_23_PCREL_S2: howto manager. (line 93) +* BFD_RELOC_24: howto manager. (line 29) +* BFD_RELOC_24_PCREL: howto manager. (line 37) +* BFD_RELOC_24_PLT_PCREL: howto manager. (line 62) +* BFD_RELOC_26: howto manager. (line 28) +* BFD_RELOC_32: howto manager. (line 27) +* BFD_RELOC_32_BASEREL: howto manager. (line 79) +* BFD_RELOC_32_GOT_PCREL: howto manager. (line 51) +* BFD_RELOC_32_GOTOFF: howto manager. (line 54) +* BFD_RELOC_32_PCREL: howto manager. (line 36) +* BFD_RELOC_32_PCREL_S2: howto manager. (line 91) +* BFD_RELOC_32_PLT_PCREL: howto manager. (line 61) +* BFD_RELOC_32_PLTOFF: howto manager. (line 66) +* BFD_RELOC_32_SECREL: howto manager. (line 48) +* BFD_RELOC_386_COPY: howto manager. (line 451) +* BFD_RELOC_386_GLOB_DAT: howto manager. (line 452) +* BFD_RELOC_386_GOT32: howto manager. (line 449) +* BFD_RELOC_386_GOTOFF: howto manager. (line 455) +* BFD_RELOC_386_GOTPC: howto manager. (line 456) +* BFD_RELOC_386_JUMP_SLOT: howto manager. (line 453) +* BFD_RELOC_386_PLT32: howto manager. (line 450) +* BFD_RELOC_386_RELATIVE: howto manager. (line 454) +* BFD_RELOC_386_TLS_DESC: howto manager. (line 471) +* BFD_RELOC_386_TLS_DESC_CALL: howto manager. (line 470) +* BFD_RELOC_386_TLS_DTPMOD32: howto manager. (line 466) +* BFD_RELOC_386_TLS_DTPOFF32: howto manager. (line 467) +* BFD_RELOC_386_TLS_GD: howto manager. (line 461) +* BFD_RELOC_386_TLS_GOTDESC: howto manager. (line 469) +* BFD_RELOC_386_TLS_GOTIE: howto manager. (line 459) +* BFD_RELOC_386_TLS_IE: howto manager. (line 458) +* BFD_RELOC_386_TLS_IE_32: howto manager. (line 464) +* BFD_RELOC_386_TLS_LDM: howto manager. (line 462) +* BFD_RELOC_386_TLS_LDO_32: howto manager. (line 463) +* BFD_RELOC_386_TLS_LE: howto manager. (line 460) +* BFD_RELOC_386_TLS_LE_32: howto manager. (line 465) +* BFD_RELOC_386_TLS_TPOFF: howto manager. (line 457) +* BFD_RELOC_386_TLS_TPOFF32: howto manager. (line 468) +* BFD_RELOC_390_12: howto manager. (line 1437) +* BFD_RELOC_390_20: howto manager. (line 1537) +* BFD_RELOC_390_COPY: howto manager. (line 1446) +* BFD_RELOC_390_GLOB_DAT: howto manager. (line 1449) +* BFD_RELOC_390_GOT12: howto manager. (line 1440) +* BFD_RELOC_390_GOT16: howto manager. (line 1461) +* BFD_RELOC_390_GOT20: howto manager. (line 1538) +* BFD_RELOC_390_GOT64: howto manager. (line 1479) +* BFD_RELOC_390_GOTENT: howto manager. (line 1485) +* BFD_RELOC_390_GOTOFF64: howto manager. (line 1488) +* BFD_RELOC_390_GOTPC: howto manager. (line 1458) +* BFD_RELOC_390_GOTPCDBL: howto manager. (line 1476) +* BFD_RELOC_390_GOTPLT12: howto manager. (line 1491) +* BFD_RELOC_390_GOTPLT16: howto manager. (line 1494) +* BFD_RELOC_390_GOTPLT20: howto manager. (line 1539) +* BFD_RELOC_390_GOTPLT32: howto manager. (line 1497) +* BFD_RELOC_390_GOTPLT64: howto manager. (line 1500) +* BFD_RELOC_390_GOTPLTENT: howto manager. (line 1503) +* BFD_RELOC_390_JMP_SLOT: howto manager. (line 1452) +* BFD_RELOC_390_PC16DBL: howto manager. (line 1464) +* BFD_RELOC_390_PC32DBL: howto manager. (line 1470) +* BFD_RELOC_390_PLT16DBL: howto manager. (line 1467) +* BFD_RELOC_390_PLT32: howto manager. (line 1443) +* BFD_RELOC_390_PLT32DBL: howto manager. (line 1473) +* BFD_RELOC_390_PLT64: howto manager. (line 1482) +* BFD_RELOC_390_PLTOFF16: howto manager. (line 1506) +* BFD_RELOC_390_PLTOFF32: howto manager. (line 1509) +* BFD_RELOC_390_PLTOFF64: howto manager. (line 1512) +* BFD_RELOC_390_RELATIVE: howto manager. (line 1455) +* BFD_RELOC_390_TLS_DTPMOD: howto manager. (line 1532) +* BFD_RELOC_390_TLS_DTPOFF: howto manager. (line 1533) +* BFD_RELOC_390_TLS_GD32: howto manager. (line 1518) +* BFD_RELOC_390_TLS_GD64: howto manager. (line 1519) +* BFD_RELOC_390_TLS_GDCALL: howto manager. (line 1516) +* BFD_RELOC_390_TLS_GOTIE12: howto manager. (line 1520) +* BFD_RELOC_390_TLS_GOTIE20: howto manager. (line 1540) +* BFD_RELOC_390_TLS_GOTIE32: howto manager. (line 1521) +* BFD_RELOC_390_TLS_GOTIE64: howto manager. (line 1522) +* BFD_RELOC_390_TLS_IE32: howto manager. (line 1525) +* BFD_RELOC_390_TLS_IE64: howto manager. (line 1526) +* BFD_RELOC_390_TLS_IEENT: howto manager. (line 1527) +* BFD_RELOC_390_TLS_LDCALL: howto manager. (line 1517) +* BFD_RELOC_390_TLS_LDM32: howto manager. (line 1523) +* BFD_RELOC_390_TLS_LDM64: howto manager. (line 1524) +* BFD_RELOC_390_TLS_LDO32: howto manager. (line 1530) +* BFD_RELOC_390_TLS_LDO64: howto manager. (line 1531) +* BFD_RELOC_390_TLS_LE32: howto manager. (line 1528) +* BFD_RELOC_390_TLS_LE64: howto manager. (line 1529) +* BFD_RELOC_390_TLS_LOAD: howto manager. (line 1515) +* BFD_RELOC_390_TLS_TPOFF: howto manager. (line 1534) +* BFD_RELOC_64: howto manager. (line 26) +* BFD_RELOC_64_PCREL: howto manager. (line 35) +* BFD_RELOC_64_PLT_PCREL: howto manager. (line 60) +* BFD_RELOC_64_PLTOFF: howto manager. (line 65) +* BFD_RELOC_68K_GLOB_DAT: howto manager. (line 74) +* BFD_RELOC_68K_JMP_SLOT: howto manager. (line 75) +* BFD_RELOC_68K_RELATIVE: howto manager. (line 76) +* BFD_RELOC_8: howto manager. (line 32) +* BFD_RELOC_860_COPY: howto manager. (line 1879) +* BFD_RELOC_860_GLOB_DAT: howto manager. (line 1880) +* BFD_RELOC_860_HAGOT: howto manager. (line 1905) +* BFD_RELOC_860_HAGOTOFF: howto manager. (line 1906) +* BFD_RELOC_860_HAPC: howto manager. (line 1907) +* BFD_RELOC_860_HIGH: howto manager. (line 1908) +* BFD_RELOC_860_HIGHADJ: howto manager. (line 1904) +* BFD_RELOC_860_HIGOT: howto manager. (line 1909) +* BFD_RELOC_860_HIGOTOFF: howto manager. (line 1910) +* BFD_RELOC_860_JUMP_SLOT: howto manager. (line 1881) +* BFD_RELOC_860_LOGOT0: howto manager. (line 1893) +* BFD_RELOC_860_LOGOT1: howto manager. (line 1895) +* BFD_RELOC_860_LOGOTOFF0: howto manager. (line 1897) +* BFD_RELOC_860_LOGOTOFF1: howto manager. (line 1899) +* BFD_RELOC_860_LOGOTOFF2: howto manager. (line 1901) +* BFD_RELOC_860_LOGOTOFF3: howto manager. (line 1902) +* BFD_RELOC_860_LOPC: howto manager. (line 1903) +* BFD_RELOC_860_LOW0: howto manager. (line 1886) +* BFD_RELOC_860_LOW1: howto manager. (line 1888) +* BFD_RELOC_860_LOW2: howto manager. (line 1890) +* BFD_RELOC_860_LOW3: howto manager. (line 1892) +* BFD_RELOC_860_PC16: howto manager. (line 1885) +* BFD_RELOC_860_PC26: howto manager. (line 1883) +* BFD_RELOC_860_PLT26: howto manager. (line 1884) +* BFD_RELOC_860_RELATIVE: howto manager. (line 1882) +* BFD_RELOC_860_SPGOT0: howto manager. (line 1894) +* BFD_RELOC_860_SPGOT1: howto manager. (line 1896) +* BFD_RELOC_860_SPGOTOFF0: howto manager. (line 1898) +* BFD_RELOC_860_SPGOTOFF1: howto manager. (line 1900) +* BFD_RELOC_860_SPLIT0: howto manager. (line 1887) +* BFD_RELOC_860_SPLIT1: howto manager. (line 1889) +* BFD_RELOC_860_SPLIT2: howto manager. (line 1891) +* BFD_RELOC_8_BASEREL: howto manager. (line 84) +* BFD_RELOC_8_FFnn: howto manager. (line 88) +* BFD_RELOC_8_GOT_PCREL: howto manager. (line 53) +* BFD_RELOC_8_GOTOFF: howto manager. (line 59) +* BFD_RELOC_8_PCREL: howto manager. (line 40) +* BFD_RELOC_8_PLT_PCREL: howto manager. (line 64) +* BFD_RELOC_8_PLTOFF: howto manager. (line 71) +* BFD_RELOC_ALPHA_BRSGP: howto manager. (line 275) +* BFD_RELOC_ALPHA_CODEADDR: howto manager. (line 266) +* BFD_RELOC_ALPHA_DTPMOD64: howto manager. (line 282) +* BFD_RELOC_ALPHA_DTPREL16: howto manager. (line 287) +* BFD_RELOC_ALPHA_DTPREL64: howto manager. (line 284) +* BFD_RELOC_ALPHA_DTPREL_HI16: howto manager. (line 285) +* BFD_RELOC_ALPHA_DTPREL_LO16: howto manager. (line 286) +* BFD_RELOC_ALPHA_ELF_LITERAL: howto manager. (line 231) +* BFD_RELOC_ALPHA_GOTDTPREL16: howto manager. (line 283) +* BFD_RELOC_ALPHA_GOTTPREL16: howto manager. (line 288) +* BFD_RELOC_ALPHA_GPDISP: howto manager. (line 225) +* BFD_RELOC_ALPHA_GPDISP_HI16: howto manager. (line 211) +* BFD_RELOC_ALPHA_GPDISP_LO16: howto manager. (line 219) +* BFD_RELOC_ALPHA_GPREL_HI16: howto manager. (line 270) +* BFD_RELOC_ALPHA_GPREL_LO16: howto manager. (line 271) +* BFD_RELOC_ALPHA_HINT: howto manager. (line 257) +* BFD_RELOC_ALPHA_LINKAGE: howto manager. (line 262) +* BFD_RELOC_ALPHA_LITERAL: howto manager. (line 230) +* BFD_RELOC_ALPHA_LITUSE: howto manager. (line 232) +* BFD_RELOC_ALPHA_TLSGD: howto manager. (line 280) +* BFD_RELOC_ALPHA_TLSLDM: howto manager. (line 281) +* BFD_RELOC_ALPHA_TPREL16: howto manager. (line 292) +* BFD_RELOC_ALPHA_TPREL64: howto manager. (line 289) +* BFD_RELOC_ALPHA_TPREL_HI16: howto manager. (line 290) +* BFD_RELOC_ALPHA_TPREL_LO16: howto manager. (line 291) +* BFD_RELOC_ARC_B22_PCREL: howto manager. (line 873) +* BFD_RELOC_ARC_B26: howto manager. (line 878) +* BFD_RELOC_ARM_ADR_IMM: howto manager. (line 766) +* BFD_RELOC_ARM_ADRL_IMMEDIATE: howto manager. (line 753) +* BFD_RELOC_ARM_ALU_PC_G0: howto manager. (line 723) +* BFD_RELOC_ARM_ALU_PC_G0_NC: howto manager. (line 722) +* BFD_RELOC_ARM_ALU_PC_G1: howto manager. (line 725) +* BFD_RELOC_ARM_ALU_PC_G1_NC: howto manager. (line 724) +* BFD_RELOC_ARM_ALU_PC_G2: howto manager. (line 726) +* BFD_RELOC_ARM_ALU_SB_G0: howto manager. (line 737) +* BFD_RELOC_ARM_ALU_SB_G0_NC: howto manager. (line 736) +* BFD_RELOC_ARM_ALU_SB_G1: howto manager. (line 739) +* BFD_RELOC_ARM_ALU_SB_G1_NC: howto manager. (line 738) +* BFD_RELOC_ARM_ALU_SB_G2: howto manager. (line 740) +* BFD_RELOC_ARM_CP_OFF_IMM: howto manager. (line 762) +* BFD_RELOC_ARM_CP_OFF_IMM_S2: howto manager. (line 763) +* BFD_RELOC_ARM_GLOB_DAT: howto manager. (line 704) +* BFD_RELOC_ARM_GOT32: howto manager. (line 705) +* BFD_RELOC_ARM_GOTOFF: howto manager. (line 708) +* BFD_RELOC_ARM_GOTPC: howto manager. (line 709) +* BFD_RELOC_ARM_HWLITERAL: howto manager. (line 773) +* BFD_RELOC_ARM_IMMEDIATE: howto manager. (line 752) +* BFD_RELOC_ARM_IN_POOL: howto manager. (line 769) +* BFD_RELOC_ARM_JUMP_SLOT: howto manager. (line 703) +* BFD_RELOC_ARM_LDC_PC_G0: howto manager. (line 733) +* BFD_RELOC_ARM_LDC_PC_G1: howto manager. (line 734) +* BFD_RELOC_ARM_LDC_PC_G2: howto manager. (line 735) +* BFD_RELOC_ARM_LDC_SB_G0: howto manager. (line 747) +* BFD_RELOC_ARM_LDC_SB_G1: howto manager. (line 748) +* BFD_RELOC_ARM_LDC_SB_G2: howto manager. (line 749) +* BFD_RELOC_ARM_LDR_IMM: howto manager. (line 767) +* BFD_RELOC_ARM_LDR_PC_G0: howto manager. (line 727) +* BFD_RELOC_ARM_LDR_PC_G1: howto manager. (line 728) +* BFD_RELOC_ARM_LDR_PC_G2: howto manager. (line 729) +* BFD_RELOC_ARM_LDR_SB_G0: howto manager. (line 741) +* BFD_RELOC_ARM_LDR_SB_G1: howto manager. (line 742) +* BFD_RELOC_ARM_LDR_SB_G2: howto manager. (line 743) +* BFD_RELOC_ARM_LDRS_PC_G0: howto manager. (line 730) +* BFD_RELOC_ARM_LDRS_PC_G1: howto manager. (line 731) +* BFD_RELOC_ARM_LDRS_PC_G2: howto manager. (line 732) +* BFD_RELOC_ARM_LDRS_SB_G0: howto manager. (line 744) +* BFD_RELOC_ARM_LDRS_SB_G1: howto manager. (line 745) +* BFD_RELOC_ARM_LDRS_SB_G2: howto manager. (line 746) +* BFD_RELOC_ARM_LITERAL: howto manager. (line 768) +* BFD_RELOC_ARM_MOVT: howto manager. (line 694) +* BFD_RELOC_ARM_MOVT_PCREL: howto manager. (line 696) +* BFD_RELOC_ARM_MOVW: howto manager. (line 693) +* BFD_RELOC_ARM_MOVW_PCREL: howto manager. (line 695) +* BFD_RELOC_ARM_MULTI: howto manager. (line 761) +* BFD_RELOC_ARM_OFFSET_IMM: howto manager. (line 667) +* BFD_RELOC_ARM_OFFSET_IMM8: howto manager. (line 770) +* BFD_RELOC_ARM_PCREL_BLX: howto manager. (line 638) +* BFD_RELOC_ARM_PCREL_BRANCH: howto manager. (line 634) +* BFD_RELOC_ARM_PCREL_CALL: howto manager. (line 648) +* BFD_RELOC_ARM_PCREL_JUMP: howto manager. (line 652) +* BFD_RELOC_ARM_PLT32: howto manager. (line 706) +* BFD_RELOC_ARM_PREL31: howto manager. (line 690) +* BFD_RELOC_ARM_RELATIVE: howto manager. (line 707) +* BFD_RELOC_ARM_ROSEGREL32: howto manager. (line 679) +* BFD_RELOC_ARM_SBREL32: howto manager. (line 682) +* BFD_RELOC_ARM_SHIFT_IMM: howto manager. (line 758) +* BFD_RELOC_ARM_SMC: howto manager. (line 759) +* BFD_RELOC_ARM_SWI: howto manager. (line 760) +* BFD_RELOC_ARM_T32_ADD_IMM: howto manager. (line 755) +* BFD_RELOC_ARM_T32_ADD_PC12: howto manager. (line 757) +* BFD_RELOC_ARM_T32_CP_OFF_IMM: howto manager. (line 764) +* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2: howto manager. (line 765) +* BFD_RELOC_ARM_T32_IMM12: howto manager. (line 756) +* BFD_RELOC_ARM_T32_IMMEDIATE: howto manager. (line 754) +* BFD_RELOC_ARM_T32_OFFSET_IMM: howto manager. (line 772) +* BFD_RELOC_ARM_T32_OFFSET_U8: howto manager. (line 771) +* BFD_RELOC_ARM_TARGET1: howto manager. (line 675) +* BFD_RELOC_ARM_TARGET2: howto manager. (line 685) +* BFD_RELOC_ARM_THUMB_ADD: howto manager. (line 774) +* BFD_RELOC_ARM_THUMB_IMM: howto manager. (line 775) +* BFD_RELOC_ARM_THUMB_MOVT: howto manager. (line 698) +* BFD_RELOC_ARM_THUMB_MOVT_PCREL: howto manager. (line 700) +* BFD_RELOC_ARM_THUMB_MOVW: howto manager. (line 697) +* BFD_RELOC_ARM_THUMB_MOVW_PCREL: howto manager. (line 699) +* BFD_RELOC_ARM_THUMB_OFFSET: howto manager. (line 671) +* BFD_RELOC_ARM_THUMB_SHIFT: howto manager. (line 776) +* BFD_RELOC_ARM_TLS_DTPMOD32: howto manager. (line 716) +* BFD_RELOC_ARM_TLS_DTPOFF32: howto manager. (line 715) +* BFD_RELOC_ARM_TLS_GD32: howto manager. (line 712) +* BFD_RELOC_ARM_TLS_IE32: howto manager. (line 718) +* BFD_RELOC_ARM_TLS_LDM32: howto manager. (line 714) +* BFD_RELOC_ARM_TLS_LDO32: howto manager. (line 713) +* BFD_RELOC_ARM_TLS_LE32: howto manager. (line 719) +* BFD_RELOC_ARM_TLS_TPOFF32: howto manager. (line 717) +* BFD_RELOC_AVR_13_PCREL: howto manager. (line 1338) +* BFD_RELOC_AVR_16_PM: howto manager. (line 1342) +* BFD_RELOC_AVR_6: howto manager. (line 1429) +* BFD_RELOC_AVR_6_ADIW: howto manager. (line 1433) +* BFD_RELOC_AVR_7_PCREL: howto manager. (line 1334) +* BFD_RELOC_AVR_CALL: howto manager. (line 1421) +* BFD_RELOC_AVR_HH8_LDI: howto manager. (line 1354) +* BFD_RELOC_AVR_HH8_LDI_NEG: howto manager. (line 1373) +* BFD_RELOC_AVR_HH8_LDI_PM: howto manager. (line 1402) +* BFD_RELOC_AVR_HH8_LDI_PM_NEG: howto manager. (line 1416) +* BFD_RELOC_AVR_HI8_LDI: howto manager. (line 1350) +* BFD_RELOC_AVR_HI8_LDI_GS: howto manager. (line 1396) +* BFD_RELOC_AVR_HI8_LDI_NEG: howto manager. (line 1368) +* BFD_RELOC_AVR_HI8_LDI_PM: howto manager. (line 1392) +* BFD_RELOC_AVR_HI8_LDI_PM_NEG: howto manager. (line 1411) +* BFD_RELOC_AVR_LDI: howto manager. (line 1425) +* BFD_RELOC_AVR_LO8_LDI: howto manager. (line 1346) +* BFD_RELOC_AVR_LO8_LDI_GS: howto manager. (line 1386) +* BFD_RELOC_AVR_LO8_LDI_NEG: howto manager. (line 1363) +* BFD_RELOC_AVR_LO8_LDI_PM: howto manager. (line 1382) +* BFD_RELOC_AVR_LO8_LDI_PM_NEG: howto manager. (line 1407) +* BFD_RELOC_AVR_MS8_LDI: howto manager. (line 1359) +* BFD_RELOC_AVR_MS8_LDI_NEG: howto manager. (line 1378) +* BFD_RELOC_BFIN_10_PCREL: howto manager. (line 898) +* BFD_RELOC_BFIN_11_PCREL: howto manager. (line 901) +* BFD_RELOC_BFIN_12_PCREL_JUMP: howto manager. (line 904) +* BFD_RELOC_BFIN_12_PCREL_JUMP_S: howto manager. (line 907) +* BFD_RELOC_BFIN_16_HIGH: howto manager. (line 886) +* BFD_RELOC_BFIN_16_IMM: howto manager. (line 883) +* BFD_RELOC_BFIN_16_LOW: howto manager. (line 895) +* BFD_RELOC_BFIN_24_PCREL_CALL_X: howto manager. (line 910) +* BFD_RELOC_BFIN_24_PCREL_JUMP_L: howto manager. (line 913) +* BFD_RELOC_BFIN_4_PCREL: howto manager. (line 889) +* BFD_RELOC_BFIN_5_PCREL: howto manager. (line 892) +* BFD_RELOC_BFIN_FUNCDESC: howto manager. (line 919) +* BFD_RELOC_BFIN_FUNCDESC_GOT17M4: howto manager. (line 920) +* BFD_RELOC_BFIN_FUNCDESC_GOTHI: howto manager. (line 921) +* BFD_RELOC_BFIN_FUNCDESC_GOTLO: howto manager. (line 922) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4: howto manager. (line 924) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI: howto manager. (line 925) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO: howto manager. (line 926) +* BFD_RELOC_BFIN_FUNCDESC_VALUE: howto manager. (line 923) +* BFD_RELOC_BFIN_GOT: howto manager. (line 932) +* BFD_RELOC_BFIN_GOT17M4: howto manager. (line 916) +* BFD_RELOC_BFIN_GOTHI: howto manager. (line 917) +* BFD_RELOC_BFIN_GOTLO: howto manager. (line 918) +* BFD_RELOC_BFIN_GOTOFF17M4: howto manager. (line 927) +* BFD_RELOC_BFIN_GOTOFFHI: howto manager. (line 928) +* BFD_RELOC_BFIN_GOTOFFLO: howto manager. (line 929) +* BFD_RELOC_BFIN_PLTPC: howto manager. (line 935) +* bfd_reloc_code_type: howto manager. (line 10) +* BFD_RELOC_CR16_ABS20: howto manager. (line 1799) +* BFD_RELOC_CR16_ABS24: howto manager. (line 1800) +* BFD_RELOC_CR16_DISP16: howto manager. (line 1810) +* BFD_RELOC_CR16_DISP20: howto manager. (line 1811) +* BFD_RELOC_CR16_DISP24: howto manager. (line 1812) +* BFD_RELOC_CR16_DISP24a: howto manager. (line 1813) +* BFD_RELOC_CR16_DISP4: howto manager. (line 1808) +* BFD_RELOC_CR16_DISP8: howto manager. (line 1809) +* BFD_RELOC_CR16_IMM16: howto manager. (line 1803) +* BFD_RELOC_CR16_IMM20: howto manager. (line 1804) +* BFD_RELOC_CR16_IMM24: howto manager. (line 1805) +* BFD_RELOC_CR16_IMM32: howto manager. (line 1806) +* BFD_RELOC_CR16_IMM32a: howto manager. (line 1807) +* BFD_RELOC_CR16_IMM4: howto manager. (line 1801) +* BFD_RELOC_CR16_IMM8: howto manager. (line 1802) +* BFD_RELOC_CR16_NUM16: howto manager. (line 1788) +* BFD_RELOC_CR16_NUM32: howto manager. (line 1789) +* BFD_RELOC_CR16_NUM32a: howto manager. (line 1790) +* BFD_RELOC_CR16_NUM8: howto manager. (line 1787) +* BFD_RELOC_CR16_REGREL0: howto manager. (line 1791) +* BFD_RELOC_CR16_REGREL14: howto manager. (line 1794) +* BFD_RELOC_CR16_REGREL14a: howto manager. (line 1795) +* BFD_RELOC_CR16_REGREL16: howto manager. (line 1796) +* BFD_RELOC_CR16_REGREL20: howto manager. (line 1797) +* BFD_RELOC_CR16_REGREL20a: howto manager. (line 1798) +* BFD_RELOC_CR16_REGREL4: howto manager. (line 1792) +* BFD_RELOC_CR16_REGREL4a: howto manager. (line 1793) +* BFD_RELOC_CRIS_16_GOT: howto manager. (line 1860) +* BFD_RELOC_CRIS_16_GOTPLT: howto manager. (line 1866) +* BFD_RELOC_CRIS_32_GOT: howto manager. (line 1857) +* BFD_RELOC_CRIS_32_GOTPLT: howto manager. (line 1863) +* BFD_RELOC_CRIS_32_GOTREL: howto manager. (line 1869) +* BFD_RELOC_CRIS_32_PLT_GOTREL: howto manager. (line 1872) +* BFD_RELOC_CRIS_32_PLT_PCREL: howto manager. (line 1875) +* BFD_RELOC_CRIS_BDISP8: howto manager. (line 1838) +* BFD_RELOC_CRIS_COPY: howto manager. (line 1851) +* BFD_RELOC_CRIS_GLOB_DAT: howto manager. (line 1852) +* BFD_RELOC_CRIS_JUMP_SLOT: howto manager. (line 1853) +* BFD_RELOC_CRIS_LAPCQ_OFFSET: howto manager. (line 1846) +* BFD_RELOC_CRIS_RELATIVE: howto manager. (line 1854) +* BFD_RELOC_CRIS_SIGNED_16: howto manager. (line 1844) +* BFD_RELOC_CRIS_SIGNED_6: howto manager. (line 1840) +* BFD_RELOC_CRIS_SIGNED_8: howto manager. (line 1842) +* BFD_RELOC_CRIS_UNSIGNED_16: howto manager. (line 1845) +* BFD_RELOC_CRIS_UNSIGNED_4: howto manager. (line 1847) +* BFD_RELOC_CRIS_UNSIGNED_5: howto manager. (line 1839) +* BFD_RELOC_CRIS_UNSIGNED_6: howto manager. (line 1841) +* BFD_RELOC_CRIS_UNSIGNED_8: howto manager. (line 1843) +* BFD_RELOC_CRX_ABS16: howto manager. (line 1826) +* BFD_RELOC_CRX_ABS32: howto manager. (line 1827) +* BFD_RELOC_CRX_IMM16: howto manager. (line 1831) +* BFD_RELOC_CRX_IMM32: howto manager. (line 1832) +* BFD_RELOC_CRX_NUM16: howto manager. (line 1829) +* BFD_RELOC_CRX_NUM32: howto manager. (line 1830) +* BFD_RELOC_CRX_NUM8: howto manager. (line 1828) +* BFD_RELOC_CRX_REGREL12: howto manager. (line 1822) +* BFD_RELOC_CRX_REGREL22: howto manager. (line 1823) +* BFD_RELOC_CRX_REGREL28: howto manager. (line 1824) +* BFD_RELOC_CRX_REGREL32: howto manager. (line 1825) +* BFD_RELOC_CRX_REL16: howto manager. (line 1819) +* BFD_RELOC_CRX_REL24: howto manager. (line 1820) +* BFD_RELOC_CRX_REL32: howto manager. (line 1821) +* BFD_RELOC_CRX_REL4: howto manager. (line 1816) +* BFD_RELOC_CRX_REL8: howto manager. (line 1817) +* BFD_RELOC_CRX_REL8_CMP: howto manager. (line 1818) +* BFD_RELOC_CRX_SWITCH16: howto manager. (line 1834) +* BFD_RELOC_CRX_SWITCH32: howto manager. (line 1835) +* BFD_RELOC_CRX_SWITCH8: howto manager. (line 1833) +* BFD_RELOC_CTOR: howto manager. (line 628) +* BFD_RELOC_D10V_10_PCREL_L: howto manager. (line 1002) +* BFD_RELOC_D10V_10_PCREL_R: howto manager. (line 998) +* BFD_RELOC_D10V_18: howto manager. (line 1007) +* BFD_RELOC_D10V_18_PCREL: howto manager. (line 1010) +* BFD_RELOC_D30V_15: howto manager. (line 1025) +* BFD_RELOC_D30V_15_PCREL: howto manager. (line 1029) +* BFD_RELOC_D30V_15_PCREL_R: howto manager. (line 1033) +* BFD_RELOC_D30V_21: howto manager. (line 1038) +* BFD_RELOC_D30V_21_PCREL: howto manager. (line 1042) +* BFD_RELOC_D30V_21_PCREL_R: howto manager. (line 1046) +* BFD_RELOC_D30V_32: howto manager. (line 1051) +* BFD_RELOC_D30V_32_PCREL: howto manager. (line 1054) +* BFD_RELOC_D30V_6: howto manager. (line 1013) +* BFD_RELOC_D30V_9_PCREL: howto manager. (line 1016) +* BFD_RELOC_D30V_9_PCREL_R: howto manager. (line 1020) +* BFD_RELOC_DLX_HI16_S: howto manager. (line 1057) +* BFD_RELOC_DLX_JMP26: howto manager. (line 1063) +* BFD_RELOC_DLX_LO16: howto manager. (line 1060) +* BFD_RELOC_FR30_10_IN_8: howto manager. (line 1242) +* BFD_RELOC_FR30_12_PCREL: howto manager. (line 1250) +* BFD_RELOC_FR30_20: howto manager. (line 1226) +* BFD_RELOC_FR30_48: howto manager. (line 1223) +* BFD_RELOC_FR30_6_IN_4: howto manager. (line 1230) +* BFD_RELOC_FR30_8_IN_8: howto manager. (line 1234) +* BFD_RELOC_FR30_9_IN_8: howto manager. (line 1238) +* BFD_RELOC_FR30_9_PCREL: howto manager. (line 1246) +* BFD_RELOC_FRV_FUNCDESC: howto manager. (line 393) +* BFD_RELOC_FRV_FUNCDESC_GOT12: howto manager. (line 394) +* BFD_RELOC_FRV_FUNCDESC_GOTHI: howto manager. (line 395) +* BFD_RELOC_FRV_FUNCDESC_GOTLO: howto manager. (line 396) +* BFD_RELOC_FRV_FUNCDESC_GOTOFF12: howto manager. (line 398) +* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI: howto manager. (line 399) +* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO: howto manager. (line 400) +* BFD_RELOC_FRV_FUNCDESC_VALUE: howto manager. (line 397) +* BFD_RELOC_FRV_GETTLSOFF: howto manager. (line 404) +* BFD_RELOC_FRV_GETTLSOFF_RELAX: howto manager. (line 417) +* BFD_RELOC_FRV_GOT12: howto manager. (line 390) +* BFD_RELOC_FRV_GOTHI: howto manager. (line 391) +* BFD_RELOC_FRV_GOTLO: howto manager. (line 392) +* BFD_RELOC_FRV_GOTOFF12: howto manager. (line 401) +* BFD_RELOC_FRV_GOTOFFHI: howto manager. (line 402) +* BFD_RELOC_FRV_GOTOFFLO: howto manager. (line 403) +* BFD_RELOC_FRV_GOTTLSDESC12: howto manager. (line 406) +* BFD_RELOC_FRV_GOTTLSDESCHI: howto manager. (line 407) +* BFD_RELOC_FRV_GOTTLSDESCLO: howto manager. (line 408) +* BFD_RELOC_FRV_GOTTLSOFF12: howto manager. (line 412) +* BFD_RELOC_FRV_GOTTLSOFFHI: howto manager. (line 413) +* BFD_RELOC_FRV_GOTTLSOFFLO: howto manager. (line 414) +* BFD_RELOC_FRV_GPREL12: howto manager. (line 385) +* BFD_RELOC_FRV_GPREL32: howto manager. (line 387) +* BFD_RELOC_FRV_GPRELHI: howto manager. (line 388) +* BFD_RELOC_FRV_GPRELLO: howto manager. (line 389) +* BFD_RELOC_FRV_GPRELU12: howto manager. (line 386) +* BFD_RELOC_FRV_HI16: howto manager. (line 384) +* BFD_RELOC_FRV_LABEL16: howto manager. (line 381) +* BFD_RELOC_FRV_LABEL24: howto manager. (line 382) +* BFD_RELOC_FRV_LO16: howto manager. (line 383) +* BFD_RELOC_FRV_TLSDESC_RELAX: howto manager. (line 416) +* BFD_RELOC_FRV_TLSDESC_VALUE: howto manager. (line 405) +* BFD_RELOC_FRV_TLSMOFF: howto manager. (line 419) +* BFD_RELOC_FRV_TLSMOFF12: howto manager. (line 409) +* BFD_RELOC_FRV_TLSMOFFHI: howto manager. (line 410) +* BFD_RELOC_FRV_TLSMOFFLO: howto manager. (line 411) +* BFD_RELOC_FRV_TLSOFF: howto manager. (line 415) +* BFD_RELOC_FRV_TLSOFF_RELAX: howto manager. (line 418) +* BFD_RELOC_GPREL16: howto manager. (line 106) +* BFD_RELOC_GPREL32: howto manager. (line 107) +* BFD_RELOC_H8_DIR16A8: howto manager. (line 1917) +* BFD_RELOC_H8_DIR16R8: howto manager. (line 1918) +* BFD_RELOC_H8_DIR24A8: howto manager. (line 1919) +* BFD_RELOC_H8_DIR24R8: howto manager. (line 1920) +* BFD_RELOC_H8_DIR32A16: howto manager. (line 1921) +* BFD_RELOC_HI16: howto manager. (line 305) +* BFD_RELOC_HI16_BASEREL: howto manager. (line 82) +* BFD_RELOC_HI16_GOTOFF: howto manager. (line 57) +* BFD_RELOC_HI16_PCREL: howto manager. (line 317) +* BFD_RELOC_HI16_PLTOFF: howto manager. (line 69) +* BFD_RELOC_HI16_S: howto manager. (line 308) +* BFD_RELOC_HI16_S_BASEREL: howto manager. (line 83) +* BFD_RELOC_HI16_S_GOTOFF: howto manager. (line 58) +* BFD_RELOC_HI16_S_PCREL: howto manager. (line 320) +* BFD_RELOC_HI16_S_PLTOFF: howto manager. (line 70) +* BFD_RELOC_HI22: howto manager. (line 101) +* BFD_RELOC_I370_D12: howto manager. (line 625) +* BFD_RELOC_I960_CALLJ: howto manager. (line 113) +* BFD_RELOC_IA64_COPY: howto manager. (line 1681) +* BFD_RELOC_IA64_DIR32LSB: howto manager. (line 1626) +* BFD_RELOC_IA64_DIR32MSB: howto manager. (line 1625) +* BFD_RELOC_IA64_DIR64LSB: howto manager. (line 1628) +* BFD_RELOC_IA64_DIR64MSB: howto manager. (line 1627) +* BFD_RELOC_IA64_DTPMOD64LSB: howto manager. (line 1691) +* BFD_RELOC_IA64_DTPMOD64MSB: howto manager. (line 1690) +* BFD_RELOC_IA64_DTPREL14: howto manager. (line 1693) +* BFD_RELOC_IA64_DTPREL22: howto manager. (line 1694) +* BFD_RELOC_IA64_DTPREL32LSB: howto manager. (line 1697) +* BFD_RELOC_IA64_DTPREL32MSB: howto manager. (line 1696) +* BFD_RELOC_IA64_DTPREL64I: howto manager. (line 1695) +* BFD_RELOC_IA64_DTPREL64LSB: howto manager. (line 1699) +* BFD_RELOC_IA64_DTPREL64MSB: howto manager. (line 1698) +* BFD_RELOC_IA64_FPTR32LSB: howto manager. (line 1643) +* BFD_RELOC_IA64_FPTR32MSB: howto manager. (line 1642) +* BFD_RELOC_IA64_FPTR64I: howto manager. (line 1641) +* BFD_RELOC_IA64_FPTR64LSB: howto manager. (line 1645) +* BFD_RELOC_IA64_FPTR64MSB: howto manager. (line 1644) +* BFD_RELOC_IA64_GPREL22: howto manager. (line 1629) +* BFD_RELOC_IA64_GPREL32LSB: howto manager. (line 1632) +* BFD_RELOC_IA64_GPREL32MSB: howto manager. (line 1631) +* BFD_RELOC_IA64_GPREL64I: howto manager. (line 1630) +* BFD_RELOC_IA64_GPREL64LSB: howto manager. (line 1634) +* BFD_RELOC_IA64_GPREL64MSB: howto manager. (line 1633) +* BFD_RELOC_IA64_IMM14: howto manager. (line 1622) +* BFD_RELOC_IA64_IMM22: howto manager. (line 1623) +* BFD_RELOC_IA64_IMM64: howto manager. (line 1624) +* BFD_RELOC_IA64_IPLTLSB: howto manager. (line 1680) +* BFD_RELOC_IA64_IPLTMSB: howto manager. (line 1679) +* BFD_RELOC_IA64_LDXMOV: howto manager. (line 1683) +* BFD_RELOC_IA64_LTOFF22: howto manager. (line 1635) +* BFD_RELOC_IA64_LTOFF22X: howto manager. (line 1682) +* BFD_RELOC_IA64_LTOFF64I: howto manager. (line 1636) +* BFD_RELOC_IA64_LTOFF_DTPMOD22: howto manager. (line 1692) +* BFD_RELOC_IA64_LTOFF_DTPREL22: howto manager. (line 1700) +* BFD_RELOC_IA64_LTOFF_FPTR22: howto manager. (line 1657) +* BFD_RELOC_IA64_LTOFF_FPTR32LSB: howto manager. (line 1660) +* BFD_RELOC_IA64_LTOFF_FPTR32MSB: howto manager. (line 1659) +* BFD_RELOC_IA64_LTOFF_FPTR64I: howto manager. (line 1658) +* BFD_RELOC_IA64_LTOFF_FPTR64LSB: howto manager. (line 1662) +* BFD_RELOC_IA64_LTOFF_FPTR64MSB: howto manager. (line 1661) +* BFD_RELOC_IA64_LTOFF_TPREL22: howto manager. (line 1689) +* BFD_RELOC_IA64_LTV32LSB: howto manager. (line 1676) +* BFD_RELOC_IA64_LTV32MSB: howto manager. (line 1675) +* BFD_RELOC_IA64_LTV64LSB: howto manager. (line 1678) +* BFD_RELOC_IA64_LTV64MSB: howto manager. (line 1677) +* BFD_RELOC_IA64_PCREL21B: howto manager. (line 1646) +* BFD_RELOC_IA64_PCREL21BI: howto manager. (line 1647) +* BFD_RELOC_IA64_PCREL21F: howto manager. (line 1649) +* BFD_RELOC_IA64_PCREL21M: howto manager. (line 1648) +* BFD_RELOC_IA64_PCREL22: howto manager. (line 1650) +* BFD_RELOC_IA64_PCREL32LSB: howto manager. (line 1654) +* BFD_RELOC_IA64_PCREL32MSB: howto manager. (line 1653) +* BFD_RELOC_IA64_PCREL60B: howto manager. (line 1651) +* BFD_RELOC_IA64_PCREL64I: howto manager. (line 1652) +* BFD_RELOC_IA64_PCREL64LSB: howto manager. (line 1656) +* BFD_RELOC_IA64_PCREL64MSB: howto manager. (line 1655) +* BFD_RELOC_IA64_PLTOFF22: howto manager. (line 1637) +* BFD_RELOC_IA64_PLTOFF64I: howto manager. (line 1638) +* BFD_RELOC_IA64_PLTOFF64LSB: howto manager. (line 1640) +* BFD_RELOC_IA64_PLTOFF64MSB: howto manager. (line 1639) +* BFD_RELOC_IA64_REL32LSB: howto manager. (line 1672) +* BFD_RELOC_IA64_REL32MSB: howto manager. (line 1671) +* BFD_RELOC_IA64_REL64LSB: howto manager. (line 1674) +* BFD_RELOC_IA64_REL64MSB: howto manager. (line 1673) +* BFD_RELOC_IA64_SECREL32LSB: howto manager. (line 1668) +* BFD_RELOC_IA64_SECREL32MSB: howto manager. (line 1667) +* BFD_RELOC_IA64_SECREL64LSB: howto manager. (line 1670) +* BFD_RELOC_IA64_SECREL64MSB: howto manager. (line 1669) +* BFD_RELOC_IA64_SEGREL32LSB: howto manager. (line 1664) +* BFD_RELOC_IA64_SEGREL32MSB: howto manager. (line 1663) +* BFD_RELOC_IA64_SEGREL64LSB: howto manager. (line 1666) +* BFD_RELOC_IA64_SEGREL64MSB: howto manager. (line 1665) +* BFD_RELOC_IA64_TPREL14: howto manager. (line 1684) +* BFD_RELOC_IA64_TPREL22: howto manager. (line 1685) +* BFD_RELOC_IA64_TPREL64I: howto manager. (line 1686) +* BFD_RELOC_IA64_TPREL64LSB: howto manager. (line 1688) +* BFD_RELOC_IA64_TPREL64MSB: howto manager. (line 1687) +* BFD_RELOC_IP2K_ADDR16CJP: howto manager. (line 1574) +* BFD_RELOC_IP2K_BANK: howto manager. (line 1571) +* BFD_RELOC_IP2K_EX8DATA: howto manager. (line 1582) +* BFD_RELOC_IP2K_FR9: howto manager. (line 1568) +* BFD_RELOC_IP2K_FR_OFFSET: howto manager. (line 1595) +* BFD_RELOC_IP2K_HI8DATA: howto manager. (line 1581) +* BFD_RELOC_IP2K_HI8INSN: howto manager. (line 1586) +* BFD_RELOC_IP2K_LO8DATA: howto manager. (line 1580) +* BFD_RELOC_IP2K_LO8INSN: howto manager. (line 1585) +* BFD_RELOC_IP2K_PAGE3: howto manager. (line 1577) +* BFD_RELOC_IP2K_PC_SKIP: howto manager. (line 1589) +* BFD_RELOC_IP2K_TEXT: howto manager. (line 1592) +* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 1971) +* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 1972) +* BFD_RELOC_IQ2000_UHI16: howto manager. (line 1973) +* BFD_RELOC_LO10: howto manager. (line 102) +* BFD_RELOC_LO16: howto manager. (line 314) +* BFD_RELOC_LO16_BASEREL: howto manager. (line 81) +* BFD_RELOC_LO16_GOTOFF: howto manager. (line 56) +* BFD_RELOC_LO16_PCREL: howto manager. (line 323) +* BFD_RELOC_LO16_PLTOFF: howto manager. (line 68) +* BFD_RELOC_M32C_HI8: howto manager. (line 1066) +* BFD_RELOC_M32C_RL_1ADDR: howto manager. (line 1068) +* BFD_RELOC_M32C_RL_2ADDR: howto manager. (line 1069) +* BFD_RELOC_M32C_RL_JUMP: howto manager. (line 1067) +* BFD_RELOC_M32R_10_PCREL: howto manager. (line 1076) +* BFD_RELOC_M32R_18_PCREL: howto manager. (line 1080) +* BFD_RELOC_M32R_24: howto manager. (line 1072) +* BFD_RELOC_M32R_26_PCREL: howto manager. (line 1083) +* BFD_RELOC_M32R_26_PLTREL: howto manager. (line 1102) +* BFD_RELOC_M32R_COPY: howto manager. (line 1103) +* BFD_RELOC_M32R_GLOB_DAT: howto manager. (line 1104) +* BFD_RELOC_M32R_GOT16_HI_SLO: howto manager. (line 1113) +* BFD_RELOC_M32R_GOT16_HI_ULO: howto manager. (line 1112) +* BFD_RELOC_M32R_GOT16_LO: howto manager. (line 1114) +* BFD_RELOC_M32R_GOT24: howto manager. (line 1101) +* BFD_RELOC_M32R_GOTOFF: howto manager. (line 1107) +* BFD_RELOC_M32R_GOTOFF_HI_SLO: howto manager. (line 1109) +* BFD_RELOC_M32R_GOTOFF_HI_ULO: howto manager. (line 1108) +* BFD_RELOC_M32R_GOTOFF_LO: howto manager. (line 1110) +* BFD_RELOC_M32R_GOTPC24: howto manager. (line 1111) +* BFD_RELOC_M32R_GOTPC_HI_SLO: howto manager. (line 1116) +* BFD_RELOC_M32R_GOTPC_HI_ULO: howto manager. (line 1115) +* BFD_RELOC_M32R_GOTPC_LO: howto manager. (line 1117) +* BFD_RELOC_M32R_HI16_SLO: howto manager. (line 1090) +* BFD_RELOC_M32R_HI16_ULO: howto manager. (line 1086) +* BFD_RELOC_M32R_JMP_SLOT: howto manager. (line 1105) +* BFD_RELOC_M32R_LO16: howto manager. (line 1094) +* BFD_RELOC_M32R_RELATIVE: howto manager. (line 1106) +* BFD_RELOC_M32R_SDA16: howto manager. (line 1097) +* BFD_RELOC_M68HC11_24: howto manager. (line 1736) +* BFD_RELOC_M68HC11_3B: howto manager. (line 1711) +* BFD_RELOC_M68HC11_HI8: howto manager. (line 1703) +* BFD_RELOC_M68HC11_LO16: howto manager. (line 1725) +* BFD_RELOC_M68HC11_LO8: howto manager. (line 1707) +* BFD_RELOC_M68HC11_PAGE: howto manager. (line 1731) +* BFD_RELOC_M68HC11_RL_GROUP: howto manager. (line 1720) +* BFD_RELOC_M68HC11_RL_JUMP: howto manager. (line 1714) +* BFD_RELOC_M68HC12_5B: howto manager. (line 1742) +* BFD_RELOC_MCORE_PCREL_32: howto manager. (line 1257) +* BFD_RELOC_MCORE_PCREL_IMM11BY2: howto manager. (line 1255) +* BFD_RELOC_MCORE_PCREL_IMM4BY2: howto manager. (line 1256) +* BFD_RELOC_MCORE_PCREL_IMM8BY4: howto manager. (line 1254) +* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2: howto manager. (line 1258) +* BFD_RELOC_MCORE_RVA: howto manager. (line 1259) +* BFD_RELOC_MEP_16: howto manager. (line 1263) +* BFD_RELOC_MEP_32: howto manager. (line 1264) +* BFD_RELOC_MEP_8: howto manager. (line 1262) +* BFD_RELOC_MEP_ADDR24A4: howto manager. (line 1279) +* BFD_RELOC_MEP_GNU_VTENTRY: howto manager. (line 1281) +* BFD_RELOC_MEP_GNU_VTINHERIT: howto manager. (line 1280) +* BFD_RELOC_MEP_GPREL: howto manager. (line 1273) +* BFD_RELOC_MEP_HI16S: howto manager. (line 1272) +* BFD_RELOC_MEP_HI16U: howto manager. (line 1271) +* BFD_RELOC_MEP_LOW16: howto manager. (line 1270) +* BFD_RELOC_MEP_PCABS24A2: howto manager. (line 1269) +* BFD_RELOC_MEP_PCREL12A2: howto manager. (line 1266) +* BFD_RELOC_MEP_PCREL17A2: howto manager. (line 1267) +* BFD_RELOC_MEP_PCREL24A2: howto manager. (line 1268) +* BFD_RELOC_MEP_PCREL8A2: howto manager. (line 1265) +* BFD_RELOC_MEP_TPREL: howto manager. (line 1274) +* BFD_RELOC_MEP_TPREL7: howto manager. (line 1275) +* BFD_RELOC_MEP_TPREL7A2: howto manager. (line 1276) +* BFD_RELOC_MEP_TPREL7A4: howto manager. (line 1277) +* BFD_RELOC_MEP_UIMM24: howto manager. (line 1278) +* BFD_RELOC_MIPS16_GPREL: howto manager. (line 302) +* BFD_RELOC_MIPS16_HI16: howto manager. (line 326) +* BFD_RELOC_MIPS16_HI16_S: howto manager. (line 329) +* BFD_RELOC_MIPS16_JMP: howto manager. (line 299) +* BFD_RELOC_MIPS16_LO16: howto manager. (line 335) +* BFD_RELOC_MIPS_CALL16: howto manager. (line 342) +* BFD_RELOC_MIPS_CALL_HI16: howto manager. (line 345) +* BFD_RELOC_MIPS_CALL_LO16: howto manager. (line 346) +* BFD_RELOC_MIPS_COPY: howto manager. (line 377) +* BFD_RELOC_MIPS_DELETE: howto manager. (line 355) +* BFD_RELOC_MIPS_GOT16: howto manager. (line 341) +* BFD_RELOC_MIPS_GOT_DISP: howto manager. (line 350) +* BFD_RELOC_MIPS_GOT_HI16: howto manager. (line 343) +* BFD_RELOC_MIPS_GOT_LO16: howto manager. (line 344) +* BFD_RELOC_MIPS_GOT_OFST: howto manager. (line 349) +* BFD_RELOC_MIPS_GOT_PAGE: howto manager. (line 348) +* BFD_RELOC_MIPS_HIGHER: howto manager. (line 357) +* BFD_RELOC_MIPS_HIGHEST: howto manager. (line 356) +* BFD_RELOC_MIPS_INSERT_A: howto manager. (line 353) +* BFD_RELOC_MIPS_INSERT_B: howto manager. (line 354) +* BFD_RELOC_MIPS_JALR: howto manager. (line 361) +* BFD_RELOC_MIPS_JMP: howto manager. (line 295) +* BFD_RELOC_MIPS_JUMP_SLOT: howto manager. (line 378) +* BFD_RELOC_MIPS_LITERAL: howto manager. (line 338) +* BFD_RELOC_MIPS_REL16: howto manager. (line 359) +* BFD_RELOC_MIPS_RELGOT: howto manager. (line 360) +* BFD_RELOC_MIPS_SCN_DISP: howto manager. (line 358) +* BFD_RELOC_MIPS_SHIFT5: howto manager. (line 351) +* BFD_RELOC_MIPS_SHIFT6: howto manager. (line 352) +* BFD_RELOC_MIPS_SUB: howto manager. (line 347) +* BFD_RELOC_MIPS_TLS_DTPMOD32: howto manager. (line 362) +* BFD_RELOC_MIPS_TLS_DTPMOD64: howto manager. (line 364) +* BFD_RELOC_MIPS_TLS_DTPREL32: howto manager. (line 363) +* BFD_RELOC_MIPS_TLS_DTPREL64: howto manager. (line 365) +* BFD_RELOC_MIPS_TLS_DTPREL_HI16: howto manager. (line 368) +* BFD_RELOC_MIPS_TLS_DTPREL_LO16: howto manager. (line 369) +* BFD_RELOC_MIPS_TLS_GD: howto manager. (line 366) +* BFD_RELOC_MIPS_TLS_GOTTPREL: howto manager. (line 370) +* BFD_RELOC_MIPS_TLS_LDM: howto manager. (line 367) +* BFD_RELOC_MIPS_TLS_TPREL32: howto manager. (line 371) +* BFD_RELOC_MIPS_TLS_TPREL64: howto manager. (line 372) +* BFD_RELOC_MIPS_TLS_TPREL_HI16: howto manager. (line 373) +* BFD_RELOC_MIPS_TLS_TPREL_LO16: howto manager. (line 374) +* BFD_RELOC_MMIX_ADDR19: howto manager. (line 1310) +* BFD_RELOC_MMIX_ADDR27: howto manager. (line 1314) +* BFD_RELOC_MMIX_BASE_PLUS_OFFSET: howto manager. (line 1326) +* BFD_RELOC_MMIX_CBRANCH: howto manager. (line 1290) +* BFD_RELOC_MMIX_CBRANCH_1: howto manager. (line 1292) +* BFD_RELOC_MMIX_CBRANCH_2: howto manager. (line 1293) +* BFD_RELOC_MMIX_CBRANCH_3: howto manager. (line 1294) +* BFD_RELOC_MMIX_CBRANCH_J: howto manager. (line 1291) +* BFD_RELOC_MMIX_GETA: howto manager. (line 1284) +* BFD_RELOC_MMIX_GETA_1: howto manager. (line 1285) +* BFD_RELOC_MMIX_GETA_2: howto manager. (line 1286) +* BFD_RELOC_MMIX_GETA_3: howto manager. (line 1287) +* BFD_RELOC_MMIX_JMP: howto manager. (line 1304) +* BFD_RELOC_MMIX_JMP_1: howto manager. (line 1305) +* BFD_RELOC_MMIX_JMP_2: howto manager. (line 1306) +* BFD_RELOC_MMIX_JMP_3: howto manager. (line 1307) +* BFD_RELOC_MMIX_LOCAL: howto manager. (line 1330) +* BFD_RELOC_MMIX_PUSHJ: howto manager. (line 1297) +* BFD_RELOC_MMIX_PUSHJ_1: howto manager. (line 1298) +* BFD_RELOC_MMIX_PUSHJ_2: howto manager. (line 1299) +* BFD_RELOC_MMIX_PUSHJ_3: howto manager. (line 1300) +* BFD_RELOC_MMIX_PUSHJ_STUBBABLE: howto manager. (line 1301) +* BFD_RELOC_MMIX_REG: howto manager. (line 1322) +* BFD_RELOC_MMIX_REG_OR_BYTE: howto manager. (line 1318) +* BFD_RELOC_MN10300_16_PCREL: howto manager. (line 1192) +* BFD_RELOC_MN10300_32_PCREL: howto manager. (line 1188) +* BFD_RELOC_MN10300_COPY: howto manager. (line 437) +* BFD_RELOC_MN10300_GLOB_DAT: howto manager. (line 440) +* BFD_RELOC_MN10300_GOT16: howto manager. (line 433) +* BFD_RELOC_MN10300_GOT24: howto manager. (line 429) +* BFD_RELOC_MN10300_GOT32: howto manager. (line 425) +* BFD_RELOC_MN10300_GOTOFF24: howto manager. (line 422) +* BFD_RELOC_MN10300_JMP_SLOT: howto manager. (line 443) +* BFD_RELOC_MN10300_RELATIVE: howto manager. (line 446) +* BFD_RELOC_MSP430_10_PCREL: howto manager. (line 1962) +* BFD_RELOC_MSP430_16: howto manager. (line 1964) +* BFD_RELOC_MSP430_16_BYTE: howto manager. (line 1966) +* BFD_RELOC_MSP430_16_PCREL: howto manager. (line 1963) +* BFD_RELOC_MSP430_16_PCREL_BYTE: howto manager. (line 1965) +* BFD_RELOC_MSP430_2X_PCREL: howto manager. (line 1967) +* BFD_RELOC_MSP430_RL_PCREL: howto manager. (line 1968) +* BFD_RELOC_MT_GNU_VTENTRY: howto manager. (line 1956) +* BFD_RELOC_MT_GNU_VTINHERIT: howto manager. (line 1953) +* BFD_RELOC_MT_HI16: howto manager. (line 1947) +* BFD_RELOC_MT_LO16: howto manager. (line 1950) +* BFD_RELOC_MT_PC16: howto manager. (line 1944) +* BFD_RELOC_MT_PCINSN8: howto manager. (line 1959) +* BFD_RELOC_NONE: howto manager. (line 116) +* BFD_RELOC_NS32K_DISP_16: howto manager. (line 509) +* BFD_RELOC_NS32K_DISP_16_PCREL: howto manager. (line 512) +* BFD_RELOC_NS32K_DISP_32: howto manager. (line 510) +* BFD_RELOC_NS32K_DISP_32_PCREL: howto manager. (line 513) +* BFD_RELOC_NS32K_DISP_8: howto manager. (line 508) +* BFD_RELOC_NS32K_DISP_8_PCREL: howto manager. (line 511) +* BFD_RELOC_NS32K_IMM_16: howto manager. (line 503) +* BFD_RELOC_NS32K_IMM_16_PCREL: howto manager. (line 506) +* BFD_RELOC_NS32K_IMM_32: howto manager. (line 504) +* BFD_RELOC_NS32K_IMM_32_PCREL: howto manager. (line 507) +* BFD_RELOC_NS32K_IMM_8: howto manager. (line 502) +* BFD_RELOC_NS32K_IMM_8_PCREL: howto manager. (line 505) +* BFD_RELOC_OPENRISC_ABS_26: howto manager. (line 1913) +* BFD_RELOC_OPENRISC_REL_26: howto manager. (line 1914) +* BFD_RELOC_PDP11_DISP_6_PCREL: howto manager. (line 517) +* BFD_RELOC_PDP11_DISP_8_PCREL: howto manager. (line 516) +* BFD_RELOC_PJ_CODE_DIR16: howto manager. (line 522) +* BFD_RELOC_PJ_CODE_DIR32: howto manager. (line 523) +* BFD_RELOC_PJ_CODE_HI16: howto manager. (line 520) +* BFD_RELOC_PJ_CODE_LO16: howto manager. (line 521) +* BFD_RELOC_PJ_CODE_REL16: howto manager. (line 524) +* BFD_RELOC_PJ_CODE_REL32: howto manager. (line 525) +* BFD_RELOC_PPC64_ADDR16_DS: howto manager. (line 570) +* BFD_RELOC_PPC64_ADDR16_LO_DS: howto manager. (line 571) +* BFD_RELOC_PPC64_DTPREL16_DS: howto manager. (line 617) +* BFD_RELOC_PPC64_DTPREL16_HIGHER: howto manager. (line 619) +* BFD_RELOC_PPC64_DTPREL16_HIGHERA: howto manager. (line 620) +* BFD_RELOC_PPC64_DTPREL16_HIGHEST: howto manager. (line 621) +* BFD_RELOC_PPC64_DTPREL16_HIGHESTA: howto manager. (line 622) +* BFD_RELOC_PPC64_DTPREL16_LO_DS: howto manager. (line 618) +* BFD_RELOC_PPC64_GOT16_DS: howto manager. (line 572) +* BFD_RELOC_PPC64_GOT16_LO_DS: howto manager. (line 573) +* BFD_RELOC_PPC64_HIGHER: howto manager. (line 558) +* BFD_RELOC_PPC64_HIGHER_S: howto manager. (line 559) +* BFD_RELOC_PPC64_HIGHEST: howto manager. (line 560) +* BFD_RELOC_PPC64_HIGHEST_S: howto manager. (line 561) +* BFD_RELOC_PPC64_PLT16_LO_DS: howto manager. (line 574) +* BFD_RELOC_PPC64_PLTGOT16: howto manager. (line 566) +* BFD_RELOC_PPC64_PLTGOT16_DS: howto manager. (line 579) +* BFD_RELOC_PPC64_PLTGOT16_HA: howto manager. (line 569) +* BFD_RELOC_PPC64_PLTGOT16_HI: howto manager. (line 568) +* BFD_RELOC_PPC64_PLTGOT16_LO: howto manager. (line 567) +* BFD_RELOC_PPC64_PLTGOT16_LO_DS: howto manager. (line 580) +* BFD_RELOC_PPC64_SECTOFF_DS: howto manager. (line 575) +* BFD_RELOC_PPC64_SECTOFF_LO_DS: howto manager. (line 576) +* BFD_RELOC_PPC64_TOC: howto manager. (line 565) +* BFD_RELOC_PPC64_TOC16_DS: howto manager. (line 577) +* BFD_RELOC_PPC64_TOC16_HA: howto manager. (line 564) +* BFD_RELOC_PPC64_TOC16_HI: howto manager. (line 563) +* BFD_RELOC_PPC64_TOC16_LO: howto manager. (line 562) +* BFD_RELOC_PPC64_TOC16_LO_DS: howto manager. (line 578) +* BFD_RELOC_PPC64_TPREL16_DS: howto manager. (line 611) +* BFD_RELOC_PPC64_TPREL16_HIGHER: howto manager. (line 613) +* BFD_RELOC_PPC64_TPREL16_HIGHERA: howto manager. (line 614) +* BFD_RELOC_PPC64_TPREL16_HIGHEST: howto manager. (line 615) +* BFD_RELOC_PPC64_TPREL16_HIGHESTA: howto manager. (line 616) +* BFD_RELOC_PPC64_TPREL16_LO_DS: howto manager. (line 612) +* BFD_RELOC_PPC_B16: howto manager. (line 531) +* BFD_RELOC_PPC_B16_BRNTAKEN: howto manager. (line 533) +* BFD_RELOC_PPC_B16_BRTAKEN: howto manager. (line 532) +* BFD_RELOC_PPC_B26: howto manager. (line 528) +* BFD_RELOC_PPC_BA16: howto manager. (line 534) +* BFD_RELOC_PPC_BA16_BRNTAKEN: howto manager. (line 536) +* BFD_RELOC_PPC_BA16_BRTAKEN: howto manager. (line 535) +* BFD_RELOC_PPC_BA26: howto manager. (line 529) +* BFD_RELOC_PPC_COPY: howto manager. (line 537) +* BFD_RELOC_PPC_DTPMOD: howto manager. (line 584) +* BFD_RELOC_PPC_DTPREL: howto manager. (line 594) +* BFD_RELOC_PPC_DTPREL16: howto manager. (line 590) +* BFD_RELOC_PPC_DTPREL16_HA: howto manager. (line 593) +* BFD_RELOC_PPC_DTPREL16_HI: howto manager. (line 592) +* BFD_RELOC_PPC_DTPREL16_LO: howto manager. (line 591) +* BFD_RELOC_PPC_EMB_BIT_FLD: howto manager. (line 556) +* BFD_RELOC_PPC_EMB_MRKREF: howto manager. (line 551) +* BFD_RELOC_PPC_EMB_NADDR16: howto manager. (line 543) +* BFD_RELOC_PPC_EMB_NADDR16_HA: howto manager. (line 546) +* BFD_RELOC_PPC_EMB_NADDR16_HI: howto manager. (line 545) +* BFD_RELOC_PPC_EMB_NADDR16_LO: howto manager. (line 544) +* BFD_RELOC_PPC_EMB_NADDR32: howto manager. (line 542) +* BFD_RELOC_PPC_EMB_RELSDA: howto manager. (line 557) +* BFD_RELOC_PPC_EMB_RELSEC16: howto manager. (line 552) +* BFD_RELOC_PPC_EMB_RELST_HA: howto manager. (line 555) +* BFD_RELOC_PPC_EMB_RELST_HI: howto manager. (line 554) +* BFD_RELOC_PPC_EMB_RELST_LO: howto manager. (line 553) +* BFD_RELOC_PPC_EMB_SDA21: howto manager. (line 550) +* BFD_RELOC_PPC_EMB_SDA2I16: howto manager. (line 548) +* BFD_RELOC_PPC_EMB_SDA2REL: howto manager. (line 549) +* BFD_RELOC_PPC_EMB_SDAI16: howto manager. (line 547) +* BFD_RELOC_PPC_GLOB_DAT: howto manager. (line 538) +* BFD_RELOC_PPC_GOT_DTPREL16: howto manager. (line 607) +* BFD_RELOC_PPC_GOT_DTPREL16_HA: howto manager. (line 610) +* BFD_RELOC_PPC_GOT_DTPREL16_HI: howto manager. (line 609) +* BFD_RELOC_PPC_GOT_DTPREL16_LO: howto manager. (line 608) +* BFD_RELOC_PPC_GOT_TLSGD16: howto manager. (line 595) +* BFD_RELOC_PPC_GOT_TLSGD16_HA: howto manager. (line 598) +* BFD_RELOC_PPC_GOT_TLSGD16_HI: howto manager. (line 597) +* BFD_RELOC_PPC_GOT_TLSGD16_LO: howto manager. (line 596) +* BFD_RELOC_PPC_GOT_TLSLD16: howto manager. (line 599) +* BFD_RELOC_PPC_GOT_TLSLD16_HA: howto manager. (line 602) +* BFD_RELOC_PPC_GOT_TLSLD16_HI: howto manager. (line 601) +* BFD_RELOC_PPC_GOT_TLSLD16_LO: howto manager. (line 600) +* BFD_RELOC_PPC_GOT_TPREL16: howto manager. (line 603) +* BFD_RELOC_PPC_GOT_TPREL16_HA: howto manager. (line 606) +* BFD_RELOC_PPC_GOT_TPREL16_HI: howto manager. (line 605) +* BFD_RELOC_PPC_GOT_TPREL16_LO: howto manager. (line 604) +* BFD_RELOC_PPC_JMP_SLOT: howto manager. (line 539) +* BFD_RELOC_PPC_LOCAL24PC: howto manager. (line 541) +* BFD_RELOC_PPC_RELATIVE: howto manager. (line 540) +* BFD_RELOC_PPC_TLS: howto manager. (line 583) +* BFD_RELOC_PPC_TOC16: howto manager. (line 530) +* BFD_RELOC_PPC_TPREL: howto manager. (line 589) +* BFD_RELOC_PPC_TPREL16: howto manager. (line 585) +* BFD_RELOC_PPC_TPREL16_HA: howto manager. (line 588) +* BFD_RELOC_PPC_TPREL16_HI: howto manager. (line 587) +* BFD_RELOC_PPC_TPREL16_LO: howto manager. (line 586) +* BFD_RELOC_RELC: howto manager. (line 1930) +* BFD_RELOC_RVA: howto manager. (line 85) +* BFD_RELOC_SCORE16_BRANCH: howto manager. (line 1559) +* BFD_RELOC_SCORE16_JMP: howto manager. (line 1556) +* BFD_RELOC_SCORE_BRANCH: howto manager. (line 1553) +* BFD_RELOC_SCORE_CALL15: howto manager. (line 1564) +* BFD_RELOC_SCORE_DUMMY1: howto manager. (line 1543) +* BFD_RELOC_SCORE_DUMMY2: howto manager. (line 1549) +* BFD_RELOC_SCORE_DUMMY_HI16: howto manager. (line 1565) +* BFD_RELOC_SCORE_GOT15: howto manager. (line 1562) +* BFD_RELOC_SCORE_GOT_LO16: howto manager. (line 1563) +* BFD_RELOC_SCORE_GPREL15: howto manager. (line 1546) +* BFD_RELOC_SCORE_JMP: howto manager. (line 1550) +* BFD_RELOC_SH_ALIGN: howto manager. (line 802) +* BFD_RELOC_SH_CODE: howto manager. (line 803) +* BFD_RELOC_SH_COPY: howto manager. (line 808) +* BFD_RELOC_SH_COPY64: howto manager. (line 833) +* BFD_RELOC_SH_COUNT: howto manager. (line 801) +* BFD_RELOC_SH_DATA: howto manager. (line 804) +* BFD_RELOC_SH_DISP12: howto manager. (line 784) +* BFD_RELOC_SH_DISP12BY2: howto manager. (line 785) +* BFD_RELOC_SH_DISP12BY4: howto manager. (line 786) +* BFD_RELOC_SH_DISP12BY8: howto manager. (line 787) +* BFD_RELOC_SH_DISP20: howto manager. (line 788) +* BFD_RELOC_SH_DISP20BY8: howto manager. (line 789) +* BFD_RELOC_SH_GLOB_DAT: howto manager. (line 809) +* BFD_RELOC_SH_GLOB_DAT64: howto manager. (line 834) +* BFD_RELOC_SH_GOT10BY4: howto manager. (line 837) +* BFD_RELOC_SH_GOT10BY8: howto manager. (line 838) +* BFD_RELOC_SH_GOT_HI16: howto manager. (line 816) +* BFD_RELOC_SH_GOT_LOW16: howto manager. (line 813) +* BFD_RELOC_SH_GOT_MEDHI16: howto manager. (line 815) +* BFD_RELOC_SH_GOT_MEDLOW16: howto manager. (line 814) +* BFD_RELOC_SH_GOTOFF_HI16: howto manager. (line 828) +* BFD_RELOC_SH_GOTOFF_LOW16: howto manager. (line 825) +* BFD_RELOC_SH_GOTOFF_MEDHI16: howto manager. (line 827) +* BFD_RELOC_SH_GOTOFF_MEDLOW16: howto manager. (line 826) +* BFD_RELOC_SH_GOTPC: howto manager. (line 812) +* BFD_RELOC_SH_GOTPC_HI16: howto manager. (line 832) +* BFD_RELOC_SH_GOTPC_LOW16: howto manager. (line 829) +* BFD_RELOC_SH_GOTPC_MEDHI16: howto manager. (line 831) +* BFD_RELOC_SH_GOTPC_MEDLOW16: howto manager. (line 830) +* BFD_RELOC_SH_GOTPLT10BY4: howto manager. (line 839) +* BFD_RELOC_SH_GOTPLT10BY8: howto manager. (line 840) +* BFD_RELOC_SH_GOTPLT32: howto manager. (line 841) +* BFD_RELOC_SH_GOTPLT_HI16: howto manager. (line 820) +* BFD_RELOC_SH_GOTPLT_LOW16: howto manager. (line 817) +* BFD_RELOC_SH_GOTPLT_MEDHI16: howto manager. (line 819) +* BFD_RELOC_SH_GOTPLT_MEDLOW16: howto manager. (line 818) +* BFD_RELOC_SH_IMM3: howto manager. (line 782) +* BFD_RELOC_SH_IMM3U: howto manager. (line 783) +* BFD_RELOC_SH_IMM4: howto manager. (line 790) +* BFD_RELOC_SH_IMM4BY2: howto manager. (line 791) +* BFD_RELOC_SH_IMM4BY4: howto manager. (line 792) +* BFD_RELOC_SH_IMM8: howto manager. (line 793) +* BFD_RELOC_SH_IMM8BY2: howto manager. (line 794) +* BFD_RELOC_SH_IMM8BY4: howto manager. (line 795) +* BFD_RELOC_SH_IMM_HI16: howto manager. (line 859) +* BFD_RELOC_SH_IMM_HI16_PCREL: howto manager. (line 860) +* BFD_RELOC_SH_IMM_LOW16: howto manager. (line 853) +* BFD_RELOC_SH_IMM_LOW16_PCREL: howto manager. (line 854) +* BFD_RELOC_SH_IMM_MEDHI16: howto manager. (line 857) +* BFD_RELOC_SH_IMM_MEDHI16_PCREL: howto manager. (line 858) +* BFD_RELOC_SH_IMM_MEDLOW16: howto manager. (line 855) +* BFD_RELOC_SH_IMM_MEDLOW16_PCREL: howto manager. (line 856) +* BFD_RELOC_SH_IMMS10: howto manager. (line 847) +* BFD_RELOC_SH_IMMS10BY2: howto manager. (line 848) +* BFD_RELOC_SH_IMMS10BY4: howto manager. (line 849) +* BFD_RELOC_SH_IMMS10BY8: howto manager. (line 850) +* BFD_RELOC_SH_IMMS16: howto manager. (line 851) +* BFD_RELOC_SH_IMMS6: howto manager. (line 844) +* BFD_RELOC_SH_IMMS6BY32: howto manager. (line 845) +* BFD_RELOC_SH_IMMU16: howto manager. (line 852) +* BFD_RELOC_SH_IMMU5: howto manager. (line 843) +* BFD_RELOC_SH_IMMU6: howto manager. (line 846) +* BFD_RELOC_SH_JMP_SLOT: howto manager. (line 810) +* BFD_RELOC_SH_JMP_SLOT64: howto manager. (line 835) +* BFD_RELOC_SH_LABEL: howto manager. (line 805) +* BFD_RELOC_SH_LOOP_END: howto manager. (line 807) +* BFD_RELOC_SH_LOOP_START: howto manager. (line 806) +* BFD_RELOC_SH_PCDISP12BY2: howto manager. (line 781) +* BFD_RELOC_SH_PCDISP8BY2: howto manager. (line 780) +* BFD_RELOC_SH_PCRELIMM8BY2: howto manager. (line 796) +* BFD_RELOC_SH_PCRELIMM8BY4: howto manager. (line 797) +* BFD_RELOC_SH_PLT_HI16: howto manager. (line 824) +* BFD_RELOC_SH_PLT_LOW16: howto manager. (line 821) +* BFD_RELOC_SH_PLT_MEDHI16: howto manager. (line 823) +* BFD_RELOC_SH_PLT_MEDLOW16: howto manager. (line 822) +* BFD_RELOC_SH_PT_16: howto manager. (line 861) +* BFD_RELOC_SH_RELATIVE: howto manager. (line 811) +* BFD_RELOC_SH_RELATIVE64: howto manager. (line 836) +* BFD_RELOC_SH_SHMEDIA_CODE: howto manager. (line 842) +* BFD_RELOC_SH_SWITCH16: howto manager. (line 798) +* BFD_RELOC_SH_SWITCH32: howto manager. (line 799) +* BFD_RELOC_SH_TLS_DTPMOD32: howto manager. (line 867) +* BFD_RELOC_SH_TLS_DTPOFF32: howto manager. (line 868) +* BFD_RELOC_SH_TLS_GD_32: howto manager. (line 862) +* BFD_RELOC_SH_TLS_IE_32: howto manager. (line 865) +* BFD_RELOC_SH_TLS_LD_32: howto manager. (line 863) +* BFD_RELOC_SH_TLS_LDO_32: howto manager. (line 864) +* BFD_RELOC_SH_TLS_LE_32: howto manager. (line 866) +* BFD_RELOC_SH_TLS_TPOFF32: howto manager. (line 869) +* BFD_RELOC_SH_USES: howto manager. (line 800) +* BFD_RELOC_SPARC13: howto manager. (line 119) +* BFD_RELOC_SPARC22: howto manager. (line 118) +* BFD_RELOC_SPARC_10: howto manager. (line 141) +* BFD_RELOC_SPARC_11: howto manager. (line 142) +* BFD_RELOC_SPARC_5: howto manager. (line 154) +* BFD_RELOC_SPARC_6: howto manager. (line 153) +* BFD_RELOC_SPARC_64: howto manager. (line 140) +* BFD_RELOC_SPARC_7: howto manager. (line 152) +* BFD_RELOC_SPARC_BASE13: howto manager. (line 136) +* BFD_RELOC_SPARC_BASE22: howto manager. (line 137) +* BFD_RELOC_SPARC_COPY: howto manager. (line 126) +* BFD_RELOC_SPARC_DISP64: howto manager. (line 155) +* BFD_RELOC_SPARC_GLOB_DAT: howto manager. (line 127) +* BFD_RELOC_SPARC_GOT10: howto manager. (line 120) +* BFD_RELOC_SPARC_GOT13: howto manager. (line 121) +* BFD_RELOC_SPARC_GOT22: howto manager. (line 122) +* BFD_RELOC_SPARC_H44: howto manager. (line 160) +* BFD_RELOC_SPARC_HH22: howto manager. (line 144) +* BFD_RELOC_SPARC_HIX22: howto manager. (line 158) +* BFD_RELOC_SPARC_HM10: howto manager. (line 145) +* BFD_RELOC_SPARC_JMP_SLOT: howto manager. (line 128) +* BFD_RELOC_SPARC_L44: howto manager. (line 162) +* BFD_RELOC_SPARC_LM22: howto manager. (line 146) +* BFD_RELOC_SPARC_LOX10: howto manager. (line 159) +* BFD_RELOC_SPARC_M44: howto manager. (line 161) +* BFD_RELOC_SPARC_OLO10: howto manager. (line 143) +* BFD_RELOC_SPARC_PC10: howto manager. (line 123) +* BFD_RELOC_SPARC_PC22: howto manager. (line 124) +* BFD_RELOC_SPARC_PC_HH22: howto manager. (line 147) +* BFD_RELOC_SPARC_PC_HM10: howto manager. (line 148) +* BFD_RELOC_SPARC_PC_LM22: howto manager. (line 149) +* BFD_RELOC_SPARC_PLT32: howto manager. (line 156) +* BFD_RELOC_SPARC_PLT64: howto manager. (line 157) +* BFD_RELOC_SPARC_REGISTER: howto manager. (line 163) +* BFD_RELOC_SPARC_RELATIVE: howto manager. (line 129) +* BFD_RELOC_SPARC_REV32: howto manager. (line 166) +* BFD_RELOC_SPARC_TLS_DTPMOD32: howto manager. (line 187) +* BFD_RELOC_SPARC_TLS_DTPMOD64: howto manager. (line 188) +* BFD_RELOC_SPARC_TLS_DTPOFF32: howto manager. (line 189) +* BFD_RELOC_SPARC_TLS_DTPOFF64: howto manager. (line 190) +* BFD_RELOC_SPARC_TLS_GD_ADD: howto manager. (line 171) +* BFD_RELOC_SPARC_TLS_GD_CALL: howto manager. (line 172) +* BFD_RELOC_SPARC_TLS_GD_HI22: howto manager. (line 169) +* BFD_RELOC_SPARC_TLS_GD_LO10: howto manager. (line 170) +* BFD_RELOC_SPARC_TLS_IE_ADD: howto manager. (line 184) +* BFD_RELOC_SPARC_TLS_IE_HI22: howto manager. (line 180) +* BFD_RELOC_SPARC_TLS_IE_LD: howto manager. (line 182) +* BFD_RELOC_SPARC_TLS_IE_LDX: howto manager. (line 183) +* BFD_RELOC_SPARC_TLS_IE_LO10: howto manager. (line 181) +* BFD_RELOC_SPARC_TLS_LDM_ADD: howto manager. (line 175) +* BFD_RELOC_SPARC_TLS_LDM_CALL: howto manager. (line 176) +* BFD_RELOC_SPARC_TLS_LDM_HI22: howto manager. (line 173) +* BFD_RELOC_SPARC_TLS_LDM_LO10: howto manager. (line 174) +* BFD_RELOC_SPARC_TLS_LDO_ADD: howto manager. (line 179) +* BFD_RELOC_SPARC_TLS_LDO_HIX22: howto manager. (line 177) +* BFD_RELOC_SPARC_TLS_LDO_LOX10: howto manager. (line 178) +* BFD_RELOC_SPARC_TLS_LE_HIX22: howto manager. (line 185) +* BFD_RELOC_SPARC_TLS_LE_LOX10: howto manager. (line 186) +* BFD_RELOC_SPARC_TLS_TPOFF32: howto manager. (line 191) +* BFD_RELOC_SPARC_TLS_TPOFF64: howto manager. (line 192) +* BFD_RELOC_SPARC_UA16: howto manager. (line 130) +* BFD_RELOC_SPARC_UA32: howto manager. (line 131) +* BFD_RELOC_SPARC_UA64: howto manager. (line 132) +* BFD_RELOC_SPARC_WDISP16: howto manager. (line 150) +* BFD_RELOC_SPARC_WDISP19: howto manager. (line 151) +* BFD_RELOC_SPARC_WDISP22: howto manager. (line 117) +* BFD_RELOC_SPARC_WPLT30: howto manager. (line 125) +* BFD_RELOC_SPU_HI16: howto manager. (line 206) +* BFD_RELOC_SPU_IMM10: howto manager. (line 197) +* BFD_RELOC_SPU_IMM10W: howto manager. (line 198) +* BFD_RELOC_SPU_IMM16: howto manager. (line 199) +* BFD_RELOC_SPU_IMM16W: howto manager. (line 200) +* BFD_RELOC_SPU_IMM18: howto manager. (line 201) +* BFD_RELOC_SPU_IMM7: howto manager. (line 195) +* BFD_RELOC_SPU_IMM8: howto manager. (line 196) +* BFD_RELOC_SPU_LO16: howto manager. (line 205) +* BFD_RELOC_SPU_PCREL16: howto manager. (line 204) +* BFD_RELOC_SPU_PCREL9a: howto manager. (line 202) +* BFD_RELOC_SPU_PCREL9b: howto manager. (line 203) +* BFD_RELOC_SPU_PPU32: howto manager. (line 207) +* BFD_RELOC_SPU_PPU64: howto manager. (line 208) +* BFD_RELOC_THUMB_PCREL_BLX: howto manager. (line 643) +* BFD_RELOC_THUMB_PCREL_BRANCH12: howto manager. (line 657) +* BFD_RELOC_THUMB_PCREL_BRANCH20: howto manager. (line 658) +* BFD_RELOC_THUMB_PCREL_BRANCH23: howto manager. (line 659) +* BFD_RELOC_THUMB_PCREL_BRANCH25: howto manager. (line 660) +* BFD_RELOC_THUMB_PCREL_BRANCH7: howto manager. (line 655) +* BFD_RELOC_THUMB_PCREL_BRANCH9: howto manager. (line 656) +* BFD_RELOC_TIC30_LDP: howto manager. (line 1196) +* BFD_RELOC_TIC54X_16_OF_23: howto manager. (line 1214) +* BFD_RELOC_TIC54X_23: howto manager. (line 1211) +* BFD_RELOC_TIC54X_MS7_OF_23: howto manager. (line 1219) +* BFD_RELOC_TIC54X_PARTLS7: howto manager. (line 1201) +* BFD_RELOC_TIC54X_PARTMS9: howto manager. (line 1206) +* bfd_reloc_type_lookup: howto manager. (line 2068) +* BFD_RELOC_V850_22_PCREL: howto manager. (line 1123) +* BFD_RELOC_V850_9_PCREL: howto manager. (line 1120) +* BFD_RELOC_V850_ALIGN: howto manager. (line 1181) +* BFD_RELOC_V850_CALLT_16_16_OFFSET: howto manager. (line 1172) +* BFD_RELOC_V850_CALLT_6_7_OFFSET: howto manager. (line 1169) +* BFD_RELOC_V850_LO16_SPLIT_OFFSET: howto manager. (line 1184) +* BFD_RELOC_V850_LONGCALL: howto manager. (line 1175) +* BFD_RELOC_V850_LONGJUMP: howto manager. (line 1178) +* BFD_RELOC_V850_SDA_15_16_OFFSET: howto manager. (line 1129) +* BFD_RELOC_V850_SDA_16_16_OFFSET: howto manager. (line 1126) +* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager. (line 1161) +* BFD_RELOC_V850_TDA_16_16_OFFSET: howto manager. (line 1151) +* BFD_RELOC_V850_TDA_4_4_OFFSET: howto manager. (line 1158) +* BFD_RELOC_V850_TDA_4_5_OFFSET: howto manager. (line 1154) +* BFD_RELOC_V850_TDA_6_8_OFFSET: howto manager. (line 1140) +* BFD_RELOC_V850_TDA_7_7_OFFSET: howto manager. (line 1148) +* BFD_RELOC_V850_TDA_7_8_OFFSET: howto manager. (line 1144) +* BFD_RELOC_V850_ZDA_15_16_OFFSET: howto manager. (line 1136) +* BFD_RELOC_V850_ZDA_16_16_OFFSET: howto manager. (line 1133) +* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager. (line 1165) +* BFD_RELOC_VAX_GLOB_DAT: howto manager. (line 1939) +* BFD_RELOC_VAX_JMP_SLOT: howto manager. (line 1940) +* BFD_RELOC_VAX_RELATIVE: howto manager. (line 1941) +* BFD_RELOC_VPE4KMATH_DATA: howto manager. (line 1598) +* BFD_RELOC_VPE4KMATH_INSN: howto manager. (line 1599) +* BFD_RELOC_VTABLE_ENTRY: howto manager. (line 1603) +* BFD_RELOC_VTABLE_INHERIT: howto manager. (line 1602) +* BFD_RELOC_X86_64_32S: howto manager. (line 481) +* BFD_RELOC_X86_64_COPY: howto manager. (line 476) +* BFD_RELOC_X86_64_DTPMOD64: howto manager. (line 482) +* BFD_RELOC_X86_64_DTPOFF32: howto manager. (line 487) +* BFD_RELOC_X86_64_DTPOFF64: howto manager. (line 483) +* BFD_RELOC_X86_64_GLOB_DAT: howto manager. (line 477) +* BFD_RELOC_X86_64_GOT32: howto manager. (line 474) +* BFD_RELOC_X86_64_GOT64: howto manager. (line 492) +* BFD_RELOC_X86_64_GOTOFF64: howto manager. (line 490) +* BFD_RELOC_X86_64_GOTPC32: howto manager. (line 491) +* BFD_RELOC_X86_64_GOTPC32_TLSDESC: howto manager. (line 497) +* BFD_RELOC_X86_64_GOTPC64: howto manager. (line 494) +* BFD_RELOC_X86_64_GOTPCREL: howto manager. (line 480) +* BFD_RELOC_X86_64_GOTPCREL64: howto manager. (line 493) +* BFD_RELOC_X86_64_GOTPLT64: howto manager. (line 495) +* BFD_RELOC_X86_64_GOTTPOFF: howto manager. (line 488) +* BFD_RELOC_X86_64_JUMP_SLOT: howto manager. (line 478) +* BFD_RELOC_X86_64_PLT32: howto manager. (line 475) +* BFD_RELOC_X86_64_PLTOFF64: howto manager. (line 496) +* BFD_RELOC_X86_64_RELATIVE: howto manager. (line 479) +* BFD_RELOC_X86_64_TLSDESC: howto manager. (line 499) +* BFD_RELOC_X86_64_TLSDESC_CALL: howto manager. (line 498) +* BFD_RELOC_X86_64_TLSGD: howto manager. (line 485) +* BFD_RELOC_X86_64_TLSLD: howto manager. (line 486) +* BFD_RELOC_X86_64_TPOFF32: howto manager. (line 489) +* BFD_RELOC_X86_64_TPOFF64: howto manager. (line 484) +* BFD_RELOC_XC16X_PAG: howto manager. (line 1933) +* BFD_RELOC_XC16X_POF: howto manager. (line 1934) +* BFD_RELOC_XC16X_SEG: howto manager. (line 1935) +* BFD_RELOC_XC16X_SOF: howto manager. (line 1936) +* BFD_RELOC_XSTORMY16_12: howto manager. (line 1925) +* BFD_RELOC_XSTORMY16_24: howto manager. (line 1926) +* BFD_RELOC_XSTORMY16_FPTR16: howto manager. (line 1927) +* BFD_RELOC_XSTORMY16_REL_12: howto manager. (line 1924) +* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 2045) +* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 2050) +* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 1992) +* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 1993) +* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 1991) +* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 1981) +* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 1982) +* BFD_RELOC_XTENSA_OP0: howto manager. (line 2039) +* BFD_RELOC_XTENSA_OP1: howto manager. (line 2040) +* BFD_RELOC_XTENSA_OP2: howto manager. (line 2041) +* BFD_RELOC_XTENSA_PLT: howto manager. (line 1986) +* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 1983) +* BFD_RELOC_XTENSA_RTLD: howto manager. (line 1976) +* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 2021) +* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 2001) +* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 2031) +* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 2011) +* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 2032) +* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 2012) +* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 2033) +* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 2013) +* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 2034) +* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 2014) +* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 2035) +* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 2015) +* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 2022) +* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 2002) +* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 2023) +* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 2003) +* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 2024) +* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 2004) +* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 2025) +* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 2005) +* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 2026) +* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 2006) +* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 2027) +* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 2007) +* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 2028) +* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 2008) +* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 2029) +* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 2009) +* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 2030) +* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 2010) +* BFD_RELOC_Z80_DISP8: howto manager. (line 2055) +* BFD_RELOC_Z8K_CALLR: howto manager. (line 2061) +* BFD_RELOC_Z8K_DISP7: howto manager. (line 2058) +* BFD_RELOC_Z8K_IMM4L: howto manager. (line 2064) +* bfd_scan_arch: Architectures. (line 406) +* bfd_scan_vma: BFD front end. (line 426) +* bfd_seach_for_target: bfd_target. (line 464) +* bfd_section_already_linked: Writing the symbol table. + (line 55) +* bfd_section_list_clear: section prototypes. (line 8) +* bfd_sections_find_if: section prototypes. (line 176) +* bfd_set_arch_info: Architectures. (line 447) +* bfd_set_archive_head: Archives. (line 69) +* bfd_set_default_target: bfd_target. (line 429) +* bfd_set_error: BFD front end. (line 236) +* bfd_set_error_handler: BFD front end. (line 278) +* bfd_set_error_program_name: BFD front end. (line 287) +* bfd_set_file_flags: BFD front end. (line 346) +* bfd_set_format: Formats. (line 68) +* bfd_set_gp_size: BFD front end. (line 416) +* bfd_set_private_flags: BFD front end. (line 493) +* bfd_set_reloc: BFD front end. (line 336) +* bfd_set_section_contents: section prototypes. (line 207) +* bfd_set_section_flags: section prototypes. (line 140) +* bfd_set_section_size: section prototypes. (line 193) +* bfd_set_start_address: BFD front end. (line 395) +* bfd_set_symtab: symbol handling functions. + (line 60) +* bfd_symbol_info: symbol handling functions. + (line 130) +* bfd_target_list: bfd_target. (line 455) +* bfd_write_bigendian_4byte_int: Internal. (line 13) +* bfd_zalloc: Opening and Closing. + (line 228) +* bfd_zalloc2: Opening and Closing. + (line 237) +* coff_symbol_type: coff. (line 186) +* core_file_matches_executable_p: Core Files. (line 30) +* find_separate_debug_file: Opening and Closing. + (line 279) +* generic_core_file_matches_executable_p: Core Files. (line 40) +* get_debug_link_info: Opening and Closing. + (line 260) +* Hash tables: Hash Tables. (line 6) +* internal object-file format: Canonical format. (line 11) +* Linker: Linker Functions. (line 6) +* Other functions: BFD front end. (line 508) +* separate_debug_file_exists: Opening and Closing. + (line 270) +* struct bfd_iovec: BFD front end. (line 711) +* target vector (_bfd_final_link): Performing the Final Link. + (line 6) +* target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table. + (line 6) +* target vector (_bfd_link_hash_table_create): Creating a Linker Hash Table. + (line 6) +* The HOWTO Macro: typedef arelent. (line 291) +* what is it?: Overview. (line 6) + + + +Tag Table: +Node: Top1045 +Node: Overview1384 +Node: History2435 +Node: How It Works3381 +Node: What BFD Version 2 Can Do4924 +Node: BFD information loss6239 +Node: Canonical format8771 +Node: BFD front end13143 +Node: Memory Usage40479 +Node: Initialization41707 +Node: Sections42166 +Node: Section Input42649 +Node: Section Output44014 +Node: typedef asection46500 +Node: section prototypes71101 +Node: Symbols80781 +Node: Reading Symbols82376 +Node: Writing Symbols83483 +Node: Mini Symbols85192 +Node: typedef asymbol86166 +Node: symbol handling functions91427 +Node: Archives96769 +Node: Formats100495 +Node: Relocations103443 +Node: typedef arelent104170 +Node: howto manager119981 +Node: Core Files186663 +Node: Targets188480 +Node: bfd_target190450 +Node: Architectures210755 +Node: Opening and Closing232762 +Node: Internal244026 +Node: File Caching250359 +Node: Linker Functions252273 +Node: Creating a Linker Hash Table253946 +Node: Adding Symbols to the Hash Table255684 +Node: Differing file formats256584 +Node: Adding symbols from an object file258332 +Node: Adding symbols from an archive260483 +Node: Performing the Final Link262897 +Node: Information provided by the linker264139 +Node: Relocating the section contents265293 +Node: Writing the symbol table267044 +Node: Hash Tables270086 +Node: Creating and Freeing a Hash Table271284 +Node: Looking Up or Entering a String272534 +Node: Traversing a Hash Table273787 +Node: Deriving a New Hash Table Type274576 +Node: Define the Derived Structures275642 +Node: Write the Derived Creation Routine276723 +Node: Write Other Derived Routines279347 +Node: BFD back ends280662 +Node: What to Put Where280932 +Node: aout281112 +Node: coff287430 +Node: elf311907 +Node: mmo312770 +Node: File layout313698 +Node: Symbol-table319345 +Node: mmo section mapping323114 +Node: GNU Free Documentation License326766 +Node: BFD Index346495 + +End Tag Table diff --git a/bfd/doc/bfdio.texi b/bfd/doc/bfdio.texi new file mode 100644 index 000000000..7a7fe3c48 --- /dev/null +++ b/bfd/doc/bfdio.texi @@ -0,0 +1,72 @@ +@findex struct bfd_iovec +@subsubsection @code{struct bfd_iovec} +@strong{Description}@* +The @code{struct bfd_iovec} contains the internal file I/O class. +Each @code{BFD} has an instance of this class and all file I/O is +routed through it (it is assumed that the instance implements +all methods listed below). +@example +struct bfd_iovec +@{ + /* To avoid problems with macros, a "b" rather than "f" + prefix is prepended to each method name. */ + /* Attempt to read/write NBYTES on ABFD's IOSTREAM storing/fetching + bytes starting at PTR. Return the number of bytes actually + transfered (a read past end-of-file returns less than NBYTES), + or -1 (setting @code{bfd_error}) if an error occurs. */ + file_ptr (*bread) (struct bfd *abfd, void *ptr, file_ptr nbytes); + file_ptr (*bwrite) (struct bfd *abfd, const void *ptr, + file_ptr nbytes); + /* Return the current IOSTREAM file offset, or -1 (setting @code{bfd_error} + if an error occurs. */ + file_ptr (*btell) (struct bfd *abfd); + /* For the following, on successful completion a value of 0 is returned. + Otherwise, a value of -1 is returned (and @code{bfd_error} is set). */ + int (*bseek) (struct bfd *abfd, file_ptr offset, int whence); + int (*bclose) (struct bfd *abfd); + int (*bflush) (struct bfd *abfd); + int (*bstat) (struct bfd *abfd, struct stat *sb); +@}; +@end example + +@findex bfd_get_mtime +@subsubsection @code{bfd_get_mtime} +@strong{Synopsis} +@example +long bfd_get_mtime (bfd *abfd); +@end example +@strong{Description}@* +Return the file modification time (as read from the file system, or +from the archive header for archive members). + +@findex bfd_get_size +@subsubsection @code{bfd_get_size} +@strong{Synopsis} +@example +file_ptr bfd_get_size (bfd *abfd); +@end example +@strong{Description}@* +Return the file size (as read from file system) for the file +associated with BFD @var{abfd}. + +The initial motivation for, and use of, this routine is not +so we can get the exact size of the object the BFD applies to, since +that might not be generally possible (archive members for example). +It would be ideal if someone could eventually modify +it so that such results were guaranteed. + +Instead, we want to ask questions like "is this NNN byte sized +object I'm about to try read from file offset YYY reasonable?" +As as example of where we might do this, some object formats +use string tables for which the first @code{sizeof (long)} bytes of the +table contain the size of the table itself, including the size bytes. +If an application tries to read what it thinks is one of these +string tables, without some way to validate the size, and for +some reason the size is wrong (byte swapping error, wrong location +for the string table, etc.), the only clue is likely to be a read +error when it tries to read the table, or a "virtual memory +exhausted" error when it tries to allocate 15 bazillon bytes +of space for the 15 bazillon byte table it is about to read. +This function at least allows us to answer the question, "is the +size reasonable?". + diff --git a/bfd/doc/bfdt.texi b/bfd/doc/bfdt.texi new file mode 100644 index 000000000..05f095260 --- /dev/null +++ b/bfd/doc/bfdt.texi @@ -0,0 +1,785 @@ +@section @code{typedef bfd} +A BFD has type @code{bfd}; objects of this type are the +cornerstone of any application using BFD. Using BFD +consists of making references though the BFD and to data in the BFD. + +Here is the structure that defines the type @code{bfd}. It +contains the major data about the file and pointers +to the rest of the data. + + +@example + +struct bfd +@{ + /* A unique identifier of the BFD */ + unsigned int id; + + /* The filename the application opened the BFD with. */ + const char *filename; + + /* A pointer to the target jump table. */ + const struct bfd_target *xvec; + + /* The IOSTREAM, and corresponding IO vector that provide access + to the file backing the BFD. */ + void *iostream; + const struct bfd_iovec *iovec; + + /* Is the file descriptor being cached? That is, can it be closed as + needed, and re-opened when accessed later? */ + bfd_boolean cacheable; + + /* Marks whether there was a default target specified when the + BFD was opened. This is used to select which matching algorithm + to use to choose the back end. */ + bfd_boolean target_defaulted; + + /* The caching routines use these to maintain a + least-recently-used list of BFDs. */ + struct bfd *lru_prev, *lru_next; + + /* When a file is closed by the caching routines, BFD retains + state information on the file here... */ + ufile_ptr where; + + /* ... and here: (``once'' means at least once). */ + bfd_boolean opened_once; + + /* Set if we have a locally maintained mtime value, rather than + getting it from the file each time. */ + bfd_boolean mtime_set; + + /* File modified time, if mtime_set is TRUE. */ + long mtime; + + /* Reserved for an unimplemented file locking extension. */ + int ifd; + + /* The format which belongs to the BFD. (object, core, etc.) */ + bfd_format format; + + /* The direction with which the BFD was opened. */ + enum bfd_direction + @{ + no_direction = 0, + read_direction = 1, + write_direction = 2, + both_direction = 3 + @} + direction; + + /* Format_specific flags. */ + flagword flags; + + /* Currently my_archive is tested before adding origin to + anything. I believe that this can become always an add of + origin, with origin set to 0 for non archive files. */ + ufile_ptr origin; + + /* Remember when output has begun, to stop strange things + from happening. */ + bfd_boolean output_has_begun; + + /* A hash table for section names. */ + struct bfd_hash_table section_htab; + + /* Pointer to linked list of sections. */ + struct bfd_section *sections; + + /* The last section on the section list. */ + struct bfd_section *section_last; + + /* The number of sections. */ + unsigned int section_count; + + /* Stuff only useful for object files: + The start address. */ + bfd_vma start_address; + + /* Used for input and output. */ + unsigned int symcount; + + /* Symbol table for output BFD (with symcount entries). */ + struct bfd_symbol **outsymbols; + + /* Used for slurped dynamic symbol tables. */ + unsigned int dynsymcount; + + /* Pointer to structure which contains architecture information. */ + const struct bfd_arch_info *arch_info; + + /* Flag set if symbols from this BFD should not be exported. */ + bfd_boolean no_export; + + /* Stuff only useful for archives. */ + void *arelt_data; + struct bfd *my_archive; /* The containing archive BFD. */ + struct bfd *archive_next; /* The next BFD in the archive. */ + struct bfd *archive_head; /* The first BFD in the archive. */ + bfd_boolean has_armap; + + /* A chain of BFD structures involved in a link. */ + struct bfd *link_next; + + /* A field used by _bfd_generic_link_add_archive_symbols. This will + be used only for archive elements. */ + int archive_pass; + + /* Used by the back end to hold private data. */ + union + @{ + struct aout_data_struct *aout_data; + struct artdata *aout_ar_data; + struct _oasys_data *oasys_obj_data; + struct _oasys_ar_data *oasys_ar_data; + struct coff_tdata *coff_obj_data; + struct pe_tdata *pe_obj_data; + struct xcoff_tdata *xcoff_obj_data; + struct ecoff_tdata *ecoff_obj_data; + struct ieee_data_struct *ieee_data; + struct ieee_ar_data_struct *ieee_ar_data; + struct srec_data_struct *srec_data; + struct ihex_data_struct *ihex_data; + struct tekhex_data_struct *tekhex_data; + struct elf_obj_tdata *elf_obj_data; + struct nlm_obj_tdata *nlm_obj_data; + struct bout_data_struct *bout_data; + struct mmo_data_struct *mmo_data; + struct sun_core_struct *sun_core_data; + struct sco5_core_struct *sco5_core_data; + struct trad_core_struct *trad_core_data; + struct som_data_struct *som_data; + struct hpux_core_struct *hpux_core_data; + struct hppabsd_core_struct *hppabsd_core_data; + struct sgi_core_struct *sgi_core_data; + struct lynx_core_struct *lynx_core_data; + struct osf_core_struct *osf_core_data; + struct cisco_core_struct *cisco_core_data; + struct versados_data_struct *versados_data; + struct netbsd_core_struct *netbsd_core_data; + struct mach_o_data_struct *mach_o_data; + struct mach_o_fat_data_struct *mach_o_fat_data; + struct bfd_pef_data_struct *pef_data; + struct bfd_pef_xlib_data_struct *pef_xlib_data; + struct bfd_sym_data_struct *sym_data; + void *any; + @} + tdata; + + /* Used by the application to hold private data. */ + void *usrdata; + + /* Where all the allocated stuff under this BFD goes. This is a + struct objalloc *, but we use void * to avoid requiring the inclusion + of objalloc.h. */ + void *memory; +@}; + +@end example +@section Error reporting +Most BFD functions return nonzero on success (check their +individual documentation for precise semantics). On an error, +they call @code{bfd_set_error} to set an error condition that callers +can check by calling @code{bfd_get_error}. +If that returns @code{bfd_error_system_call}, then check +@code{errno}. + +The easiest way to report a BFD error to the user is to +use @code{bfd_perror}. + +@subsection Type @code{bfd_error_type} +The values returned by @code{bfd_get_error} are defined by the +enumerated type @code{bfd_error_type}. + + +@example + +typedef enum bfd_error +@{ + bfd_error_no_error = 0, + bfd_error_system_call, + bfd_error_invalid_target, + bfd_error_wrong_format, + bfd_error_wrong_object_format, + bfd_error_invalid_operation, + bfd_error_no_memory, + bfd_error_no_symbols, + bfd_error_no_armap, + bfd_error_no_more_archived_files, + bfd_error_malformed_archive, + bfd_error_file_not_recognized, + bfd_error_file_ambiguously_recognized, + bfd_error_no_contents, + bfd_error_nonrepresentable_section, + bfd_error_no_debug_section, + bfd_error_bad_value, + bfd_error_file_truncated, + bfd_error_file_too_big, + bfd_error_on_input, + bfd_error_invalid_error_code +@} +bfd_error_type; + +@end example +@findex bfd_get_error +@subsubsection @code{bfd_get_error} +@strong{Synopsis} +@example +bfd_error_type bfd_get_error (void); +@end example +@strong{Description}@* +Return the current BFD error condition. + +@findex bfd_set_error +@subsubsection @code{bfd_set_error} +@strong{Synopsis} +@example +void bfd_set_error (bfd_error_type error_tag, ...); +@end example +@strong{Description}@* +Set the BFD error condition to be @var{error_tag}. +If @var{error_tag} is bfd_error_on_input, then this function +takes two more parameters, the input bfd where the error +occurred, and the bfd_error_type error. + +@findex bfd_errmsg +@subsubsection @code{bfd_errmsg} +@strong{Synopsis} +@example +const char *bfd_errmsg (bfd_error_type error_tag); +@end example +@strong{Description}@* +Return a string describing the error @var{error_tag}, or +the system error if @var{error_tag} is @code{bfd_error_system_call}. + +@findex bfd_perror +@subsubsection @code{bfd_perror} +@strong{Synopsis} +@example +void bfd_perror (const char *message); +@end example +@strong{Description}@* +Print to the standard error stream a string describing the +last BFD error that occurred, or the last system error if +the last BFD error was a system call failure. If @var{message} +is non-NULL and non-empty, the error string printed is preceded +by @var{message}, a colon, and a space. It is followed by a newline. + +@subsection BFD error handler +Some BFD functions want to print messages describing the +problem. They call a BFD error handler function. This +function may be overridden by the program. + +The BFD error handler acts like printf. + + +@example + +typedef void (*bfd_error_handler_type) (const char *, ...); + +@end example +@findex bfd_set_error_handler +@subsubsection @code{bfd_set_error_handler} +@strong{Synopsis} +@example +bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type); +@end example +@strong{Description}@* +Set the BFD error handler function. Returns the previous +function. + +@findex bfd_set_error_program_name +@subsubsection @code{bfd_set_error_program_name} +@strong{Synopsis} +@example +void bfd_set_error_program_name (const char *); +@end example +@strong{Description}@* +Set the program name to use when printing a BFD error. This +is printed before the error message followed by a colon and +space. The string must not be changed after it is passed to +this function. + +@findex bfd_get_error_handler +@subsubsection @code{bfd_get_error_handler} +@strong{Synopsis} +@example +bfd_error_handler_type bfd_get_error_handler (void); +@end example +@strong{Description}@* +Return the BFD error handler function. + +@section Miscellaneous + + +@subsection Miscellaneous functions + + +@findex bfd_get_reloc_upper_bound +@subsubsection @code{bfd_get_reloc_upper_bound} +@strong{Synopsis} +@example +long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect); +@end example +@strong{Description}@* +Return the number of bytes required to store the +relocation information associated with section @var{sect} +attached to bfd @var{abfd}. If an error occurs, return -1. + +@findex bfd_canonicalize_reloc +@subsubsection @code{bfd_canonicalize_reloc} +@strong{Synopsis} +@example +long bfd_canonicalize_reloc + (bfd *abfd, asection *sec, arelent **loc, asymbol **syms); +@end example +@strong{Description}@* +Call the back end associated with the open BFD +@var{abfd} and translate the external form of the relocation +information attached to @var{sec} into the internal canonical +form. Place the table into memory at @var{loc}, which has +been preallocated, usually by a call to +@code{bfd_get_reloc_upper_bound}. Returns the number of relocs, or +-1 on error. + +The @var{syms} table is also needed for horrible internal magic +reasons. + +@findex bfd_set_reloc +@subsubsection @code{bfd_set_reloc} +@strong{Synopsis} +@example +void bfd_set_reloc + (bfd *abfd, asection *sec, arelent **rel, unsigned int count); +@end example +@strong{Description}@* +Set the relocation pointer and count within +section @var{sec} to the values @var{rel} and @var{count}. +The argument @var{abfd} is ignored. + +@findex bfd_set_file_flags +@subsubsection @code{bfd_set_file_flags} +@strong{Synopsis} +@example +bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags); +@end example +@strong{Description}@* +Set the flag word in the BFD @var{abfd} to the value @var{flags}. + +Possible errors are: +@itemize @bullet + +@item +@code{bfd_error_wrong_format} - The target bfd was not of object format. +@item +@code{bfd_error_invalid_operation} - The target bfd was open for reading. +@item +@code{bfd_error_invalid_operation} - +The flag word contained a bit which was not applicable to the +type of file. E.g., an attempt was made to set the @code{D_PAGED} bit +on a BFD format which does not support demand paging. +@end itemize + +@findex bfd_get_arch_size +@subsubsection @code{bfd_get_arch_size} +@strong{Synopsis} +@example +int bfd_get_arch_size (bfd *abfd); +@end example +@strong{Description}@* +Returns the architecture address size, in bits, as determined +by the object file's format. For ELF, this information is +included in the header. + +@strong{Returns}@* +Returns the arch size in bits if known, @code{-1} otherwise. + +@findex bfd_get_sign_extend_vma +@subsubsection @code{bfd_get_sign_extend_vma} +@strong{Synopsis} +@example +int bfd_get_sign_extend_vma (bfd *abfd); +@end example +@strong{Description}@* +Indicates if the target architecture "naturally" sign extends +an address. Some architectures implicitly sign extend address +values when they are converted to types larger than the size +of an address. For instance, bfd_get_start_address() will +return an address sign extended to fill a bfd_vma when this is +the case. + +@strong{Returns}@* +Returns @code{1} if the target architecture is known to sign +extend addresses, @code{0} if the target architecture is known to +not sign extend addresses, and @code{-1} otherwise. + +@findex bfd_set_start_address +@subsubsection @code{bfd_set_start_address} +@strong{Synopsis} +@example +bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma); +@end example +@strong{Description}@* +Make @var{vma} the entry point of output BFD @var{abfd}. + +@strong{Returns}@* +Returns @code{TRUE} on success, @code{FALSE} otherwise. + +@findex bfd_get_gp_size +@subsubsection @code{bfd_get_gp_size} +@strong{Synopsis} +@example +unsigned int bfd_get_gp_size (bfd *abfd); +@end example +@strong{Description}@* +Return the maximum size of objects to be optimized using the GP +register under MIPS ECOFF. This is typically set by the @code{-G} +argument to the compiler, assembler or linker. + +@findex bfd_set_gp_size +@subsubsection @code{bfd_set_gp_size} +@strong{Synopsis} +@example +void bfd_set_gp_size (bfd *abfd, unsigned int i); +@end example +@strong{Description}@* +Set the maximum size of objects to be optimized using the GP +register under ECOFF or MIPS ELF. This is typically set by +the @code{-G} argument to the compiler, assembler or linker. + +@findex bfd_scan_vma +@subsubsection @code{bfd_scan_vma} +@strong{Synopsis} +@example +bfd_vma bfd_scan_vma (const char *string, const char **end, int base); +@end example +@strong{Description}@* +Convert, like @code{strtoul}, a numerical expression +@var{string} into a @code{bfd_vma} integer, and return that integer. +(Though without as many bells and whistles as @code{strtoul}.) +The expression is assumed to be unsigned (i.e., positive). +If given a @var{base}, it is used as the base for conversion. +A base of 0 causes the function to interpret the string +in hex if a leading "0x" or "0X" is found, otherwise +in octal if a leading zero is found, otherwise in decimal. + +If the value would overflow, the maximum @code{bfd_vma} value is +returned. + +@findex bfd_copy_private_header_data +@subsubsection @code{bfd_copy_private_header_data} +@strong{Synopsis} +@example +bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd); +@end example +@strong{Description}@* +Copy private BFD header information from the BFD @var{ibfd} to the +the BFD @var{obfd}. This copies information that may require +sections to exist, but does not require symbol tables. Return +@code{true} on success, @code{false} on error. +Possible error returns are: + +@itemize @bullet + +@item +@code{bfd_error_no_memory} - +Not enough memory exists to create private data for @var{obfd}. +@end itemize +@example +#define bfd_copy_private_header_data(ibfd, obfd) \ + BFD_SEND (obfd, _bfd_copy_private_header_data, \ + (ibfd, obfd)) +@end example + +@findex bfd_copy_private_bfd_data +@subsubsection @code{bfd_copy_private_bfd_data} +@strong{Synopsis} +@example +bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd); +@end example +@strong{Description}@* +Copy private BFD information from the BFD @var{ibfd} to the +the BFD @var{obfd}. Return @code{TRUE} on success, @code{FALSE} on error. +Possible error returns are: + +@itemize @bullet + +@item +@code{bfd_error_no_memory} - +Not enough memory exists to create private data for @var{obfd}. +@end itemize +@example +#define bfd_copy_private_bfd_data(ibfd, obfd) \ + BFD_SEND (obfd, _bfd_copy_private_bfd_data, \ + (ibfd, obfd)) +@end example + +@findex bfd_merge_private_bfd_data +@subsubsection @code{bfd_merge_private_bfd_data} +@strong{Synopsis} +@example +bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd); +@end example +@strong{Description}@* +Merge private BFD information from the BFD @var{ibfd} to the +the output file BFD @var{obfd} when linking. Return @code{TRUE} +on success, @code{FALSE} on error. Possible error returns are: + +@itemize @bullet + +@item +@code{bfd_error_no_memory} - +Not enough memory exists to create private data for @var{obfd}. +@end itemize +@example +#define bfd_merge_private_bfd_data(ibfd, obfd) \ + BFD_SEND (obfd, _bfd_merge_private_bfd_data, \ + (ibfd, obfd)) +@end example + +@findex bfd_set_private_flags +@subsubsection @code{bfd_set_private_flags} +@strong{Synopsis} +@example +bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags); +@end example +@strong{Description}@* +Set private BFD flag information in the BFD @var{abfd}. +Return @code{TRUE} on success, @code{FALSE} on error. Possible error +returns are: + +@itemize @bullet + +@item +@code{bfd_error_no_memory} - +Not enough memory exists to create private data for @var{obfd}. +@end itemize +@example +#define bfd_set_private_flags(abfd, flags) \ + BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags)) +@end example + +@findex Other functions +@subsubsection @code{Other functions} +@strong{Description}@* +The following functions exist but have not yet been documented. +@example +#define bfd_sizeof_headers(abfd, info) \ + BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info)) + +#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \ + BFD_SEND (abfd, _bfd_find_nearest_line, \ + (abfd, sec, syms, off, file, func, line)) + +#define bfd_find_line(abfd, syms, sym, file, line) \ + BFD_SEND (abfd, _bfd_find_line, \ + (abfd, syms, sym, file, line)) + +#define bfd_find_inliner_info(abfd, file, func, line) \ + BFD_SEND (abfd, _bfd_find_inliner_info, \ + (abfd, file, func, line)) + +#define bfd_debug_info_start(abfd) \ + BFD_SEND (abfd, _bfd_debug_info_start, (abfd)) + +#define bfd_debug_info_end(abfd) \ + BFD_SEND (abfd, _bfd_debug_info_end, (abfd)) + +#define bfd_debug_info_accumulate(abfd, section) \ + BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section)) + +#define bfd_stat_arch_elt(abfd, stat) \ + BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat)) + +#define bfd_update_armap_timestamp(abfd) \ + BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd)) + +#define bfd_set_arch_mach(abfd, arch, mach)\ + BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach)) + +#define bfd_relax_section(abfd, section, link_info, again) \ + BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again)) + +#define bfd_gc_sections(abfd, link_info) \ + BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info)) + +#define bfd_merge_sections(abfd, link_info) \ + BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info)) + +#define bfd_is_group_section(abfd, sec) \ + BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec)) + +#define bfd_discard_group(abfd, sec) \ + BFD_SEND (abfd, _bfd_discard_group, (abfd, sec)) + +#define bfd_link_hash_table_create(abfd) \ + BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) + +#define bfd_link_hash_table_free(abfd, hash) \ + BFD_SEND (abfd, _bfd_link_hash_table_free, (hash)) + +#define bfd_link_add_symbols(abfd, info) \ + BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) + +#define bfd_link_just_syms(abfd, sec, info) \ + BFD_SEND (abfd, _bfd_link_just_syms, (sec, info)) + +#define bfd_final_link(abfd, info) \ + BFD_SEND (abfd, _bfd_final_link, (abfd, info)) + +#define bfd_free_cached_info(abfd) \ + BFD_SEND (abfd, _bfd_free_cached_info, (abfd)) + +#define bfd_get_dynamic_symtab_upper_bound(abfd) \ + BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd)) + +#define bfd_print_private_bfd_data(abfd, file)\ + BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file)) + +#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \ + BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols)) + +#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \ + BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \ + dyncount, dynsyms, ret)) + +#define bfd_get_dynamic_reloc_upper_bound(abfd) \ + BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd)) + +#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \ + BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms)) + +extern bfd_byte *bfd_get_relocated_section_contents + (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, + bfd_boolean, asymbol **); + +@end example + +@findex bfd_alt_mach_code +@subsubsection @code{bfd_alt_mach_code} +@strong{Synopsis} +@example +bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative); +@end example +@strong{Description}@* +When more than one machine code number is available for the +same machine type, this function can be used to switch between +the preferred one (alternative == 0) and any others. Currently, +only ELF supports this feature, with up to two alternate +machine codes. + + +@example +struct bfd_preserve +@{ + void *marker; + void *tdata; + flagword flags; + const struct bfd_arch_info *arch_info; + struct bfd_section *sections; + struct bfd_section *section_last; + unsigned int section_count; + struct bfd_hash_table section_htab; +@}; + +@end example +@findex bfd_preserve_save +@subsubsection @code{bfd_preserve_save} +@strong{Synopsis} +@example +bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *); +@end example +@strong{Description}@* +When testing an object for compatibility with a particular +target back-end, the back-end object_p function needs to set +up certain fields in the bfd on successfully recognizing the +object. This typically happens in a piecemeal fashion, with +failures possible at many points. On failure, the bfd is +supposed to be restored to its initial state, which is +virtually impossible. However, restoring a subset of the bfd +state works in practice. This function stores the subset and +reinitializes the bfd. + +@findex bfd_preserve_restore +@subsubsection @code{bfd_preserve_restore} +@strong{Synopsis} +@example +void bfd_preserve_restore (bfd *, struct bfd_preserve *); +@end example +@strong{Description}@* +This function restores bfd state saved by bfd_preserve_save. +If MARKER is non-NULL in struct bfd_preserve then that block +and all subsequently bfd_alloc'd memory is freed. + +@findex bfd_preserve_finish +@subsubsection @code{bfd_preserve_finish} +@strong{Synopsis} +@example +void bfd_preserve_finish (bfd *, struct bfd_preserve *); +@end example +@strong{Description}@* +This function should be called when the bfd state saved by +bfd_preserve_save is no longer needed. ie. when the back-end +object_p function returns with success. + +@findex bfd_emul_get_maxpagesize +@subsubsection @code{bfd_emul_get_maxpagesize} +@strong{Synopsis} +@example +bfd_vma bfd_emul_get_maxpagesize (const char *); +@end example +@strong{Description}@* +Returns the maximum page size, in bytes, as determined by +emulation. + +@strong{Returns}@* +Returns the maximum page size in bytes for ELF, abort +otherwise. + +@findex bfd_emul_set_maxpagesize +@subsubsection @code{bfd_emul_set_maxpagesize} +@strong{Synopsis} +@example +void bfd_emul_set_maxpagesize (const char *, bfd_vma); +@end example +@strong{Description}@* +For ELF, set the maximum page size for the emulation. It is +a no-op for other formats. + +@findex bfd_emul_get_commonpagesize +@subsubsection @code{bfd_emul_get_commonpagesize} +@strong{Synopsis} +@example +bfd_vma bfd_emul_get_commonpagesize (const char *); +@end example +@strong{Description}@* +Returns the common page size, in bytes, as determined by +emulation. + +@strong{Returns}@* +Returns the common page size in bytes for ELF, abort otherwise. + +@findex bfd_emul_set_commonpagesize +@subsubsection @code{bfd_emul_set_commonpagesize} +@strong{Synopsis} +@example +void bfd_emul_set_commonpagesize (const char *, bfd_vma); +@end example +@strong{Description}@* +For ELF, set the common page size for the emulation. It is +a no-op for other formats. + +@findex bfd_demangle +@subsubsection @code{bfd_demangle} +@strong{Synopsis} +@example +char *bfd_demangle (bfd *, const char *, int); +@end example +@strong{Description}@* +Wrapper around cplus_demangle. Strips leading underscores and +other such chars that would otherwise confuse the demangler. +If passed a g++ v3 ABI mangled name, returns a buffer allocated +with malloc holding the demangled name. Returns NULL otherwise +and on memory alloc failure. + diff --git a/bfd/doc/bfdver.texi b/bfd/doc/bfdver.texi new file mode 100644 index 000000000..9740a989a --- /dev/null +++ b/bfd/doc/bfdver.texi @@ -0,0 +1,4 @@ +@set VERSION 2.17.90 +@set VERSION_PACKAGE (GNU Binutils) +@set UPDATED August 2007 +@set BUGURL @uref{http://www.sourceware.org/bugzilla/} diff --git a/bfd/doc/bfdwin.texi b/bfd/doc/bfdwin.texi new file mode 100644 index 000000000..b1fd7d5be --- /dev/null +++ b/bfd/doc/bfdwin.texi @@ -0,0 +1,2 @@ +@findex +@subsubsection @code{} diff --git a/bfd/doc/cache.texi b/bfd/doc/cache.texi new file mode 100644 index 000000000..5820a2a6a --- /dev/null +++ b/bfd/doc/cache.texi @@ -0,0 +1,65 @@ +@section File caching +The file caching mechanism is embedded within BFD and allows +the application to open as many BFDs as it wants without +regard to the underlying operating system's file descriptor +limit (often as low as 20 open files). The module in +@code{cache.c} maintains a least recently used list of +@code{BFD_CACHE_MAX_OPEN} files, and exports the name +@code{bfd_cache_lookup}, which runs around and makes sure that +the required BFD is open. If not, then it chooses a file to +close, closes it and opens the one wanted, returning its file +handle. + +@subsection Caching functions + + +@findex bfd_cache_init +@subsubsection @code{bfd_cache_init} +@strong{Synopsis} +@example +bfd_boolean bfd_cache_init (bfd *abfd); +@end example +@strong{Description}@* +Add a newly opened BFD to the cache. + +@findex bfd_cache_close +@subsubsection @code{bfd_cache_close} +@strong{Synopsis} +@example +bfd_boolean bfd_cache_close (bfd *abfd); +@end example +@strong{Description}@* +Remove the BFD @var{abfd} from the cache. If the attached file is open, +then close it too. + +@strong{Returns}@* +@code{FALSE} is returned if closing the file fails, @code{TRUE} is +returned if all is well. + +@findex bfd_cache_close_all +@subsubsection @code{bfd_cache_close_all} +@strong{Synopsis} +@example +bfd_boolean bfd_cache_close_all (void); +@end example +@strong{Description}@* +Remove all BFDs from the cache. If the attached file is open, +then close it too. + +@strong{Returns}@* +@code{FALSE} is returned if closing one of the file fails, @code{TRUE} is +returned if all is well. + +@findex bfd_open_file +@subsubsection @code{bfd_open_file} +@strong{Synopsis} +@example +FILE* bfd_open_file (bfd *abfd); +@end example +@strong{Description}@* +Call the OS to open a file for @var{abfd}. Return the @code{FILE *} +(possibly @code{NULL}) that results from this operation. Set up the +BFD so that future accesses know the file is open. If the @code{FILE *} +returned is @code{NULL}, then it won't have been put in the +cache, so it won't have to be removed from it. + diff --git a/bfd/doc/coffcode.texi b/bfd/doc/coffcode.texi new file mode 100644 index 000000000..6689009c0 --- /dev/null +++ b/bfd/doc/coffcode.texi @@ -0,0 +1,608 @@ +@section coff backends +BFD supports a number of different flavours of coff format. +The major differences between formats are the sizes and +alignments of fields in structures on disk, and the occasional +extra field. + +Coff in all its varieties is implemented with a few common +files and a number of implementation specific files. For +example, The 88k bcs coff format is implemented in the file +@file{coff-m88k.c}. This file @code{#include}s +@file{coff/m88k.h} which defines the external structure of the +coff format for the 88k, and @file{coff/internal.h} which +defines the internal structure. @file{coff-m88k.c} also +defines the relocations used by the 88k format +@xref{Relocations}. + +The Intel i960 processor version of coff is implemented in +@file{coff-i960.c}. This file has the same structure as +@file{coff-m88k.c}, except that it includes @file{coff/i960.h} +rather than @file{coff-m88k.h}. + +@subsection Porting to a new version of coff +The recommended method is to select from the existing +implementations the version of coff which is most like the one +you want to use. For example, we'll say that i386 coff is +the one you select, and that your coff flavour is called foo. +Copy @file{i386coff.c} to @file{foocoff.c}, copy +@file{../include/coff/i386.h} to @file{../include/coff/foo.h}, +and add the lines to @file{targets.c} and @file{Makefile.in} +so that your new back end is used. Alter the shapes of the +structures in @file{../include/coff/foo.h} so that they match +what you need. You will probably also have to add +@code{#ifdef}s to the code in @file{coff/internal.h} and +@file{coffcode.h} if your version of coff is too wild. + +You can verify that your new BFD backend works quite simply by +building @file{objdump} from the @file{binutils} directory, +and making sure that its version of what's going on and your +host system's idea (assuming it has the pretty standard coff +dump utility, usually called @code{att-dump} or just +@code{dump}) are the same. Then clean up your code, and send +what you've done to Cygnus. Then your stuff will be in the +next release, and you won't have to keep integrating it. + +@subsection How the coff backend works + + +@subsubsection File layout +The Coff backend is split into generic routines that are +applicable to any Coff target and routines that are specific +to a particular target. The target-specific routines are +further split into ones which are basically the same for all +Coff targets except that they use the external symbol format +or use different values for certain constants. + +The generic routines are in @file{coffgen.c}. These routines +work for any Coff target. They use some hooks into the target +specific code; the hooks are in a @code{bfd_coff_backend_data} +structure, one of which exists for each target. + +The essentially similar target-specific routines are in +@file{coffcode.h}. This header file includes executable C code. +The various Coff targets first include the appropriate Coff +header file, make any special defines that are needed, and +then include @file{coffcode.h}. + +Some of the Coff targets then also have additional routines in +the target source file itself. + +For example, @file{coff-i960.c} includes +@file{coff/internal.h} and @file{coff/i960.h}. It then +defines a few constants, such as @code{I960}, and includes +@file{coffcode.h}. Since the i960 has complex relocation +types, @file{coff-i960.c} also includes some code to +manipulate the i960 relocs. This code is not in +@file{coffcode.h} because it would not be used by any other +target. + +@subsubsection Bit twiddling +Each flavour of coff supported in BFD has its own header file +describing the external layout of the structures. There is also +an internal description of the coff layout, in +@file{coff/internal.h}. A major function of the +coff backend is swapping the bytes and twiddling the bits to +translate the external form of the structures into the normal +internal form. This is all performed in the +@code{bfd_swap}_@i{thing}_@i{direction} routines. Some +elements are different sizes between different versions of +coff; it is the duty of the coff version specific include file +to override the definitions of various packing routines in +@file{coffcode.h}. E.g., the size of line number entry in coff is +sometimes 16 bits, and sometimes 32 bits. @code{#define}ing +@code{PUT_LNSZ_LNNO} and @code{GET_LNSZ_LNNO} will select the +correct one. No doubt, some day someone will find a version of +coff which has a varying field size not catered to at the +moment. To port BFD, that person will have to add more @code{#defines}. +Three of the bit twiddling routines are exported to +@code{gdb}; @code{coff_swap_aux_in}, @code{coff_swap_sym_in} +and @code{coff_swap_lineno_in}. @code{GDB} reads the symbol +table on its own, but uses BFD to fix things up. More of the +bit twiddlers are exported for @code{gas}; +@code{coff_swap_aux_out}, @code{coff_swap_sym_out}, +@code{coff_swap_lineno_out}, @code{coff_swap_reloc_out}, +@code{coff_swap_filehdr_out}, @code{coff_swap_aouthdr_out}, +@code{coff_swap_scnhdr_out}. @code{Gas} currently keeps track +of all the symbol table and reloc drudgery itself, thereby +saving the internal BFD overhead, but uses BFD to swap things +on the way out, making cross ports much safer. Doing so also +allows BFD (and thus the linker) to use the same header files +as @code{gas}, which makes one avenue to disaster disappear. + +@subsubsection Symbol reading +The simple canonical form for symbols used by BFD is not rich +enough to keep all the information available in a coff symbol +table. The back end gets around this problem by keeping the original +symbol table around, "behind the scenes". + +When a symbol table is requested (through a call to +@code{bfd_canonicalize_symtab}), a request gets through to +@code{coff_get_normalized_symtab}. This reads the symbol table from +the coff file and swaps all the structures inside into the +internal form. It also fixes up all the pointers in the table +(represented in the file by offsets from the first symbol in +the table) into physical pointers to elements in the new +internal table. This involves some work since the meanings of +fields change depending upon context: a field that is a +pointer to another structure in the symbol table at one moment +may be the size in bytes of a structure at the next. Another +pass is made over the table. All symbols which mark file names +(@code{C_FILE} symbols) are modified so that the internal +string points to the value in the auxent (the real filename) +rather than the normal text associated with the symbol +(@code{".file"}). + +At this time the symbol names are moved around. Coff stores +all symbols less than nine characters long physically +within the symbol table; longer strings are kept at the end of +the file in the string table. This pass moves all strings +into memory and replaces them with pointers to the strings. + +The symbol table is massaged once again, this time to create +the canonical table used by the BFD application. Each symbol +is inspected in turn, and a decision made (using the +@code{sclass} field) about the various flags to set in the +@code{asymbol}. @xref{Symbols}. The generated canonical table +shares strings with the hidden internal symbol table. + +Any linenumbers are read from the coff file too, and attached +to the symbols which own the functions the linenumbers belong to. + +@subsubsection Symbol writing +Writing a symbol to a coff file which didn't come from a coff +file will lose any debugging information. The @code{asymbol} +structure remembers the BFD from which the symbol was taken, and on +output the back end makes sure that the same destination target as +source target is present. + +When the symbols have come from a coff file then all the +debugging information is preserved. + +Symbol tables are provided for writing to the back end in a +vector of pointers to pointers. This allows applications like +the linker to accumulate and output large symbol tables +without having to do too much byte copying. + +This function runs through the provided symbol table and +patches each symbol marked as a file place holder +(@code{C_FILE}) to point to the next file place holder in the +list. It also marks each @code{offset} field in the list with +the offset from the first symbol of the current symbol. + +Another function of this procedure is to turn the canonical +value form of BFD into the form used by coff. Internally, BFD +expects symbol values to be offsets from a section base; so a +symbol physically at 0x120, but in a section starting at +0x100, would have the value 0x20. Coff expects symbols to +contain their final value, so symbols have their values +changed at this point to reflect their sum with their owning +section. This transformation uses the +@code{output_section} field of the @code{asymbol}'s +@code{asection} @xref{Sections}. + +@itemize @bullet + +@item +@code{coff_mangle_symbols} +@end itemize +This routine runs though the provided symbol table and uses +the offsets generated by the previous pass and the pointers +generated when the symbol table was read in to create the +structured hierarchy required by coff. It changes each pointer +to a symbol into the index into the symbol table of the asymbol. + +@itemize @bullet + +@item +@code{coff_write_symbols} +@end itemize +This routine runs through the symbol table and patches up the +symbols from their internal form into the coff way, calls the +bit twiddlers, and writes out the table to the file. + +@findex coff_symbol_type +@subsubsection @code{coff_symbol_type} +@strong{Description}@* +The hidden information for an @code{asymbol} is described in a +@code{combined_entry_type}: + + +@example + +typedef struct coff_ptr_struct +@{ + /* Remembers the offset from the first symbol in the file for + this symbol. Generated by coff_renumber_symbols. */ + unsigned int offset; + + /* Should the value of this symbol be renumbered. Used for + XCOFF C_BSTAT symbols. Set by coff_slurp_symbol_table. */ + unsigned int fix_value : 1; + + /* Should the tag field of this symbol be renumbered. + Created by coff_pointerize_aux. */ + unsigned int fix_tag : 1; + + /* Should the endidx field of this symbol be renumbered. + Created by coff_pointerize_aux. */ + unsigned int fix_end : 1; + + /* Should the x_csect.x_scnlen field be renumbered. + Created by coff_pointerize_aux. */ + unsigned int fix_scnlen : 1; + + /* Fix up an XCOFF C_BINCL/C_EINCL symbol. The value is the + index into the line number entries. Set by coff_slurp_symbol_table. */ + unsigned int fix_line : 1; + + /* The container for the symbol structure as read and translated + from the file. */ + union + @{ + union internal_auxent auxent; + struct internal_syment syment; + @} u; +@} combined_entry_type; + + +/* Each canonical asymbol really looks like this: */ + +typedef struct coff_symbol_struct +@{ + /* The actual symbol which the rest of BFD works with */ + asymbol symbol; + + /* A pointer to the hidden information for this symbol */ + combined_entry_type *native; + + /* A pointer to the linenumber information for this symbol */ + struct lineno_cache_entry *lineno; + + /* Have the line numbers been relocated yet ? */ + bfd_boolean done_lineno; +@} coff_symbol_type; +@end example +@findex bfd_coff_backend_data +@subsubsection @code{bfd_coff_backend_data} + +@example +/* COFF symbol classifications. */ + +enum coff_symbol_classification +@{ + /* Global symbol. */ + COFF_SYMBOL_GLOBAL, + /* Common symbol. */ + COFF_SYMBOL_COMMON, + /* Undefined symbol. */ + COFF_SYMBOL_UNDEFINED, + /* Local symbol. */ + COFF_SYMBOL_LOCAL, + /* PE section symbol. */ + COFF_SYMBOL_PE_SECTION +@}; + +@end example +Special entry points for gdb to swap in coff symbol table parts: +@example +typedef struct +@{ + void (*_bfd_coff_swap_aux_in) + (bfd *, void *, int, int, int, int, void *); + + void (*_bfd_coff_swap_sym_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_lineno_in) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_aux_out) + (bfd *, void *, int, int, int, int, void *); + + unsigned int (*_bfd_coff_swap_sym_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_lineno_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_reloc_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_filehdr_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_aouthdr_out) + (bfd *, void *, void *); + + unsigned int (*_bfd_coff_swap_scnhdr_out) + (bfd *, void *, void *); + + unsigned int _bfd_filhsz; + unsigned int _bfd_aoutsz; + unsigned int _bfd_scnhsz; + unsigned int _bfd_symesz; + unsigned int _bfd_auxesz; + unsigned int _bfd_relsz; + unsigned int _bfd_linesz; + unsigned int _bfd_filnmlen; + bfd_boolean _bfd_coff_long_filenames; + bfd_boolean _bfd_coff_long_section_names; + unsigned int _bfd_coff_default_section_alignment_power; + bfd_boolean _bfd_coff_force_symnames_in_strings; + unsigned int _bfd_coff_debug_string_prefix_length; + + void (*_bfd_coff_swap_filehdr_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_aouthdr_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_scnhdr_in) + (bfd *, void *, void *); + + void (*_bfd_coff_swap_reloc_in) + (bfd *abfd, void *, void *); + + bfd_boolean (*_bfd_coff_bad_format_hook) + (bfd *, void *); + + bfd_boolean (*_bfd_coff_set_arch_mach_hook) + (bfd *, void *); + + void * (*_bfd_coff_mkobject_hook) + (bfd *, void *, void *); + + bfd_boolean (*_bfd_styp_to_sec_flags_hook) + (bfd *, void *, const char *, asection *, flagword *); + + void (*_bfd_set_alignment_hook) + (bfd *, asection *, void *); + + bfd_boolean (*_bfd_coff_slurp_symbol_table) + (bfd *); + + bfd_boolean (*_bfd_coff_symname_in_debug) + (bfd *, struct internal_syment *); + + bfd_boolean (*_bfd_coff_pointerize_aux_hook) + (bfd *, combined_entry_type *, combined_entry_type *, + unsigned int, combined_entry_type *); + + bfd_boolean (*_bfd_coff_print_aux) + (bfd *, FILE *, combined_entry_type *, combined_entry_type *, + combined_entry_type *, unsigned int); + + void (*_bfd_coff_reloc16_extra_cases) + (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *, + bfd_byte *, unsigned int *, unsigned int *); + + int (*_bfd_coff_reloc16_estimate) + (bfd *, asection *, arelent *, unsigned int, + struct bfd_link_info *); + + enum coff_symbol_classification (*_bfd_coff_classify_symbol) + (bfd *, struct internal_syment *); + + bfd_boolean (*_bfd_coff_compute_section_file_positions) + (bfd *); + + bfd_boolean (*_bfd_coff_start_final_link) + (bfd *, struct bfd_link_info *); + + bfd_boolean (*_bfd_coff_relocate_section) + (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, + struct internal_reloc *, struct internal_syment *, asection **); + + reloc_howto_type *(*_bfd_coff_rtype_to_howto) + (bfd *, asection *, struct internal_reloc *, + struct coff_link_hash_entry *, struct internal_syment *, + bfd_vma *); + + bfd_boolean (*_bfd_coff_adjust_symndx) + (bfd *, struct bfd_link_info *, bfd *, asection *, + struct internal_reloc *, bfd_boolean *); + + bfd_boolean (*_bfd_coff_link_add_one_symbol) + (struct bfd_link_info *, bfd *, const char *, flagword, + asection *, bfd_vma, const char *, bfd_boolean, bfd_boolean, + struct bfd_link_hash_entry **); + + bfd_boolean (*_bfd_coff_link_output_has_begun) + (bfd *, struct coff_final_link_info *); + + bfd_boolean (*_bfd_coff_final_link_postscript) + (bfd *, struct coff_final_link_info *); + +@} bfd_coff_backend_data; + +#define coff_backend_info(abfd) \ + ((bfd_coff_backend_data *) (abfd)->xvec->backend_data) + +#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \ + ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i)) + +#define bfd_coff_swap_sym_in(a,e,i) \ + ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i)) + +#define bfd_coff_swap_lineno_in(a,e,i) \ + ((coff_backend_info ( a)->_bfd_coff_swap_lineno_in) (a,e,i)) + +#define bfd_coff_swap_reloc_out(abfd, i, o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_out) (abfd, i, o)) + +#define bfd_coff_swap_lineno_out(abfd, i, o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o)) + +#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \ + ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o)) + +#define bfd_coff_swap_sym_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o)) + +#define bfd_coff_swap_scnhdr_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_out) (abfd, i, o)) + +#define bfd_coff_swap_filehdr_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_out) (abfd, i, o)) + +#define bfd_coff_swap_aouthdr_out(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_out) (abfd, i, o)) + +#define bfd_coff_filhsz(abfd) (coff_backend_info (abfd)->_bfd_filhsz) +#define bfd_coff_aoutsz(abfd) (coff_backend_info (abfd)->_bfd_aoutsz) +#define bfd_coff_scnhsz(abfd) (coff_backend_info (abfd)->_bfd_scnhsz) +#define bfd_coff_symesz(abfd) (coff_backend_info (abfd)->_bfd_symesz) +#define bfd_coff_auxesz(abfd) (coff_backend_info (abfd)->_bfd_auxesz) +#define bfd_coff_relsz(abfd) (coff_backend_info (abfd)->_bfd_relsz) +#define bfd_coff_linesz(abfd) (coff_backend_info (abfd)->_bfd_linesz) +#define bfd_coff_filnmlen(abfd) (coff_backend_info (abfd)->_bfd_filnmlen) +#define bfd_coff_long_filenames(abfd) \ + (coff_backend_info (abfd)->_bfd_coff_long_filenames) +#define bfd_coff_long_section_names(abfd) \ + (coff_backend_info (abfd)->_bfd_coff_long_section_names) +#define bfd_coff_default_section_alignment_power(abfd) \ + (coff_backend_info (abfd)->_bfd_coff_default_section_alignment_power) +#define bfd_coff_swap_filehdr_in(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_filehdr_in) (abfd, i, o)) + +#define bfd_coff_swap_aouthdr_in(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_aouthdr_in) (abfd, i, o)) + +#define bfd_coff_swap_scnhdr_in(abfd, i,o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_scnhdr_in) (abfd, i, o)) + +#define bfd_coff_swap_reloc_in(abfd, i, o) \ + ((coff_backend_info (abfd)->_bfd_coff_swap_reloc_in) (abfd, i, o)) + +#define bfd_coff_bad_format_hook(abfd, filehdr) \ + ((coff_backend_info (abfd)->_bfd_coff_bad_format_hook) (abfd, filehdr)) + +#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\ + ((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr)) +#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\ + ((coff_backend_info (abfd)->_bfd_coff_mkobject_hook)\ + (abfd, filehdr, aouthdr)) + +#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr, name, section, flags_ptr)\ + ((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook)\ + (abfd, scnhdr, name, section, flags_ptr)) + +#define bfd_coff_set_alignment_hook(abfd, sec, scnhdr)\ + ((coff_backend_info (abfd)->_bfd_set_alignment_hook) (abfd, sec, scnhdr)) + +#define bfd_coff_slurp_symbol_table(abfd)\ + ((coff_backend_info (abfd)->_bfd_coff_slurp_symbol_table) (abfd)) + +#define bfd_coff_symname_in_debug(abfd, sym)\ + ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym)) + +#define bfd_coff_force_symnames_in_strings(abfd)\ + (coff_backend_info (abfd)->_bfd_coff_force_symnames_in_strings) + +#define bfd_coff_debug_string_prefix_length(abfd)\ + (coff_backend_info (abfd)->_bfd_coff_debug_string_prefix_length) + +#define bfd_coff_print_aux(abfd, file, base, symbol, aux, indaux)\ + ((coff_backend_info (abfd)->_bfd_coff_print_aux)\ + (abfd, file, base, symbol, aux, indaux)) + +#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order,\ + reloc, data, src_ptr, dst_ptr)\ + ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\ + (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)) + +#define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\ + ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\ + (abfd, section, reloc, shrink, link_info)) + +#define bfd_coff_classify_symbol(abfd, sym)\ + ((coff_backend_info (abfd)->_bfd_coff_classify_symbol)\ + (abfd, sym)) + +#define bfd_coff_compute_section_file_positions(abfd)\ + ((coff_backend_info (abfd)->_bfd_coff_compute_section_file_positions)\ + (abfd)) + +#define bfd_coff_start_final_link(obfd, info)\ + ((coff_backend_info (obfd)->_bfd_coff_start_final_link)\ + (obfd, info)) +#define bfd_coff_relocate_section(obfd,info,ibfd,o,con,rel,isyms,secs)\ + ((coff_backend_info (ibfd)->_bfd_coff_relocate_section)\ + (obfd, info, ibfd, o, con, rel, isyms, secs)) +#define bfd_coff_rtype_to_howto(abfd, sec, rel, h, sym, addendp)\ + ((coff_backend_info (abfd)->_bfd_coff_rtype_to_howto)\ + (abfd, sec, rel, h, sym, addendp)) +#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\ + ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\ + (obfd, info, ibfd, sec, rel, adjustedp)) +#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\ + value, string, cp, coll, hashp)\ + ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\ + (info, abfd, name, flags, section, value, string, cp, coll, hashp)) + +#define bfd_coff_link_output_has_begun(a,p) \ + ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p)) +#define bfd_coff_final_link_postscript(a,p) \ + ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p)) + +@end example +@subsubsection Writing relocations +To write relocations, the back end steps though the +canonical relocation table and create an +@code{internal_reloc}. The symbol index to use is removed from +the @code{offset} field in the symbol table supplied. The +address comes directly from the sum of the section base +address and the relocation offset; the type is dug directly +from the howto field. Then the @code{internal_reloc} is +swapped into the shape of an @code{external_reloc} and written +out to disk. + +@subsubsection Reading linenumbers +Creating the linenumber table is done by reading in the entire +coff linenumber table, and creating another table for internal use. + +A coff linenumber table is structured so that each function +is marked as having a line number of 0. Each line within the +function is an offset from the first line in the function. The +base of the line number information for the table is stored in +the symbol associated with the function. + +Note: The PE format uses line number 0 for a flag indicating a +new source file. + +The information is copied from the external to the internal +table, and each symbol which marks a function is marked by +pointing its... + +How does this work ? + +@subsubsection Reading relocations +Coff relocations are easily transformed into the internal BFD form +(@code{arelent}). + +Reading a coff relocation table is done in the following stages: + +@itemize @bullet + +@item +Read the entire coff relocation table into memory. + +@item +Process each relocation in turn; first swap it from the +external to the internal form. + +@item +Turn the symbol referenced in the relocation's symbol index +into a pointer into the canonical symbol table. +This table is the same as the one returned by a call to +@code{bfd_canonicalize_symtab}. The back end will call that +routine and save the result if a canonicalization hasn't been done. + +@item +The reloc index is turned into a pointer to a howto +structure, in a back end specific way. For instance, the 386 +and 960 use the @code{r_type} to directly produce an index +into a howto table vector; the 88k subtracts a number from the +@code{r_type} field and creates an addend field. +@end itemize + diff --git a/bfd/doc/core.texi b/bfd/doc/core.texi new file mode 100644 index 000000000..1f09445ef --- /dev/null +++ b/bfd/doc/core.texi @@ -0,0 +1,60 @@ +@section Core files + + +@subsection Core file functions + + +@strong{Description}@* +These are functions pertaining to core files. + +@findex bfd_core_file_failing_command +@subsubsection @code{bfd_core_file_failing_command} +@strong{Synopsis} +@example +const char *bfd_core_file_failing_command (bfd *abfd); +@end example +@strong{Description}@* +Return a read-only string explaining which program was running +when it failed and produced the core file @var{abfd}. + +@findex bfd_core_file_failing_signal +@subsubsection @code{bfd_core_file_failing_signal} +@strong{Synopsis} +@example +int bfd_core_file_failing_signal (bfd *abfd); +@end example +@strong{Description}@* +Returns the signal number which caused the core dump which +generated the file the BFD @var{abfd} is attached to. + +@findex core_file_matches_executable_p +@subsubsection @code{core_file_matches_executable_p} +@strong{Synopsis} +@example +bfd_boolean core_file_matches_executable_p + (bfd *core_bfd, bfd *exec_bfd); +@end example +@strong{Description}@* +Return @code{TRUE} if the core file attached to @var{core_bfd} +was generated by a run of the executable file attached to +@var{exec_bfd}, @code{FALSE} otherwise. + +@findex generic_core_file_matches_executable_p +@subsubsection @code{generic_core_file_matches_executable_p} +@strong{Synopsis} +@example +bfd_boolean generic_core_file_matches_executable_p + (bfd *core_bfd, bfd *exec_bfd); +@end example +@strong{Description}@* +Return TRUE if the core file attached to @var{core_bfd} +was generated by a run of the executable file attached +to @var{exec_bfd}. The match is based on executable +basenames only. + +Note: When not able to determine the core file failing +command or the executable name, we still return TRUE even +though we're not sure that core file and executable match. +This is to avoid generating a false warning in situations +where we really don't know whether they match or not. + diff --git a/bfd/doc/elf.texi b/bfd/doc/elf.texi new file mode 100644 index 000000000..4f9434cf6 --- /dev/null +++ b/bfd/doc/elf.texi @@ -0,0 +1,22 @@ +@section ELF backends +BFD support for ELF formats is being worked on. +Currently, the best supported back ends are for sparc and i386 +(running svr4 or Solaris 2). + +Documentation of the internals of the support code still needs +to be written. The code is changing quickly enough that we +haven't bothered yet. + +@findex bfd_elf_find_section +@subsubsection @code{bfd_elf_find_section} +@strong{Synopsis} +@example +struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name); +@end example +@strong{Description}@* +Helper functions for GDB to locate the string tables. +Since BFD hides string tables from callers, GDB needs to use an +internal hook to find them. Sun's .stabstr, in particular, +isn't even pointed to by the .stab section, so ordinary +mechanisms wouldn't work to find it, even if we had some. + diff --git a/bfd/doc/elfcode.texi b/bfd/doc/elfcode.texi new file mode 100644 index 000000000..e69de29bb diff --git a/bfd/doc/format.texi b/bfd/doc/format.texi new file mode 100644 index 000000000..9674acff4 --- /dev/null +++ b/bfd/doc/format.texi @@ -0,0 +1,112 @@ +@section File formats +A format is a BFD concept of high level file contents type. The +formats supported by BFD are: + +@itemize @bullet + +@item +@code{bfd_object} +@end itemize +The BFD may contain data, symbols, relocations and debug info. + +@itemize @bullet + +@item +@code{bfd_archive} +@end itemize +The BFD contains other BFDs and an optional index. + +@itemize @bullet + +@item +@code{bfd_core} +@end itemize +The BFD contains the result of an executable core dump. + +@subsection File format functions + + +@findex bfd_check_format +@subsubsection @code{bfd_check_format} +@strong{Synopsis} +@example +bfd_boolean bfd_check_format (bfd *abfd, bfd_format format); +@end example +@strong{Description}@* +Verify if the file attached to the BFD @var{abfd} is compatible +with the format @var{format} (i.e., one of @code{bfd_object}, +@code{bfd_archive} or @code{bfd_core}). + +If the BFD has been set to a specific target before the +call, only the named target and format combination is +checked. If the target has not been set, or has been set to +@code{default}, then all the known target backends is +interrogated to determine a match. If the default target +matches, it is used. If not, exactly one target must recognize +the file, or an error results. + +The function returns @code{TRUE} on success, otherwise @code{FALSE} +with one of the following error codes: + +@itemize @bullet + +@item +@code{bfd_error_invalid_operation} - +if @code{format} is not one of @code{bfd_object}, @code{bfd_archive} or +@code{bfd_core}. + +@item +@code{bfd_error_system_call} - +if an error occured during a read - even some file mismatches +can cause bfd_error_system_calls. + +@item +@code{file_not_recognised} - +none of the backends recognised the file format. + +@item +@code{bfd_error_file_ambiguously_recognized} - +more than one backend recognised the file format. +@end itemize + +@findex bfd_check_format_matches +@subsubsection @code{bfd_check_format_matches} +@strong{Synopsis} +@example +bfd_boolean bfd_check_format_matches + (bfd *abfd, bfd_format format, char ***matching); +@end example +@strong{Description}@* +Like @code{bfd_check_format}, except when it returns FALSE with +@code{bfd_errno} set to @code{bfd_error_file_ambiguously_recognized}. In that +case, if @var{matching} is not NULL, it will be filled in with +a NULL-terminated list of the names of the formats that matched, +allocated with @code{malloc}. +Then the user may choose a format and try again. + +When done with the list that @var{matching} points to, the caller +should free it. + +@findex bfd_set_format +@subsubsection @code{bfd_set_format} +@strong{Synopsis} +@example +bfd_boolean bfd_set_format (bfd *abfd, bfd_format format); +@end example +@strong{Description}@* +This function sets the file format of the BFD @var{abfd} to the +format @var{format}. If the target set in the BFD does not +support the format requested, the format is invalid, or the BFD +is not open for writing, then an error occurs. + +@findex bfd_format_string +@subsubsection @code{bfd_format_string} +@strong{Synopsis} +@example +const char *bfd_format_string (bfd_format format); +@end example +@strong{Description}@* +Return a pointer to a const string +@code{invalid}, @code{object}, @code{archive}, @code{core}, or @code{unknown}, +depending upon the value of @var{format}. + diff --git a/bfd/doc/hash.texi b/bfd/doc/hash.texi new file mode 100644 index 000000000..88d9585cc --- /dev/null +++ b/bfd/doc/hash.texi @@ -0,0 +1,247 @@ +@section Hash Tables +@cindex Hash tables +BFD provides a simple set of hash table functions. Routines +are provided to initialize a hash table, to free a hash table, +to look up a string in a hash table and optionally create an +entry for it, and to traverse a hash table. There is +currently no routine to delete an string from a hash table. + +The basic hash table does not permit any data to be stored +with a string. However, a hash table is designed to present a +base class from which other types of hash tables may be +derived. These derived types may store additional information +with the string. Hash tables were implemented in this way, +rather than simply providing a data pointer in a hash table +entry, because they were designed for use by the linker back +ends. The linker may create thousands of hash table entries, +and the overhead of allocating private data and storing and +following pointers becomes noticeable. + +The basic hash table code is in @code{hash.c}. + +@menu +* Creating and Freeing a Hash Table:: +* Looking Up or Entering a String:: +* Traversing a Hash Table:: +* Deriving a New Hash Table Type:: +@end menu + +@node Creating and Freeing a Hash Table, Looking Up or Entering a String, Hash Tables, Hash Tables +@subsection Creating and freeing a hash table +@findex bfd_hash_table_init +@findex bfd_hash_table_init_n +To create a hash table, create an instance of a @code{struct +bfd_hash_table} (defined in @code{bfd.h}) and call +@code{bfd_hash_table_init} (if you know approximately how many +entries you will need, the function @code{bfd_hash_table_init_n}, +which takes a @var{size} argument, may be used). +@code{bfd_hash_table_init} returns @code{FALSE} if some sort of +error occurs. + +@findex bfd_hash_newfunc +The function @code{bfd_hash_table_init} take as an argument a +function to use to create new entries. For a basic hash +table, use the function @code{bfd_hash_newfunc}. @xref{Deriving +a New Hash Table Type}, for why you would want to use a +different value for this argument. + +@findex bfd_hash_allocate +@code{bfd_hash_table_init} will create an objalloc which will be +used to allocate new entries. You may allocate memory on this +objalloc using @code{bfd_hash_allocate}. + +@findex bfd_hash_table_free +Use @code{bfd_hash_table_free} to free up all the memory that has +been allocated for a hash table. This will not free up the +@code{struct bfd_hash_table} itself, which you must provide. + +@findex bfd_hash_set_default_size +Use @code{bfd_hash_set_default_size} to set the default size of +hash table to use. + +@node Looking Up or Entering a String, Traversing a Hash Table, Creating and Freeing a Hash Table, Hash Tables +@subsection Looking up or entering a string +@findex bfd_hash_lookup +The function @code{bfd_hash_lookup} is used both to look up a +string in the hash table and to create a new entry. + +If the @var{create} argument is @code{FALSE}, @code{bfd_hash_lookup} +will look up a string. If the string is found, it will +returns a pointer to a @code{struct bfd_hash_entry}. If the +string is not found in the table @code{bfd_hash_lookup} will +return @code{NULL}. You should not modify any of the fields in +the returns @code{struct bfd_hash_entry}. + +If the @var{create} argument is @code{TRUE}, the string will be +entered into the hash table if it is not already there. +Either way a pointer to a @code{struct bfd_hash_entry} will be +returned, either to the existing structure or to a newly +created one. In this case, a @code{NULL} return means that an +error occurred. + +If the @var{create} argument is @code{TRUE}, and a new entry is +created, the @var{copy} argument is used to decide whether to +copy the string onto the hash table objalloc or not. If +@var{copy} is passed as @code{FALSE}, you must be careful not to +deallocate or modify the string as long as the hash table +exists. + +@node Traversing a Hash Table, Deriving a New Hash Table Type, Looking Up or Entering a String, Hash Tables +@subsection Traversing a hash table +@findex bfd_hash_traverse +The function @code{bfd_hash_traverse} may be used to traverse a +hash table, calling a function on each element. The traversal +is done in a random order. + +@code{bfd_hash_traverse} takes as arguments a function and a +generic @code{void *} pointer. The function is called with a +hash table entry (a @code{struct bfd_hash_entry *}) and the +generic pointer passed to @code{bfd_hash_traverse}. The function +must return a @code{boolean} value, which indicates whether to +continue traversing the hash table. If the function returns +@code{FALSE}, @code{bfd_hash_traverse} will stop the traversal and +return immediately. + +@node Deriving a New Hash Table Type, , Traversing a Hash Table, Hash Tables +@subsection Deriving a new hash table type +Many uses of hash tables want to store additional information +which each entry in the hash table. Some also find it +convenient to store additional information with the hash table +itself. This may be done using a derived hash table. + +Since C is not an object oriented language, creating a derived +hash table requires sticking together some boilerplate +routines with a few differences specific to the type of hash +table you want to create. + +An example of a derived hash table is the linker hash table. +The structures for this are defined in @code{bfdlink.h}. The +functions are in @code{linker.c}. + +You may also derive a hash table from an already derived hash +table. For example, the a.out linker backend code uses a hash +table derived from the linker hash table. + +@menu +* Define the Derived Structures:: +* Write the Derived Creation Routine:: +* Write Other Derived Routines:: +@end menu + +@node Define the Derived Structures, Write the Derived Creation Routine, Deriving a New Hash Table Type, Deriving a New Hash Table Type +@subsubsection Define the derived structures +You must define a structure for an entry in the hash table, +and a structure for the hash table itself. + +The first field in the structure for an entry in the hash +table must be of the type used for an entry in the hash table +you are deriving from. If you are deriving from a basic hash +table this is @code{struct bfd_hash_entry}, which is defined in +@code{bfd.h}. The first field in the structure for the hash +table itself must be of the type of the hash table you are +deriving from itself. If you are deriving from a basic hash +table, this is @code{struct bfd_hash_table}. + +For example, the linker hash table defines @code{struct +bfd_link_hash_entry} (in @code{bfdlink.h}). The first field, +@code{root}, is of type @code{struct bfd_hash_entry}. Similarly, +the first field in @code{struct bfd_link_hash_table}, @code{table}, +is of type @code{struct bfd_hash_table}. + +@node Write the Derived Creation Routine, Write Other Derived Routines, Define the Derived Structures, Deriving a New Hash Table Type +@subsubsection Write the derived creation routine +You must write a routine which will create and initialize an +entry in the hash table. This routine is passed as the +function argument to @code{bfd_hash_table_init}. + +In order to permit other hash tables to be derived from the +hash table you are creating, this routine must be written in a +standard way. + +The first argument to the creation routine is a pointer to a +hash table entry. This may be @code{NULL}, in which case the +routine should allocate the right amount of space. Otherwise +the space has already been allocated by a hash table type +derived from this one. + +After allocating space, the creation routine must call the +creation routine of the hash table type it is derived from, +passing in a pointer to the space it just allocated. This +will initialize any fields used by the base hash table. + +Finally the creation routine must initialize any local fields +for the new hash table type. + +Here is a boilerplate example of a creation routine. +@var{function_name} is the name of the routine. +@var{entry_type} is the type of an entry in the hash table you +are creating. @var{base_newfunc} is the name of the creation +routine of the hash table type your hash table is derived +from. + + +@example +struct bfd_hash_entry * +@var{function_name} (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) +@{ + struct @var{entry_type} *ret = (@var{entry_type} *) entry; + + /* Allocate the structure if it has not already been allocated by a + derived class. */ + if (ret == NULL) + @{ + ret = bfd_hash_allocate (table, sizeof (* ret)); + if (ret == NULL) + return NULL; + @} + + /* Call the allocation method of the base class. */ + ret = ((@var{entry_type} *) + @var{base_newfunc} ((struct bfd_hash_entry *) ret, table, string)); + + /* Initialize the local fields here. */ + + return (struct bfd_hash_entry *) ret; +@} +@end example +@strong{Description}@* +The creation routine for the linker hash table, which is in +@code{linker.c}, looks just like this example. +@var{function_name} is @code{_bfd_link_hash_newfunc}. +@var{entry_type} is @code{struct bfd_link_hash_entry}. +@var{base_newfunc} is @code{bfd_hash_newfunc}, the creation +routine for a basic hash table. + +@code{_bfd_link_hash_newfunc} also initializes the local fields +in a linker hash table entry: @code{type}, @code{written} and +@code{next}. + +@node Write Other Derived Routines, , Write the Derived Creation Routine, Deriving a New Hash Table Type +@subsubsection Write other derived routines +You will want to write other routines for your new hash table, +as well. + +You will want an initialization routine which calls the +initialization routine of the hash table you are deriving from +and initializes any other local fields. For the linker hash +table, this is @code{_bfd_link_hash_table_init} in @code{linker.c}. + +You will want a lookup routine which calls the lookup routine +of the hash table you are deriving from and casts the result. +The linker hash table uses @code{bfd_link_hash_lookup} in +@code{linker.c} (this actually takes an additional argument which +it uses to decide how to return the looked up value). + +You may want a traversal routine. This should just call the +traversal routine of the hash table you are deriving from with +appropriate casts. The linker hash table uses +@code{bfd_link_hash_traverse} in @code{linker.c}. + +These routines may simply be defined as macros. For example, +the a.out backend linker hash table, which is derived from the +linker hash table, uses macros for the lookup and traversal +routines. These are @code{aout_link_hash_lookup} and +@code{aout_link_hash_traverse} in aoutx.h. + diff --git a/bfd/doc/init.texi b/bfd/doc/init.texi new file mode 100644 index 000000000..ab735f8e9 --- /dev/null +++ b/bfd/doc/init.texi @@ -0,0 +1,16 @@ +@section Initialization + + +@subsection Initialization functions +These are the functions that handle initializing a BFD. + +@findex bfd_init +@subsubsection @code{bfd_init} +@strong{Synopsis} +@example +void bfd_init (void); +@end example +@strong{Description}@* +This routine must be called before any other BFD function to +initialize magical internal data structures. + diff --git a/bfd/doc/libbfd.texi b/bfd/doc/libbfd.texi new file mode 100644 index 000000000..fef6e0e84 --- /dev/null +++ b/bfd/doc/libbfd.texi @@ -0,0 +1,179 @@ +@section Implementation details + + +@subsection Internal functions + + +@strong{Description}@* +These routines are used within BFD. +They are not intended for export, but are documented here for +completeness. + +@findex bfd_write_bigendian_4byte_int +@subsubsection @code{bfd_write_bigendian_4byte_int} +@strong{Synopsis} +@example +bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int); +@end example +@strong{Description}@* +Write a 4 byte integer @var{i} to the output BFD @var{abfd}, in big +endian order regardless of what else is going on. This is useful in +archives. + +@findex bfd_put_size +@subsubsection @code{bfd_put_size} +@findex bfd_get_size +@subsubsection @code{bfd_get_size} +@strong{Description}@* +These macros as used for reading and writing raw data in +sections; each access (except for bytes) is vectored through +the target format of the BFD and mangled accordingly. The +mangling performs any necessary endian translations and +removes alignment restrictions. Note that types accepted and +returned by these macros are identical so they can be swapped +around in macros---for example, @file{libaout.h} defines @code{GET_WORD} +to either @code{bfd_get_32} or @code{bfd_get_64}. + +In the put routines, @var{val} must be a @code{bfd_vma}. If we are on a +system without prototypes, the caller is responsible for making +sure that is true, with a cast if necessary. We don't cast +them in the macro definitions because that would prevent @code{lint} +or @code{gcc -Wall} from detecting sins such as passing a pointer. +To detect calling these with less than a @code{bfd_vma}, use +@code{gcc -Wconversion} on a host with 64 bit @code{bfd_vma}'s. +@example + +/* Byte swapping macros for user section data. */ + +#define bfd_put_8(abfd, val, ptr) \ + ((void) (*((unsigned char *) (ptr)) = (val) & 0xff)) +#define bfd_put_signed_8 \ + bfd_put_8 +#define bfd_get_8(abfd, ptr) \ + (*(unsigned char *) (ptr) & 0xff) +#define bfd_get_signed_8(abfd, ptr) \ + (((*(unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80) + +#define bfd_put_16(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_putx16, ((val),(ptr))) +#define bfd_put_signed_16 \ + bfd_put_16 +#define bfd_get_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx16, (ptr)) +#define bfd_get_signed_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx_signed_16, (ptr)) + +#define bfd_put_32(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_putx32, ((val),(ptr))) +#define bfd_put_signed_32 \ + bfd_put_32 +#define bfd_get_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx32, (ptr)) +#define bfd_get_signed_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx_signed_32, (ptr)) + +#define bfd_put_64(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_putx64, ((val), (ptr))) +#define bfd_put_signed_64 \ + bfd_put_64 +#define bfd_get_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx64, (ptr)) +#define bfd_get_signed_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_getx_signed_64, (ptr)) + +#define bfd_get(bits, abfd, ptr) \ + ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr) \ + : (bits) == 16 ? bfd_get_16 (abfd, ptr) \ + : (bits) == 32 ? bfd_get_32 (abfd, ptr) \ + : (bits) == 64 ? bfd_get_64 (abfd, ptr) \ + : (abort (), (bfd_vma) - 1)) + +#define bfd_put(bits, abfd, val, ptr) \ + ((bits) == 8 ? bfd_put_8 (abfd, val, ptr) \ + : (bits) == 16 ? bfd_put_16 (abfd, val, ptr) \ + : (bits) == 32 ? bfd_put_32 (abfd, val, ptr) \ + : (bits) == 64 ? bfd_put_64 (abfd, val, ptr) \ + : (abort (), (void) 0)) + +@end example + +@findex bfd_h_put_size +@subsubsection @code{bfd_h_put_size} +@strong{Description}@* +These macros have the same function as their @code{bfd_get_x} +brethren, except that they are used for removing information +for the header records of object files. Believe it or not, +some object files keep their header records in big endian +order and their data in little endian order. +@example + +/* Byte swapping macros for file header data. */ + +#define bfd_h_put_8(abfd, val, ptr) \ + bfd_put_8 (abfd, val, ptr) +#define bfd_h_put_signed_8(abfd, val, ptr) \ + bfd_put_8 (abfd, val, ptr) +#define bfd_h_get_8(abfd, ptr) \ + bfd_get_8 (abfd, ptr) +#define bfd_h_get_signed_8(abfd, ptr) \ + bfd_get_signed_8 (abfd, ptr) + +#define bfd_h_put_16(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_h_putx16, (val, ptr)) +#define bfd_h_put_signed_16 \ + bfd_h_put_16 +#define bfd_h_get_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx16, (ptr)) +#define bfd_h_get_signed_16(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr)) + +#define bfd_h_put_32(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_h_putx32, (val, ptr)) +#define bfd_h_put_signed_32 \ + bfd_h_put_32 +#define bfd_h_get_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx32, (ptr)) +#define bfd_h_get_signed_32(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr)) + +#define bfd_h_put_64(abfd, val, ptr) \ + BFD_SEND (abfd, bfd_h_putx64, (val, ptr)) +#define bfd_h_put_signed_64 \ + bfd_h_put_64 +#define bfd_h_get_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx64, (ptr)) +#define bfd_h_get_signed_64(abfd, ptr) \ + BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr)) + +/* Aliases for the above, which should eventually go away. */ + +#define H_PUT_64 bfd_h_put_64 +#define H_PUT_32 bfd_h_put_32 +#define H_PUT_16 bfd_h_put_16 +#define H_PUT_8 bfd_h_put_8 +#define H_PUT_S64 bfd_h_put_signed_64 +#define H_PUT_S32 bfd_h_put_signed_32 +#define H_PUT_S16 bfd_h_put_signed_16 +#define H_PUT_S8 bfd_h_put_signed_8 +#define H_GET_64 bfd_h_get_64 +#define H_GET_32 bfd_h_get_32 +#define H_GET_16 bfd_h_get_16 +#define H_GET_8 bfd_h_get_8 +#define H_GET_S64 bfd_h_get_signed_64 +#define H_GET_S32 bfd_h_get_signed_32 +#define H_GET_S16 bfd_h_get_signed_16 +#define H_GET_S8 bfd_h_get_signed_8 + + +@end example + +@findex bfd_log2 +@subsubsection @code{bfd_log2} +@strong{Synopsis} +@example +unsigned int bfd_log2 (bfd_vma x); +@end example +@strong{Description}@* +Return the log base 2 of the value supplied, rounded up. E.g., an +@var{x} of 1025 returns 11. A @var{x} of 0 returns 0. + diff --git a/bfd/doc/linker.texi b/bfd/doc/linker.texi new file mode 100644 index 000000000..108e3f9eb --- /dev/null +++ b/bfd/doc/linker.texi @@ -0,0 +1,381 @@ +@section Linker Functions +@cindex Linker +The linker uses three special entry points in the BFD target +vector. It is not necessary to write special routines for +these entry points when creating a new BFD back end, since +generic versions are provided. However, writing them can +speed up linking and make it use significantly less runtime +memory. + +The first routine creates a hash table used by the other +routines. The second routine adds the symbols from an object +file to the hash table. The third routine takes all the +object files and links them together to create the output +file. These routines are designed so that the linker proper +does not need to know anything about the symbols in the object +files that it is linking. The linker merely arranges the +sections as directed by the linker script and lets BFD handle +the details of symbols and relocs. + +The second routine and third routines are passed a pointer to +a @code{struct bfd_link_info} structure (defined in +@code{bfdlink.h}) which holds information relevant to the link, +including the linker hash table (which was created by the +first routine) and a set of callback functions to the linker +proper. + +The generic linker routines are in @code{linker.c}, and use the +header file @code{genlink.h}. As of this writing, the only back +ends which have implemented versions of these routines are +a.out (in @code{aoutx.h}) and ECOFF (in @code{ecoff.c}). The a.out +routines are used as examples throughout this section. + +@menu +* Creating a Linker Hash Table:: +* Adding Symbols to the Hash Table:: +* Performing the Final Link:: +@end menu + +@node Creating a Linker Hash Table, Adding Symbols to the Hash Table, Linker Functions, Linker Functions +@subsection Creating a linker hash table +@cindex _bfd_link_hash_table_create in target vector +@cindex target vector (_bfd_link_hash_table_create) +The linker routines must create a hash table, which must be +derived from @code{struct bfd_link_hash_table} described in +@code{bfdlink.c}. @xref{Hash Tables}, for information on how to +create a derived hash table. This entry point is called using +the target vector of the linker output file. + +The @code{_bfd_link_hash_table_create} entry point must allocate +and initialize an instance of the desired hash table. If the +back end does not require any additional information to be +stored with the entries in the hash table, the entry point may +simply create a @code{struct bfd_link_hash_table}. Most likely, +however, some additional information will be needed. + +For example, with each entry in the hash table the a.out +linker keeps the index the symbol has in the final output file +(this index number is used so that when doing a relocatable +link the symbol index used in the output file can be quickly +filled in when copying over a reloc). The a.out linker code +defines the required structures and functions for a hash table +derived from @code{struct bfd_link_hash_table}. The a.out linker +hash table is created by the function +@code{NAME(aout,link_hash_table_create)}; it simply allocates +space for the hash table, initializes it, and returns a +pointer to it. + +When writing the linker routines for a new back end, you will +generally not know exactly which fields will be required until +you have finished. You should simply create a new hash table +which defines no additional fields, and then simply add fields +as they become necessary. + +@node Adding Symbols to the Hash Table, Performing the Final Link, Creating a Linker Hash Table, Linker Functions +@subsection Adding symbols to the hash table +@cindex _bfd_link_add_symbols in target vector +@cindex target vector (_bfd_link_add_symbols) +The linker proper will call the @code{_bfd_link_add_symbols} +entry point for each object file or archive which is to be +linked (typically these are the files named on the command +line, but some may also come from the linker script). The +entry point is responsible for examining the file. For an +object file, BFD must add any relevant symbol information to +the hash table. For an archive, BFD must determine which +elements of the archive should be used and adding them to the +link. + +The a.out version of this entry point is +@code{NAME(aout,link_add_symbols)}. + +@menu +* Differing file formats:: +* Adding symbols from an object file:: +* Adding symbols from an archive:: +@end menu + +@node Differing file formats, Adding symbols from an object file, Adding Symbols to the Hash Table, Adding Symbols to the Hash Table +@subsubsection Differing file formats +Normally all the files involved in a link will be of the same +format, but it is also possible to link together different +format object files, and the back end must support that. The +@code{_bfd_link_add_symbols} entry point is called via the target +vector of the file to be added. This has an important +consequence: the function may not assume that the hash table +is the type created by the corresponding +@code{_bfd_link_hash_table_create} vector. All the +@code{_bfd_link_add_symbols} function can assume about the hash +table is that it is derived from @code{struct +bfd_link_hash_table}. + +Sometimes the @code{_bfd_link_add_symbols} function must store +some information in the hash table entry to be used by the +@code{_bfd_final_link} function. In such a case the @code{creator} +field of the hash table must be checked to make sure that the +hash table was created by an object file of the same format. + +The @code{_bfd_final_link} routine must be prepared to handle a +hash entry without any extra information added by the +@code{_bfd_link_add_symbols} function. A hash entry without +extra information will also occur when the linker script +directs the linker to create a symbol. Note that, regardless +of how a hash table entry is added, all the fields will be +initialized to some sort of null value by the hash table entry +initialization function. + +See @code{ecoff_link_add_externals} for an example of how to +check the @code{creator} field before saving information (in this +case, the ECOFF external symbol debugging information) in a +hash table entry. + +@node Adding symbols from an object file, Adding symbols from an archive, Differing file formats, Adding Symbols to the Hash Table +@subsubsection Adding symbols from an object file +When the @code{_bfd_link_add_symbols} routine is passed an object +file, it must add all externally visible symbols in that +object file to the hash table. The actual work of adding the +symbol to the hash table is normally handled by the function +@code{_bfd_generic_link_add_one_symbol}. The +@code{_bfd_link_add_symbols} routine is responsible for reading +all the symbols from the object file and passing the correct +information to @code{_bfd_generic_link_add_one_symbol}. + +The @code{_bfd_link_add_symbols} routine should not use +@code{bfd_canonicalize_symtab} to read the symbols. The point of +providing this routine is to avoid the overhead of converting +the symbols into generic @code{asymbol} structures. + +@findex _bfd_generic_link_add_one_symbol +@code{_bfd_generic_link_add_one_symbol} handles the details of +combining common symbols, warning about multiple definitions, +and so forth. It takes arguments which describe the symbol to +add, notably symbol flags, a section, and an offset. The +symbol flags include such things as @code{BSF_WEAK} or +@code{BSF_INDIRECT}. The section is a section in the object +file, or something like @code{bfd_und_section_ptr} for an undefined +symbol or @code{bfd_com_section_ptr} for a common symbol. + +If the @code{_bfd_final_link} routine is also going to need to +read the symbol information, the @code{_bfd_link_add_symbols} +routine should save it somewhere attached to the object file +BFD. However, the information should only be saved if the +@code{keep_memory} field of the @code{info} argument is TRUE, so +that the @code{-no-keep-memory} linker switch is effective. + +The a.out function which adds symbols from an object file is +@code{aout_link_add_object_symbols}, and most of the interesting +work is in @code{aout_link_add_symbols}. The latter saves +pointers to the hash tables entries created by +@code{_bfd_generic_link_add_one_symbol} indexed by symbol number, +so that the @code{_bfd_final_link} routine does not have to call +the hash table lookup routine to locate the entry. + +@node Adding symbols from an archive, , Adding symbols from an object file, Adding Symbols to the Hash Table +@subsubsection Adding symbols from an archive +When the @code{_bfd_link_add_symbols} routine is passed an +archive, it must look through the symbols defined by the +archive and decide which elements of the archive should be +included in the link. For each such element it must call the +@code{add_archive_element} linker callback, and it must add the +symbols from the object file to the linker hash table. + +@findex _bfd_generic_link_add_archive_symbols +In most cases the work of looking through the symbols in the +archive should be done by the +@code{_bfd_generic_link_add_archive_symbols} function. This +function builds a hash table from the archive symbol table and +looks through the list of undefined symbols to see which +elements should be included. +@code{_bfd_generic_link_add_archive_symbols} is passed a function +to call to make the final decision about adding an archive +element to the link and to do the actual work of adding the +symbols to the linker hash table. + +The function passed to +@code{_bfd_generic_link_add_archive_symbols} must read the +symbols of the archive element and decide whether the archive +element should be included in the link. If the element is to +be included, the @code{add_archive_element} linker callback +routine must be called with the element as an argument, and +the elements symbols must be added to the linker hash table +just as though the element had itself been passed to the +@code{_bfd_link_add_symbols} function. + +When the a.out @code{_bfd_link_add_symbols} function receives an +archive, it calls @code{_bfd_generic_link_add_archive_symbols} +passing @code{aout_link_check_archive_element} as the function +argument. @code{aout_link_check_archive_element} calls +@code{aout_link_check_ar_symbols}. If the latter decides to add +the element (an element is only added if it provides a real, +non-common, definition for a previously undefined or common +symbol) it calls the @code{add_archive_element} callback and then +@code{aout_link_check_archive_element} calls +@code{aout_link_add_symbols} to actually add the symbols to the +linker hash table. + +The ECOFF back end is unusual in that it does not normally +call @code{_bfd_generic_link_add_archive_symbols}, because ECOFF +archives already contain a hash table of symbols. The ECOFF +back end searches the archive itself to avoid the overhead of +creating a new hash table. + +@node Performing the Final Link, , Adding Symbols to the Hash Table, Linker Functions +@subsection Performing the final link +@cindex _bfd_link_final_link in target vector +@cindex target vector (_bfd_final_link) +When all the input files have been processed, the linker calls +the @code{_bfd_final_link} entry point of the output BFD. This +routine is responsible for producing the final output file, +which has several aspects. It must relocate the contents of +the input sections and copy the data into the output sections. +It must build an output symbol table including any local +symbols from the input files and the global symbols from the +hash table. When producing relocatable output, it must +modify the input relocs and write them into the output file. +There may also be object format dependent work to be done. + +The linker will also call the @code{write_object_contents} entry +point when the BFD is closed. The two entry points must work +together in order to produce the correct output file. + +The details of how this works are inevitably dependent upon +the specific object file format. The a.out +@code{_bfd_final_link} routine is @code{NAME(aout,final_link)}. + +@menu +* Information provided by the linker:: +* Relocating the section contents:: +* Writing the symbol table:: +@end menu + +@node Information provided by the linker, Relocating the section contents, Performing the Final Link, Performing the Final Link +@subsubsection Information provided by the linker +Before the linker calls the @code{_bfd_final_link} entry point, +it sets up some data structures for the function to use. + +The @code{input_bfds} field of the @code{bfd_link_info} structure +will point to a list of all the input files included in the +link. These files are linked through the @code{link_next} field +of the @code{bfd} structure. + +Each section in the output file will have a list of +@code{link_order} structures attached to the @code{map_head.link_order} +field (the @code{link_order} structure is defined in +@code{bfdlink.h}). These structures describe how to create the +contents of the output section in terms of the contents of +various input sections, fill constants, and, eventually, other +types of information. They also describe relocs that must be +created by the BFD backend, but do not correspond to any input +file; this is used to support -Ur, which builds constructors +while generating a relocatable object file. + +@node Relocating the section contents, Writing the symbol table, Information provided by the linker, Performing the Final Link +@subsubsection Relocating the section contents +The @code{_bfd_final_link} function should look through the +@code{link_order} structures attached to each section of the +output file. Each @code{link_order} structure should either be +handled specially, or it should be passed to the function +@code{_bfd_default_link_order} which will do the right thing +(@code{_bfd_default_link_order} is defined in @code{linker.c}). + +For efficiency, a @code{link_order} of type +@code{bfd_indirect_link_order} whose associated section belongs +to a BFD of the same format as the output BFD must be handled +specially. This type of @code{link_order} describes part of an +output section in terms of a section belonging to one of the +input files. The @code{_bfd_final_link} function should read the +contents of the section and any associated relocs, apply the +relocs to the section contents, and write out the modified +section contents. If performing a relocatable link, the +relocs themselves must also be modified and written out. + +@findex _bfd_relocate_contents +@findex _bfd_final_link_relocate +The functions @code{_bfd_relocate_contents} and +@code{_bfd_final_link_relocate} provide some general support for +performing the actual relocations, notably overflow checking. +Their arguments include information about the symbol the +relocation is against and a @code{reloc_howto_type} argument +which describes the relocation to perform. These functions +are defined in @code{reloc.c}. + +The a.out function which handles reading, relocating, and +writing section contents is @code{aout_link_input_section}. The +actual relocation is done in @code{aout_link_input_section_std} +and @code{aout_link_input_section_ext}. + +@node Writing the symbol table, , Relocating the section contents, Performing the Final Link +@subsubsection Writing the symbol table +The @code{_bfd_final_link} function must gather all the symbols +in the input files and write them out. It must also write out +all the symbols in the global hash table. This must be +controlled by the @code{strip} and @code{discard} fields of the +@code{bfd_link_info} structure. + +The local symbols of the input files will not have been +entered into the linker hash table. The @code{_bfd_final_link} +routine must consider each input file and include the symbols +in the output file. It may be convenient to do this when +looking through the @code{link_order} structures, or it may be +done by stepping through the @code{input_bfds} list. + +The @code{_bfd_final_link} routine must also traverse the global +hash table to gather all the externally visible symbols. It +is possible that most of the externally visible symbols may be +written out when considering the symbols of each input file, +but it is still necessary to traverse the hash table since the +linker script may have defined some symbols that are not in +any of the input files. + +The @code{strip} field of the @code{bfd_link_info} structure +controls which symbols are written out. The possible values +are listed in @code{bfdlink.h}. If the value is @code{strip_some}, +then the @code{keep_hash} field of the @code{bfd_link_info} +structure is a hash table of symbols to keep; each symbol +should be looked up in this hash table, and only symbols which +are present should be included in the output file. + +If the @code{strip} field of the @code{bfd_link_info} structure +permits local symbols to be written out, the @code{discard} field +is used to further controls which local symbols are included +in the output file. If the value is @code{discard_l}, then all +local symbols which begin with a certain prefix are discarded; +this is controlled by the @code{bfd_is_local_label_name} entry point. + +The a.out backend handles symbols by calling +@code{aout_link_write_symbols} on each input BFD and then +traversing the global hash table with the function +@code{aout_link_write_other_symbol}. It builds a string table +while writing out the symbols, which is written to the output +file at the end of @code{NAME(aout,final_link)}. + +@findex bfd_link_split_section +@subsubsection @code{bfd_link_split_section} +@strong{Synopsis} +@example +bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec); +@end example +@strong{Description}@* +Return nonzero if @var{sec} should be split during a +reloceatable or final link. +@example +#define bfd_link_split_section(abfd, sec) \ + BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec)) + +@end example + +@findex bfd_section_already_linked +@subsubsection @code{bfd_section_already_linked} +@strong{Synopsis} +@example +void bfd_section_already_linked (bfd *abfd, asection *sec, + struct bfd_link_info *info); +@end example +@strong{Description}@* +Check if @var{sec} has been already linked during a reloceatable +or final link. +@example +#define bfd_section_already_linked(abfd, sec, info) \ + BFD_SEND (abfd, _section_already_linked, (abfd, sec, info)) + +@end example + diff --git a/bfd/doc/mmo.texi b/bfd/doc/mmo.texi new file mode 100644 index 000000000..b0d726aad --- /dev/null +++ b/bfd/doc/mmo.texi @@ -0,0 +1,365 @@ +@section mmo backend +The mmo object format is used exclusively together with Professor +Donald E.@: Knuth's educational 64-bit processor MMIX. The simulator +@command{mmix} which is available at +@url{http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz} +understands this format. That package also includes a combined +assembler and linker called @command{mmixal}. The mmo format has +no advantages feature-wise compared to e.g. ELF. It is a simple +non-relocatable object format with no support for archives or +debugging information, except for symbol value information and +line numbers (which is not yet implemented in BFD). See +@url{http://www-cs-faculty.stanford.edu/~knuth/mmix.html} for more +information about MMIX. The ELF format is used for intermediate +object files in the BFD implementation. + +@c We want to xref the symbol table node. A feature in "chew" +@c requires that "commands" do not contain spaces in the +@c arguments. Hence the hyphen in "Symbol-table". +@menu +* File layout:: +* Symbol-table:: +* mmo section mapping:: +@end menu + +@node File layout, Symbol-table, mmo, mmo +@subsection File layout +The mmo file contents is not partitioned into named sections as +with e.g.@: ELF. Memory areas is formed by specifying the +location of the data that follows. Only the memory area +@samp{0x0000@dots{}00} to @samp{0x01ff@dots{}ff} is executable, so +it is used for code (and constants) and the area +@samp{0x2000@dots{}00} to @samp{0x20ff@dots{}ff} is used for +writable data. @xref{mmo section mapping}. + +There is provision for specifying ``special data'' of 65536 +different types. We use type 80 (decimal), arbitrarily chosen the +same as the ELF @code{e_machine} number for MMIX, filling it with +section information normally found in ELF objects. @xref{mmo +section mapping}. + +Contents is entered as 32-bit words, xor:ed over previous +contents, always zero-initialized. A word that starts with the +byte @samp{0x98} forms a command called a @samp{lopcode}, where +the next byte distinguished between the thirteen lopcodes. The +two remaining bytes, called the @samp{Y} and @samp{Z} fields, or +the @samp{YZ} field (a 16-bit big-endian number), are used for +various purposes different for each lopcode. As documented in +@url{http://www-cs-faculty.stanford.edu/~knuth/mmixal-intro.ps.gz}, +the lopcodes are: + +@table @code +@item lop_quote +0x98000001. The next word is contents, regardless of whether it +starts with 0x98 or not. + +@item lop_loc +0x9801YYZZ, where @samp{Z} is 1 or 2. This is a location +directive, setting the location for the next data to the next +32-bit word (for @math{Z = 1}) or 64-bit word (for @math{Z = 2}), +plus @math{Y * 2^56}. Normally @samp{Y} is 0 for the text segment +and 2 for the data segment. + +@item lop_skip +0x9802YYZZ. Increase the current location by @samp{YZ} bytes. + +@item lop_fixo +0x9803YYZZ, where @samp{Z} is 1 or 2. Store the current location +as 64 bits into the location pointed to by the next 32-bit +(@math{Z = 1}) or 64-bit (@math{Z = 2}) word, plus @math{Y * +2^56}. + +@item lop_fixr +0x9804YYZZ. @samp{YZ} is stored into the current location plus +@math{2 - 4 * YZ}. + +@item lop_fixrx +0x980500ZZ. @samp{Z} is 16 or 24. A value @samp{L} derived from +the following 32-bit word are used in a manner similar to +@samp{YZ} in lop_fixr: it is xor:ed into the current location +minus @math{4 * L}. The first byte of the word is 0 or 1. If it +is 1, then @math{L = (@var{lowest 24 bits of word}) - 2^Z}, if 0, +then @math{L = (@var{lowest 24 bits of word})}. + +@item lop_file +0x9806YYZZ. @samp{Y} is the file number, @samp{Z} is count of +32-bit words. Set the file number to @samp{Y} and the line +counter to 0. The next @math{Z * 4} bytes contain the file name, +padded with zeros if the count is not a multiple of four. The +same @samp{Y} may occur multiple times, but @samp{Z} must be 0 for +all but the first occurrence. + +@item lop_line +0x9807YYZZ. @samp{YZ} is the line number. Together with +lop_file, it forms the source location for the next 32-bit word. +Note that for each non-lopcode 32-bit word, line numbers are +assumed incremented by one. + +@item lop_spec +0x9808YYZZ. @samp{YZ} is the type number. Data until the next +lopcode other than lop_quote forms special data of type @samp{YZ}. +@xref{mmo section mapping}. + +Other types than 80, (or type 80 with a content that does not +parse) is stored in sections named @code{.MMIX.spec_data.@var{n}} +where @var{n} is the @samp{YZ}-type. The flags for such a +sections say not to allocate or load the data. The vma is 0. +Contents of multiple occurrences of special data @var{n} is +concatenated to the data of the previous lop_spec @var{n}s. The +location in data or code at which the lop_spec occurred is lost. + +@item lop_pre +0x980901ZZ. The first lopcode in a file. The @samp{Z} field forms the +length of header information in 32-bit words, where the first word +tells the time in seconds since @samp{00:00:00 GMT Jan 1 1970}. + +@item lop_post +0x980a00ZZ. @math{Z > 32}. This lopcode follows after all +content-generating lopcodes in a program. The @samp{Z} field +denotes the value of @samp{rG} at the beginning of the program. +The following @math{256 - Z} big-endian 64-bit words are loaded +into global registers @samp{$G} @dots{} @samp{$255}. + +@item lop_stab +0x980b0000. The next-to-last lopcode in a program. Must follow +immediately after the lop_post lopcode and its data. After this +lopcode follows all symbols in a compressed format +(@pxref{Symbol-table}). + +@item lop_end +0x980cYYZZ. The last lopcode in a program. It must follow the +lop_stab lopcode and its data. The @samp{YZ} field contains the +number of 32-bit words of symbol table information after the +preceding lop_stab lopcode. +@end table + +Note that the lopcode "fixups"; @code{lop_fixr}, @code{lop_fixrx} and +@code{lop_fixo} are not generated by BFD, but are handled. They are +generated by @code{mmixal}. + +This trivial one-label, one-instruction file: + +@example + :Main TRAP 1,2,3 +@end example + +can be represented this way in mmo: + +@example + 0x98090101 - lop_pre, one 32-bit word with timestamp. + + 0x98010002 - lop_loc, text segment, using a 64-bit address. + Note that mmixal does not emit this for the file above. + 0x00000000 - Address, high 32 bits. + 0x00000000 - Address, low 32 bits. + 0x98060002 - lop_file, 2 32-bit words for file-name. + 0x74657374 - "test" + 0x2e730000 - ".s\0\0" + 0x98070001 - lop_line, line 1. + 0x00010203 - TRAP 1,2,3 + 0x980a00ff - lop_post, setting $255 to 0. + 0x00000000 + 0x00000000 + 0x980b0000 - lop_stab for ":Main" = 0, serial 1. + 0x203a4040 @xref{Symbol-table}. + 0x10404020 + 0x4d206120 + 0x69016e00 + 0x81000000 + 0x980c0005 - lop_end; symbol table contained five 32-bit words. +@end example +@node Symbol-table, mmo section mapping, File layout, mmo +@subsection Symbol table format +From mmixal.w (or really, the generated mmixal.tex) in +@url{http://www-cs-faculty.stanford.edu/~knuth/programs/mmix.tar.gz}): +``Symbols are stored and retrieved by means of a @samp{ternary +search trie}, following ideas of Bentley and Sedgewick. (See +ACM--SIAM Symp.@: on Discrete Algorithms @samp{8} (1997), 360--369; +R.@:Sedgewick, @samp{Algorithms in C} (Reading, Mass.@: +Addison--Wesley, 1998), @samp{15.4}.) Each trie node stores a +character, and there are branches to subtries for the cases where +a given character is less than, equal to, or greater than the +character in the trie. There also is a pointer to a symbol table +entry if a symbol ends at the current node.'' + +So it's a tree encoded as a stream of bytes. The stream of bytes +acts on a single virtual global symbol, adding and removing +characters and signalling complete symbol points. Here, we read +the stream and create symbols at the completion points. + +First, there's a control byte @code{m}. If any of the listed bits +in @code{m} is nonzero, we execute what stands at the right, in +the listed order: + +@example + (MMO3_LEFT) + 0x40 - Traverse left trie. + (Read a new command byte and recurse.) + + (MMO3_SYMBITS) + 0x2f - Read the next byte as a character and store it in the + current character position; increment character position. + Test the bits of @code{m}: + + (MMO3_WCHAR) + 0x80 - The character is 16-bit (so read another byte, + merge into current character. + + (MMO3_TYPEBITS) + 0xf - We have a complete symbol; parse the type, value + and serial number and do what should be done + with a symbol. The type and length information + is in j = (m & 0xf). + + (MMO3_REGQUAL_BITS) + j == 0xf: A register variable. The following + byte tells which register. + j <= 8: An absolute symbol. Read j bytes as the + big-endian number the symbol equals. + A j = 2 with two zero bytes denotes an + unknown symbol. + j > 8: As with j <= 8, but add (0x20 << 56) + to the value in the following j - 8 + bytes. + + Then comes the serial number, as a variant of + uleb128, but better named ubeb128: + Read bytes and shift the previous value left 7 + (multiply by 128). Add in the new byte, repeat + until a byte has bit 7 set. The serial number + is the computed value minus 128. + + (MMO3_MIDDLE) + 0x20 - Traverse middle trie. (Read a new command byte + and recurse.) Decrement character position. + + (MMO3_RIGHT) + 0x10 - Traverse right trie. (Read a new command byte and + recurse.) +@end example + +Let's look again at the @code{lop_stab} for the trivial file +(@pxref{File layout}). + +@example + 0x980b0000 - lop_stab for ":Main" = 0, serial 1. + 0x203a4040 + 0x10404020 + 0x4d206120 + 0x69016e00 + 0x81000000 +@end example + +This forms the trivial trie (note that the path between ``:'' and +``M'' is redundant): + +@example + 203a ":" + 40 / + 40 / + 10 \ + 40 / + 40 / + 204d "M" + 2061 "a" + 2069 "i" + 016e "n" is the last character in a full symbol, and + with a value represented in one byte. + 00 The value is 0. + 81 The serial number is 1. +@end example + +@node mmo section mapping, , Symbol-table, mmo +@subsection mmo section mapping +The implementation in BFD uses special data type 80 (decimal) to +encapsulate and describe named sections, containing e.g.@: debug +information. If needed, any datum in the encapsulation will be +quoted using lop_quote. First comes a 32-bit word holding the +number of 32-bit words containing the zero-terminated zero-padded +segment name. After the name there's a 32-bit word holding flags +describing the section type. Then comes a 64-bit big-endian word +with the section length (in bytes), then another with the section +start address. Depending on the type of section, the contents +might follow, zero-padded to 32-bit boundary. For a loadable +section (such as data or code), the contents might follow at some +later point, not necessarily immediately, as a lop_loc with the +same start address as in the section description, followed by the +contents. This in effect forms a descriptor that must be emitted +before the actual contents. Sections described this way must not +overlap. + +For areas that don't have such descriptors, synthetic sections are +formed by BFD. Consecutive contents in the two memory areas +@samp{0x0000@dots{}00} to @samp{0x01ff@dots{}ff} and +@samp{0x2000@dots{}00} to @samp{0x20ff@dots{}ff} are entered in +sections named @code{.text} and @code{.data} respectively. If an area +is not otherwise described, but would together with a neighboring +lower area be less than @samp{0x40000000} bytes long, it is joined +with the lower area and the gap is zero-filled. For other cases, +a new section is formed, named @code{.MMIX.sec.@var{n}}. Here, +@var{n} is a number, a running count through the mmo file, +starting at 0. + +A loadable section specified as: + +@example + .section secname,"ax" + TETRA 1,2,3,4,-1,-2009 + BYTE 80 +@end example + +and linked to address @samp{0x4}, is represented by the sequence: + +@example + 0x98080050 - lop_spec 80 + 0x00000002 - two 32-bit words for the section name + 0x7365636e - "secn" + 0x616d6500 - "ame\0" + 0x00000033 - flags CODE, READONLY, LOAD, ALLOC + 0x00000000 - high 32 bits of section length + 0x0000001c - section length is 28 bytes; 6 * 4 + 1 + alignment to 32 bits + 0x00000000 - high 32 bits of section address + 0x00000004 - section address is 4 + 0x98010002 - 64 bits with address of following data + 0x00000000 - high 32 bits of address + 0x00000004 - low 32 bits: data starts at address 4 + 0x00000001 - 1 + 0x00000002 - 2 + 0x00000003 - 3 + 0x00000004 - 4 + 0xffffffff - -1 + 0xfffff827 - -2009 + 0x50000000 - 80 as a byte, padded with zeros. +@end example + +Note that the lop_spec wrapping does not include the section +contents. Compare this to a non-loaded section specified as: + +@example + .section thirdsec + TETRA 200001,100002 + BYTE 38,40 +@end example + +This, when linked to address @samp{0x200000000000001c}, is +represented by: + +@example + 0x98080050 - lop_spec 80 + 0x00000002 - two 32-bit words for the section name + 0x7365636e - "thir" + 0x616d6500 - "dsec" + 0x00000010 - flag READONLY + 0x00000000 - high 32 bits of section length + 0x0000000c - section length is 12 bytes; 2 * 4 + 2 + alignment to 32 bits + 0x20000000 - high 32 bits of address + 0x0000001c - low 32 bits of address 0x200000000000001c + 0x00030d41 - 200001 + 0x000186a2 - 100002 + 0x26280000 - 38, 40 as bytes, padded with zeros +@end example + +For the latter example, the section contents must not be +loaded in memory, and is therefore specified as part of the +special data. The address is usually unimportant but might +provide information for e.g.@: the DWARF 2 debugging format. diff --git a/bfd/doc/opncls.texi b/bfd/doc/opncls.texi new file mode 100644 index 000000000..94f2f9fc5 --- /dev/null +++ b/bfd/doc/opncls.texi @@ -0,0 +1,372 @@ +@section Opening and closing BFDs + + +@subsection Functions for opening and closing + + +@findex bfd_fopen +@subsubsection @code{bfd_fopen} +@strong{Synopsis} +@example +bfd *bfd_fopen (const char *filename, const char *target, + const char *mode, int fd); +@end example +@strong{Description}@* +Open the file @var{filename} with the target @var{target}. +Return a pointer to the created BFD. If @var{fd} is not -1, +then @code{fdopen} is used to open the file; otherwise, @code{fopen} +is used. @var{mode} is passed directly to @code{fopen} or +@code{fdopen}. + +Calls @code{bfd_find_target}, so @var{target} is interpreted as by +that function. + +The new BFD is marked as cacheable iff @var{fd} is -1. + +If @code{NULL} is returned then an error has occured. Possible errors +are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} or +@code{system_call} error. + +@findex bfd_openr +@subsubsection @code{bfd_openr} +@strong{Synopsis} +@example +bfd *bfd_openr (const char *filename, const char *target); +@end example +@strong{Description}@* +Open the file @var{filename} (using @code{fopen}) with the target +@var{target}. Return a pointer to the created BFD. + +Calls @code{bfd_find_target}, so @var{target} is interpreted as by +that function. + +If @code{NULL} is returned then an error has occured. Possible errors +are @code{bfd_error_no_memory}, @code{bfd_error_invalid_target} or +@code{system_call} error. + +@findex bfd_fdopenr +@subsubsection @code{bfd_fdopenr} +@strong{Synopsis} +@example +bfd *bfd_fdopenr (const char *filename, const char *target, int fd); +@end example +@strong{Description}@* +@code{bfd_fdopenr} is to @code{bfd_fopenr} much like @code{fdopen} is to +@code{fopen}. It opens a BFD on a file already described by the +@var{fd} supplied. + +When the file is later @code{bfd_close}d, the file descriptor will +be closed. If the caller desires that this file descriptor be +cached by BFD (opened as needed, closed as needed to free +descriptors for other opens), with the supplied @var{fd} used as +an initial file descriptor (but subject to closure at any time), +call bfd_set_cacheable(bfd, 1) on the returned BFD. The default +is to assume no caching; the file descriptor will remain open +until @code{bfd_close}, and will not be affected by BFD operations +on other files. + +Possible errors are @code{bfd_error_no_memory}, +@code{bfd_error_invalid_target} and @code{bfd_error_system_call}. + +@findex bfd_openstreamr +@subsubsection @code{bfd_openstreamr} +@strong{Synopsis} +@example +bfd *bfd_openstreamr (const char *, const char *, void *); +@end example +@strong{Description}@* +Open a BFD for read access on an existing stdio stream. When +the BFD is passed to @code{bfd_close}, the stream will be closed. + +@findex bfd_openr_iovec +@subsubsection @code{bfd_openr_iovec} +@strong{Synopsis} +@example +bfd *bfd_openr_iovec (const char *filename, const char *target, + void *(*open) (struct bfd *nbfd, + void *open_closure), + void *open_closure, + file_ptr (*pread) (struct bfd *nbfd, + void *stream, + void *buf, + file_ptr nbytes, + file_ptr offset), + int (*close) (struct bfd *nbfd, + void *stream), + int (*stat) (struct bfd *abfd, + void *stream, + struct stat *sb)); +@end example +@strong{Description}@* +Create and return a BFD backed by a read-only @var{stream}. +The @var{stream} is created using @var{open}, accessed using +@var{pread} and destroyed using @var{close}. + +Calls @code{bfd_find_target}, so @var{target} is interpreted as by +that function. + +Calls @var{open} (which can call @code{bfd_zalloc} and +@code{bfd_get_filename}) to obtain the read-only stream backing +the BFD. @var{open} either succeeds returning the +non-@code{NULL} @var{stream}, or fails returning @code{NULL} +(setting @code{bfd_error}). + +Calls @var{pread} to request @var{nbytes} of data from +@var{stream} starting at @var{offset} (e.g., via a call to +@code{bfd_read}). @var{pread} either succeeds returning the +number of bytes read (which can be less than @var{nbytes} when +end-of-file), or fails returning -1 (setting @code{bfd_error}). + +Calls @var{close} when the BFD is later closed using +@code{bfd_close}. @var{close} either succeeds returning 0, or +fails returning -1 (setting @code{bfd_error}). + +Calls @var{stat} to fill in a stat structure for bfd_stat, +bfd_get_size, and bfd_get_mtime calls. @var{stat} returns 0 +on success, or returns -1 on failure (setting @code{bfd_error}). + +If @code{bfd_openr_iovec} returns @code{NULL} then an error has +occurred. Possible errors are @code{bfd_error_no_memory}, +@code{bfd_error_invalid_target} and @code{bfd_error_system_call}. + +@findex bfd_openw +@subsubsection @code{bfd_openw} +@strong{Synopsis} +@example +bfd *bfd_openw (const char *filename, const char *target); +@end example +@strong{Description}@* +Create a BFD, associated with file @var{filename}, using the +file format @var{target}, and return a pointer to it. + +Possible errors are @code{bfd_error_system_call}, @code{bfd_error_no_memory}, +@code{bfd_error_invalid_target}. + +@findex bfd_close +@subsubsection @code{bfd_close} +@strong{Synopsis} +@example +bfd_boolean bfd_close (bfd *abfd); +@end example +@strong{Description}@* +Close a BFD. If the BFD was open for writing, then pending +operations are completed and the file written out and closed. +If the created file is executable, then @code{chmod} is called +to mark it as such. + +All memory attached to the BFD is released. + +The file descriptor associated with the BFD is closed (even +if it was passed in to BFD by @code{bfd_fdopenr}). + +@strong{Returns}@* +@code{TRUE} is returned if all is ok, otherwise @code{FALSE}. + +@findex bfd_close_all_done +@subsubsection @code{bfd_close_all_done} +@strong{Synopsis} +@example +bfd_boolean bfd_close_all_done (bfd *); +@end example +@strong{Description}@* +Close a BFD. Differs from @code{bfd_close} since it does not +complete any pending operations. This routine would be used +if the application had just used BFD for swapping and didn't +want to use any of the writing code. + +If the created file is executable, then @code{chmod} is called +to mark it as such. + +All memory attached to the BFD is released. + +@strong{Returns}@* +@code{TRUE} is returned if all is ok, otherwise @code{FALSE}. + +@findex bfd_create +@subsubsection @code{bfd_create} +@strong{Synopsis} +@example +bfd *bfd_create (const char *filename, bfd *templ); +@end example +@strong{Description}@* +Create a new BFD in the manner of @code{bfd_openw}, but without +opening a file. The new BFD takes the target from the target +used by @var{template}. The format is always set to @code{bfd_object}. + +@findex bfd_make_writable +@subsubsection @code{bfd_make_writable} +@strong{Synopsis} +@example +bfd_boolean bfd_make_writable (bfd *abfd); +@end example +@strong{Description}@* +Takes a BFD as created by @code{bfd_create} and converts it +into one like as returned by @code{bfd_openw}. It does this +by converting the BFD to BFD_IN_MEMORY. It's assumed that +you will call @code{bfd_make_readable} on this bfd later. + +@strong{Returns}@* +@code{TRUE} is returned if all is ok, otherwise @code{FALSE}. + +@findex bfd_make_readable +@subsubsection @code{bfd_make_readable} +@strong{Synopsis} +@example +bfd_boolean bfd_make_readable (bfd *abfd); +@end example +@strong{Description}@* +Takes a BFD as created by @code{bfd_create} and +@code{bfd_make_writable} and converts it into one like as +returned by @code{bfd_openr}. It does this by writing the +contents out to the memory buffer, then reversing the +direction. + +@strong{Returns}@* +@code{TRUE} is returned if all is ok, otherwise @code{FALSE}. + +@findex bfd_alloc +@subsubsection @code{bfd_alloc} +@strong{Synopsis} +@example +void *bfd_alloc (bfd *abfd, bfd_size_type wanted); +@end example +@strong{Description}@* +Allocate a block of @var{wanted} bytes of memory attached to +@code{abfd} and return a pointer to it. + +@findex bfd_alloc2 +@subsubsection @code{bfd_alloc2} +@strong{Synopsis} +@example +void *bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); +@end example +@strong{Description}@* +Allocate a block of @var{nmemb} elements of @var{size} bytes each +of memory attached to @code{abfd} and return a pointer to it. + +@findex bfd_zalloc +@subsubsection @code{bfd_zalloc} +@strong{Synopsis} +@example +void *bfd_zalloc (bfd *abfd, bfd_size_type wanted); +@end example +@strong{Description}@* +Allocate a block of @var{wanted} bytes of zeroed memory +attached to @code{abfd} and return a pointer to it. + +@findex bfd_zalloc2 +@subsubsection @code{bfd_zalloc2} +@strong{Synopsis} +@example +void *bfd_zalloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size); +@end example +@strong{Description}@* +Allocate a block of @var{nmemb} elements of @var{size} bytes each +of zeroed memory attached to @code{abfd} and return a pointer to it. + +@findex bfd_calc_gnu_debuglink_crc32 +@subsubsection @code{bfd_calc_gnu_debuglink_crc32} +@strong{Synopsis} +@example +unsigned long bfd_calc_gnu_debuglink_crc32 + (unsigned long crc, const unsigned char *buf, bfd_size_type len); +@end example +@strong{Description}@* +Computes a CRC value as used in the .gnu_debuglink section. +Advances the previously computed @var{crc} value by computing +and adding in the crc32 for @var{len} bytes of @var{buf}. + +@strong{Returns}@* +Return the updated CRC32 value. + +@findex get_debug_link_info +@subsubsection @code{get_debug_link_info} +@strong{Synopsis} +@example +char *get_debug_link_info (bfd *abfd, unsigned long *crc32_out); +@end example +@strong{Description}@* +fetch the filename and CRC32 value for any separate debuginfo +associated with @var{abfd}. Return NULL if no such info found, +otherwise return filename and update @var{crc32_out}. + +@findex separate_debug_file_exists +@subsubsection @code{separate_debug_file_exists} +@strong{Synopsis} +@example +bfd_boolean separate_debug_file_exists + (char *name, unsigned long crc32); +@end example +@strong{Description}@* +Checks to see if @var{name} is a file and if its contents +match @var{crc32}. + +@findex find_separate_debug_file +@subsubsection @code{find_separate_debug_file} +@strong{Synopsis} +@example +char *find_separate_debug_file (bfd *abfd); +@end example +@strong{Description}@* +Searches @var{abfd} for a reference to separate debugging +information, scans various locations in the filesystem, including +the file tree rooted at @var{debug_file_directory}, and returns a +filename of such debugging information if the file is found and has +matching CRC32. Returns NULL if no reference to debugging file +exists, or file cannot be found. + +@findex bfd_follow_gnu_debuglink +@subsubsection @code{bfd_follow_gnu_debuglink} +@strong{Synopsis} +@example +char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir); +@end example +@strong{Description}@* +Takes a BFD and searches it for a .gnu_debuglink section. If this +section is found, it examines the section for the name and checksum +of a '.debug' file containing auxiliary debugging information. It +then searches the filesystem for this .debug file in some standard +locations, including the directory tree rooted at @var{dir}, and if +found returns the full filename. + +If @var{dir} is NULL, it will search a default path configured into +libbfd at build time. [XXX this feature is not currently +implemented]. + +@strong{Returns}@* +@code{NULL} on any errors or failure to locate the .debug file, +otherwise a pointer to a heap-allocated string containing the +filename. The caller is responsible for freeing this string. + +@findex bfd_create_gnu_debuglink_section +@subsubsection @code{bfd_create_gnu_debuglink_section} +@strong{Synopsis} +@example +struct bfd_section *bfd_create_gnu_debuglink_section + (bfd *abfd, const char *filename); +@end example +@strong{Description}@* +Takes a @var{BFD} and adds a .gnu_debuglink section to it. The section is sized +to be big enough to contain a link to the specified @var{filename}. + +@strong{Returns}@* +A pointer to the new section is returned if all is ok. Otherwise @code{NULL} is +returned and bfd_error is set. + +@findex bfd_fill_in_gnu_debuglink_section +@subsubsection @code{bfd_fill_in_gnu_debuglink_section} +@strong{Synopsis} +@example +bfd_boolean bfd_fill_in_gnu_debuglink_section + (bfd *abfd, struct bfd_section *sect, const char *filename); +@end example +@strong{Description}@* +Takes a @var{BFD} and containing a .gnu_debuglink section @var{SECT} +and fills in the contents of the section to contain a link to the +specified @var{filename}. The filename should be relative to the +current directory. + +@strong{Returns}@* +@code{TRUE} is returned if all is ok. Otherwise @code{FALSE} is returned +and bfd_error is set. + diff --git a/bfd/doc/reloc.texi b/bfd/doc/reloc.texi new file mode 100644 index 000000000..e3ea426ec --- /dev/null +++ b/bfd/doc/reloc.texi @@ -0,0 +1,2644 @@ +@section Relocations +BFD maintains relocations in much the same way it maintains +symbols: they are left alone until required, then read in +en-masse and translated into an internal form. A common +routine @code{bfd_perform_relocation} acts upon the +canonical form to do the fixup. + +Relocations are maintained on a per section basis, +while symbols are maintained on a per BFD basis. + +All that a back end has to do to fit the BFD interface is to create +a @code{struct reloc_cache_entry} for each relocation +in a particular section, and fill in the right bits of the structures. + +@menu +* typedef arelent:: +* howto manager:: +@end menu + + +@node typedef arelent, howto manager, Relocations, Relocations +@subsection typedef arelent +This is the structure of a relocation entry: + + +@example + +typedef enum bfd_reloc_status +@{ + /* No errors detected. */ + bfd_reloc_ok, + + /* The relocation was performed, but there was an overflow. */ + bfd_reloc_overflow, + + /* The address to relocate was not within the section supplied. */ + bfd_reloc_outofrange, + + /* Used by special functions. */ + bfd_reloc_continue, + + /* Unsupported relocation size requested. */ + bfd_reloc_notsupported, + + /* Unused. */ + bfd_reloc_other, + + /* The symbol to relocate against was undefined. */ + bfd_reloc_undefined, + + /* The relocation was performed, but may not be ok - presently + generated only when linking i960 coff files with i960 b.out + symbols. If this type is returned, the error_message argument + to bfd_perform_relocation will be set. */ + bfd_reloc_dangerous + @} + bfd_reloc_status_type; + + +typedef struct reloc_cache_entry +@{ + /* A pointer into the canonical table of pointers. */ + struct bfd_symbol **sym_ptr_ptr; + + /* offset in section. */ + bfd_size_type address; + + /* addend for relocation value. */ + bfd_vma addend; + + /* Pointer to how to perform the required relocation. */ + reloc_howto_type *howto; + +@} +arelent; + +@end example +@strong{Description}@* +Here is a description of each of the fields within an @code{arelent}: + +@itemize @bullet + +@item +@code{sym_ptr_ptr} +@end itemize +The symbol table pointer points to a pointer to the symbol +associated with the relocation request. It is the pointer +into the table returned by the back end's +@code{canonicalize_symtab} action. @xref{Symbols}. The symbol is +referenced through a pointer to a pointer so that tools like +the linker can fix up all the symbols of the same name by +modifying only one pointer. The relocation routine looks in +the symbol and uses the base of the section the symbol is +attached to and the value of the symbol as the initial +relocation offset. If the symbol pointer is zero, then the +section provided is looked up. + +@itemize @bullet + +@item +@code{address} +@end itemize +The @code{address} field gives the offset in bytes from the base of +the section data which owns the relocation record to the first +byte of relocatable information. The actual data relocated +will be relative to this point; for example, a relocation +type which modifies the bottom two bytes of a four byte word +would not touch the first byte pointed to in a big endian +world. + +@itemize @bullet + +@item +@code{addend} +@end itemize +The @code{addend} is a value provided by the back end to be added (!) +to the relocation offset. Its interpretation is dependent upon +the howto. For example, on the 68k the code: + +@example + char foo[]; + main() + @{ + return foo[0x12345678]; + @} +@end example + +Could be compiled into: + +@example + linkw fp,#-4 + moveb @@#12345678,d0 + extbl d0 + unlk fp + rts +@end example + +This could create a reloc pointing to @code{foo}, but leave the +offset in the data, something like: + +@example +RELOCATION RECORDS FOR [.text]: +offset type value +00000006 32 _foo + +00000000 4e56 fffc ; linkw fp,#-4 +00000004 1039 1234 5678 ; moveb @@#12345678,d0 +0000000a 49c0 ; extbl d0 +0000000c 4e5e ; unlk fp +0000000e 4e75 ; rts +@end example + +Using coff and an 88k, some instructions don't have enough +space in them to represent the full address range, and +pointers have to be loaded in two parts. So you'd get something like: + +@example + or.u r13,r0,hi16(_foo+0x12345678) + ld.b r2,r13,lo16(_foo+0x12345678) + jmp r1 +@end example + +This should create two relocs, both pointing to @code{_foo}, and with +0x12340000 in their addend field. The data would consist of: + +@example +RELOCATION RECORDS FOR [.text]: +offset type value +00000002 HVRT16 _foo+0x12340000 +00000006 LVRT16 _foo+0x12340000 + +00000000 5da05678 ; or.u r13,r0,0x5678 +00000004 1c4d5678 ; ld.b r2,r13,0x5678 +00000008 f400c001 ; jmp r1 +@end example + +The relocation routine digs out the value from the data, adds +it to the addend to get the original offset, and then adds the +value of @code{_foo}. Note that all 32 bits have to be kept around +somewhere, to cope with carry from bit 15 to bit 16. + +One further example is the sparc and the a.out format. The +sparc has a similar problem to the 88k, in that some +instructions don't have room for an entire offset, but on the +sparc the parts are created in odd sized lumps. The designers of +the a.out format chose to not use the data within the section +for storing part of the offset; all the offset is kept within +the reloc. Anything in the data should be ignored. + +@example + save %sp,-112,%sp + sethi %hi(_foo+0x12345678),%g2 + ldsb [%g2+%lo(_foo+0x12345678)],%i0 + ret + restore +@end example + +Both relocs contain a pointer to @code{foo}, and the offsets +contain junk. + +@example +RELOCATION RECORDS FOR [.text]: +offset type value +00000004 HI22 _foo+0x12345678 +00000008 LO10 _foo+0x12345678 + +00000000 9de3bf90 ; save %sp,-112,%sp +00000004 05000000 ; sethi %hi(_foo+0),%g2 +00000008 f048a000 ; ldsb [%g2+%lo(_foo+0)],%i0 +0000000c 81c7e008 ; ret +00000010 81e80000 ; restore +@end example + +@itemize @bullet + +@item +@code{howto} +@end itemize +The @code{howto} field can be imagined as a +relocation instruction. It is a pointer to a structure which +contains information on what to do with all of the other +information in the reloc record and data section. A back end +would normally have a relocation instruction set and turn +relocations into pointers to the correct structure on input - +but it would be possible to create each howto field on demand. + +@subsubsection @code{enum complain_overflow} +Indicates what sort of overflow checking should be done when +performing a relocation. + + +@example + +enum complain_overflow +@{ + /* Do not complain on overflow. */ + complain_overflow_dont, + + /* Complain if the value overflows when considered as a signed + number one bit larger than the field. ie. A bitfield of N bits + is allowed to represent -2**n to 2**n-1. */ + complain_overflow_bitfield, + + /* Complain if the value overflows when considered as a signed + number. */ + complain_overflow_signed, + + /* Complain if the value overflows when considered as an + unsigned number. */ + complain_overflow_unsigned +@}; +@end example +@subsubsection @code{reloc_howto_type} +The @code{reloc_howto_type} is a structure which contains all the +information that libbfd needs to know to tie up a back end's data. + + +@example +struct bfd_symbol; /* Forward declaration. */ + +struct reloc_howto_struct +@{ + /* The type field has mainly a documentary use - the back end can + do what it wants with it, though normally the back end's + external idea of what a reloc number is stored + in this field. For example, a PC relative word relocation + in a coff environment has the type 023 - because that's + what the outside world calls a R_PCRWORD reloc. */ + unsigned int type; + + /* The value the final relocation is shifted right by. This drops + unwanted data from the relocation. */ + unsigned int rightshift; + + /* The size of the item to be relocated. This is *not* a + power-of-two measure. To get the number of bytes operated + on by a type of relocation, use bfd_get_reloc_size. */ + int size; + + /* The number of bits in the item to be relocated. This is used + when doing overflow checking. */ + unsigned int bitsize; + + /* Notes that the relocation is relative to the location in the + data section of the addend. The relocation function will + subtract from the relocation value the address of the location + being relocated. */ + bfd_boolean pc_relative; + + /* The bit position of the reloc value in the destination. + The relocated value is left shifted by this amount. */ + unsigned int bitpos; + + /* What type of overflow error should be checked for when + relocating. */ + enum complain_overflow complain_on_overflow; + + /* If this field is non null, then the supplied function is + called rather than the normal function. This allows really + strange relocation methods to be accommodated (e.g., i960 callj + instructions). */ + bfd_reloc_status_type (*special_function) + (bfd *, arelent *, struct bfd_symbol *, void *, asection *, + bfd *, char **); + + /* The textual name of the relocation type. */ + char *name; + + /* Some formats record a relocation addend in the section contents + rather than with the relocation. For ELF formats this is the + distinction between USE_REL and USE_RELA (though the code checks + for USE_REL == 1/0). The value of this field is TRUE if the + addend is recorded with the section contents; when performing a + partial link (ld -r) the section contents (the data) will be + modified. The value of this field is FALSE if addends are + recorded with the relocation (in arelent.addend); when performing + a partial link the relocation will be modified. + All relocations for all ELF USE_RELA targets should set this field + to FALSE (values of TRUE should be looked on with suspicion). + However, the converse is not true: not all relocations of all ELF + USE_REL targets set this field to TRUE. Why this is so is peculiar + to each particular target. For relocs that aren't used in partial + links (e.g. GOT stuff) it doesn't matter what this is set to. */ + bfd_boolean partial_inplace; + + /* src_mask selects the part of the instruction (or data) to be used + in the relocation sum. If the target relocations don't have an + addend in the reloc, eg. ELF USE_REL, src_mask will normally equal + dst_mask to extract the addend from the section contents. If + relocations do have an addend in the reloc, eg. ELF USE_RELA, this + field should be zero. Non-zero values for ELF USE_RELA targets are + bogus as in those cases the value in the dst_mask part of the + section contents should be treated as garbage. */ + bfd_vma src_mask; + + /* dst_mask selects which parts of the instruction (or data) are + replaced with a relocated value. */ + bfd_vma dst_mask; + + /* When some formats create PC relative instructions, they leave + the value of the pc of the place being relocated in the offset + slot of the instruction, so that a PC relative relocation can + be made just by adding in an ordinary offset (e.g., sun3 a.out). + Some formats leave the displacement part of an instruction + empty (e.g., m88k bcs); this flag signals the fact. */ + bfd_boolean pcrel_offset; +@}; + +@end example +@findex The HOWTO Macro +@subsubsection @code{The HOWTO Macro} +@strong{Description}@* +The HOWTO define is horrible and will go away. +@example +#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \ + @{ (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC @} +@end example + +@strong{Description}@* +And will be replaced with the totally magic way. But for the +moment, we are compatible, so do it this way. +@example +#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \ + HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \ + NAME, FALSE, 0, 0, IN) + +@end example + +@strong{Description}@* +This is used to fill in an empty howto entry in an array. +@example +#define EMPTY_HOWTO(C) \ + HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \ + NULL, FALSE, 0, 0, FALSE) + +@end example + +@strong{Description}@* +Helper routine to turn a symbol into a relocation value. +@example +#define HOWTO_PREPARE(relocation, symbol) \ + @{ \ + if (symbol != NULL) \ + @{ \ + if (bfd_is_com_section (symbol->section)) \ + @{ \ + relocation = 0; \ + @} \ + else \ + @{ \ + relocation = symbol->value; \ + @} \ + @} \ + @} + +@end example + +@findex bfd_get_reloc_size +@subsubsection @code{bfd_get_reloc_size} +@strong{Synopsis} +@example +unsigned int bfd_get_reloc_size (reloc_howto_type *); +@end example +@strong{Description}@* +For a reloc_howto_type that operates on a fixed number of bytes, +this returns the number of bytes operated on. + +@findex arelent_chain +@subsubsection @code{arelent_chain} +@strong{Description}@* +How relocs are tied together in an @code{asection}: +@example +typedef struct relent_chain +@{ + arelent relent; + struct relent_chain *next; +@} +arelent_chain; + +@end example + +@findex bfd_check_overflow +@subsubsection @code{bfd_check_overflow} +@strong{Synopsis} +@example +bfd_reloc_status_type bfd_check_overflow + (enum complain_overflow how, + unsigned int bitsize, + unsigned int rightshift, + unsigned int addrsize, + bfd_vma relocation); +@end example +@strong{Description}@* +Perform overflow checking on @var{relocation} which has +@var{bitsize} significant bits and will be shifted right by +@var{rightshift} bits, on a machine with addresses containing +@var{addrsize} significant bits. The result is either of +@code{bfd_reloc_ok} or @code{bfd_reloc_overflow}. + +@findex bfd_perform_relocation +@subsubsection @code{bfd_perform_relocation} +@strong{Synopsis} +@example +bfd_reloc_status_type bfd_perform_relocation + (bfd *abfd, + arelent *reloc_entry, + void *data, + asection *input_section, + bfd *output_bfd, + char **error_message); +@end example +@strong{Description}@* +If @var{output_bfd} is supplied to this function, the +generated image will be relocatable; the relocations are +copied to the output file after they have been changed to +reflect the new state of the world. There are two ways of +reflecting the results of partial linkage in an output file: +by modifying the output data in place, and by modifying the +relocation record. Some native formats (e.g., basic a.out and +basic coff) have no way of specifying an addend in the +relocation type, so the addend has to go in the output data. +This is no big deal since in these formats the output data +slot will always be big enough for the addend. Complex reloc +types with addends were invented to solve just this problem. +The @var{error_message} argument is set to an error message if +this return @code{bfd_reloc_dangerous}. + +@findex bfd_install_relocation +@subsubsection @code{bfd_install_relocation} +@strong{Synopsis} +@example +bfd_reloc_status_type bfd_install_relocation + (bfd *abfd, + arelent *reloc_entry, + void *data, bfd_vma data_start, + asection *input_section, + char **error_message); +@end example +@strong{Description}@* +This looks remarkably like @code{bfd_perform_relocation}, except it +does not expect that the section contents have been filled in. +I.e., it's suitable for use when creating, rather than applying +a relocation. + +For now, this function should be considered reserved for the +assembler. + + +@node howto manager, , typedef arelent, Relocations +@subsection The howto manager +When an application wants to create a relocation, but doesn't +know what the target machine might call it, it can find out by +using this bit of code. + +@findex bfd_reloc_code_type +@subsubsection @code{bfd_reloc_code_type} +@strong{Description}@* +The insides of a reloc code. The idea is that, eventually, there +will be one enumerator for every type of relocation we ever do. +Pass one of these values to @code{bfd_reloc_type_lookup}, and it'll +return a howto pointer. + +This does mean that the application must determine the correct +enumerator value; you can't get a howto pointer from a random set +of attributes. + +Here are the possible values for @code{enum bfd_reloc_code_real}: + +@deffn {} BFD_RELOC_64 +@deffnx {} BFD_RELOC_32 +@deffnx {} BFD_RELOC_26 +@deffnx {} BFD_RELOC_24 +@deffnx {} BFD_RELOC_16 +@deffnx {} BFD_RELOC_14 +@deffnx {} BFD_RELOC_8 +Basic absolute relocations of N bits. +@end deffn +@deffn {} BFD_RELOC_64_PCREL +@deffnx {} BFD_RELOC_32_PCREL +@deffnx {} BFD_RELOC_24_PCREL +@deffnx {} BFD_RELOC_16_PCREL +@deffnx {} BFD_RELOC_12_PCREL +@deffnx {} BFD_RELOC_8_PCREL +PC-relative relocations. Sometimes these are relative to the address +of the relocation itself; sometimes they are relative to the start of +the section containing the relocation. It depends on the specific target. + +The 24-bit relocation is used in some Intel 960 configurations. +@end deffn +@deffn {} BFD_RELOC_32_SECREL +Section relative relocations. Some targets need this for DWARF2. +@end deffn +@deffn {} BFD_RELOC_32_GOT_PCREL +@deffnx {} BFD_RELOC_16_GOT_PCREL +@deffnx {} BFD_RELOC_8_GOT_PCREL +@deffnx {} BFD_RELOC_32_GOTOFF +@deffnx {} BFD_RELOC_16_GOTOFF +@deffnx {} BFD_RELOC_LO16_GOTOFF +@deffnx {} BFD_RELOC_HI16_GOTOFF +@deffnx {} BFD_RELOC_HI16_S_GOTOFF +@deffnx {} BFD_RELOC_8_GOTOFF +@deffnx {} BFD_RELOC_64_PLT_PCREL +@deffnx {} BFD_RELOC_32_PLT_PCREL +@deffnx {} BFD_RELOC_24_PLT_PCREL +@deffnx {} BFD_RELOC_16_PLT_PCREL +@deffnx {} BFD_RELOC_8_PLT_PCREL +@deffnx {} BFD_RELOC_64_PLTOFF +@deffnx {} BFD_RELOC_32_PLTOFF +@deffnx {} BFD_RELOC_16_PLTOFF +@deffnx {} BFD_RELOC_LO16_PLTOFF +@deffnx {} BFD_RELOC_HI16_PLTOFF +@deffnx {} BFD_RELOC_HI16_S_PLTOFF +@deffnx {} BFD_RELOC_8_PLTOFF +For ELF. +@end deffn +@deffn {} BFD_RELOC_68K_GLOB_DAT +@deffnx {} BFD_RELOC_68K_JMP_SLOT +@deffnx {} BFD_RELOC_68K_RELATIVE +Relocations used by 68K ELF. +@end deffn +@deffn {} BFD_RELOC_32_BASEREL +@deffnx {} BFD_RELOC_16_BASEREL +@deffnx {} BFD_RELOC_LO16_BASEREL +@deffnx {} BFD_RELOC_HI16_BASEREL +@deffnx {} BFD_RELOC_HI16_S_BASEREL +@deffnx {} BFD_RELOC_8_BASEREL +@deffnx {} BFD_RELOC_RVA +Linkage-table relative. +@end deffn +@deffn {} BFD_RELOC_8_FFnn +Absolute 8-bit relocation, but used to form an address like 0xFFnn. +@end deffn +@deffn {} BFD_RELOC_32_PCREL_S2 +@deffnx {} BFD_RELOC_16_PCREL_S2 +@deffnx {} BFD_RELOC_23_PCREL_S2 +These PC-relative relocations are stored as word displacements -- +i.e., byte displacements shifted right two bits. The 30-bit word +displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the +SPARC. (SPARC tools generally refer to this as <>.) The +signed 16-bit displacement is used on the MIPS, and the 23-bit +displacement is used on the Alpha. +@end deffn +@deffn {} BFD_RELOC_HI22 +@deffnx {} BFD_RELOC_LO10 +High 22 bits and low 10 bits of 32-bit value, placed into lower bits of +the target word. These are used on the SPARC. +@end deffn +@deffn {} BFD_RELOC_GPREL16 +@deffnx {} BFD_RELOC_GPREL32 +For systems that allocate a Global Pointer register, these are +displacements off that register. These relocation types are +handled specially, because the value the register will have is +decided relatively late. +@end deffn +@deffn {} BFD_RELOC_I960_CALLJ +Reloc types used for i960/b.out. +@end deffn +@deffn {} BFD_RELOC_NONE +@deffnx {} BFD_RELOC_SPARC_WDISP22 +@deffnx {} BFD_RELOC_SPARC22 +@deffnx {} BFD_RELOC_SPARC13 +@deffnx {} BFD_RELOC_SPARC_GOT10 +@deffnx {} BFD_RELOC_SPARC_GOT13 +@deffnx {} BFD_RELOC_SPARC_GOT22 +@deffnx {} BFD_RELOC_SPARC_PC10 +@deffnx {} BFD_RELOC_SPARC_PC22 +@deffnx {} BFD_RELOC_SPARC_WPLT30 +@deffnx {} BFD_RELOC_SPARC_COPY +@deffnx {} BFD_RELOC_SPARC_GLOB_DAT +@deffnx {} BFD_RELOC_SPARC_JMP_SLOT +@deffnx {} BFD_RELOC_SPARC_RELATIVE +@deffnx {} BFD_RELOC_SPARC_UA16 +@deffnx {} BFD_RELOC_SPARC_UA32 +@deffnx {} BFD_RELOC_SPARC_UA64 +SPARC ELF relocations. There is probably some overlap with other +relocation types already defined. +@end deffn +@deffn {} BFD_RELOC_SPARC_BASE13 +@deffnx {} BFD_RELOC_SPARC_BASE22 +I think these are specific to SPARC a.out (e.g., Sun 4). +@end deffn +@deffn {} BFD_RELOC_SPARC_64 +@deffnx {} BFD_RELOC_SPARC_10 +@deffnx {} BFD_RELOC_SPARC_11 +@deffnx {} BFD_RELOC_SPARC_OLO10 +@deffnx {} BFD_RELOC_SPARC_HH22 +@deffnx {} BFD_RELOC_SPARC_HM10 +@deffnx {} BFD_RELOC_SPARC_LM22 +@deffnx {} BFD_RELOC_SPARC_PC_HH22 +@deffnx {} BFD_RELOC_SPARC_PC_HM10 +@deffnx {} BFD_RELOC_SPARC_PC_LM22 +@deffnx {} BFD_RELOC_SPARC_WDISP16 +@deffnx {} BFD_RELOC_SPARC_WDISP19 +@deffnx {} BFD_RELOC_SPARC_7 +@deffnx {} BFD_RELOC_SPARC_6 +@deffnx {} BFD_RELOC_SPARC_5 +@deffnx {} BFD_RELOC_SPARC_DISP64 +@deffnx {} BFD_RELOC_SPARC_PLT32 +@deffnx {} BFD_RELOC_SPARC_PLT64 +@deffnx {} BFD_RELOC_SPARC_HIX22 +@deffnx {} BFD_RELOC_SPARC_LOX10 +@deffnx {} BFD_RELOC_SPARC_H44 +@deffnx {} BFD_RELOC_SPARC_M44 +@deffnx {} BFD_RELOC_SPARC_L44 +@deffnx {} BFD_RELOC_SPARC_REGISTER +SPARC64 relocations +@end deffn +@deffn {} BFD_RELOC_SPARC_REV32 +SPARC little endian relocation +@end deffn +@deffn {} BFD_RELOC_SPARC_TLS_GD_HI22 +@deffnx {} BFD_RELOC_SPARC_TLS_GD_LO10 +@deffnx {} BFD_RELOC_SPARC_TLS_GD_ADD +@deffnx {} BFD_RELOC_SPARC_TLS_GD_CALL +@deffnx {} BFD_RELOC_SPARC_TLS_LDM_HI22 +@deffnx {} BFD_RELOC_SPARC_TLS_LDM_LO10 +@deffnx {} BFD_RELOC_SPARC_TLS_LDM_ADD +@deffnx {} BFD_RELOC_SPARC_TLS_LDM_CALL +@deffnx {} BFD_RELOC_SPARC_TLS_LDO_HIX22 +@deffnx {} BFD_RELOC_SPARC_TLS_LDO_LOX10 +@deffnx {} BFD_RELOC_SPARC_TLS_LDO_ADD +@deffnx {} BFD_RELOC_SPARC_TLS_IE_HI22 +@deffnx {} BFD_RELOC_SPARC_TLS_IE_LO10 +@deffnx {} BFD_RELOC_SPARC_TLS_IE_LD +@deffnx {} BFD_RELOC_SPARC_TLS_IE_LDX +@deffnx {} BFD_RELOC_SPARC_TLS_IE_ADD +@deffnx {} BFD_RELOC_SPARC_TLS_LE_HIX22 +@deffnx {} BFD_RELOC_SPARC_TLS_LE_LOX10 +@deffnx {} BFD_RELOC_SPARC_TLS_DTPMOD32 +@deffnx {} BFD_RELOC_SPARC_TLS_DTPMOD64 +@deffnx {} BFD_RELOC_SPARC_TLS_DTPOFF32 +@deffnx {} BFD_RELOC_SPARC_TLS_DTPOFF64 +@deffnx {} BFD_RELOC_SPARC_TLS_TPOFF32 +@deffnx {} BFD_RELOC_SPARC_TLS_TPOFF64 +SPARC TLS relocations +@end deffn +@deffn {} BFD_RELOC_SPU_IMM7 +@deffnx {} BFD_RELOC_SPU_IMM8 +@deffnx {} BFD_RELOC_SPU_IMM10 +@deffnx {} BFD_RELOC_SPU_IMM10W +@deffnx {} BFD_RELOC_SPU_IMM16 +@deffnx {} BFD_RELOC_SPU_IMM16W +@deffnx {} BFD_RELOC_SPU_IMM18 +@deffnx {} BFD_RELOC_SPU_PCREL9a +@deffnx {} BFD_RELOC_SPU_PCREL9b +@deffnx {} BFD_RELOC_SPU_PCREL16 +@deffnx {} BFD_RELOC_SPU_LO16 +@deffnx {} BFD_RELOC_SPU_HI16 +@deffnx {} BFD_RELOC_SPU_PPU32 +@deffnx {} BFD_RELOC_SPU_PPU64 +SPU Relocations. +@end deffn +@deffn {} BFD_RELOC_ALPHA_GPDISP_HI16 +Alpha ECOFF and ELF relocations. Some of these treat the symbol or +"addend" in some special way. +For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when +writing; when reading, it will be the absolute section symbol. The +addend is the displacement in bytes of the "lda" instruction from +the "ldah" instruction (which is at the address of this reloc). +@end deffn +@deffn {} BFD_RELOC_ALPHA_GPDISP_LO16 +For GPDISP_LO16 ("ignore") relocations, the symbol is handled as +with GPDISP_HI16 relocs. The addend is ignored when writing the +relocations out, and is filled in with the file's GP value on +reading, for convenience. +@end deffn +@deffn {} BFD_RELOC_ALPHA_GPDISP +The ELF GPDISP relocation is exactly the same as the GPDISP_HI16 +relocation except that there is no accompanying GPDISP_LO16 +relocation. +@end deffn +@deffn {} BFD_RELOC_ALPHA_LITERAL +@deffnx {} BFD_RELOC_ALPHA_ELF_LITERAL +@deffnx {} BFD_RELOC_ALPHA_LITUSE +The Alpha LITERAL/LITUSE relocs are produced by a symbol reference; +the assembler turns it into a LDQ instruction to load the address of +the symbol, and then fills in a register in the real instruction. + +The LITERAL reloc, at the LDQ instruction, refers to the .lita +section symbol. The addend is ignored when writing, but is filled +in with the file's GP value on reading, for convenience, as with the +GPDISP_LO16 reloc. + +The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16. +It should refer to the symbol to be referenced, as with 16_GOTOFF, +but it generates output not based on the position within the .got +section, but relative to the GP value chosen for the file during the +final link stage. + +The LITUSE reloc, on the instruction using the loaded address, gives +information to the linker that it might be able to use to optimize +away some literal section references. The symbol is ignored (read +as the absolute section symbol), and the "addend" indicates the type +of instruction using the register: +1 - "memory" fmt insn +2 - byte-manipulation (byte offset reg) +3 - jsr (target of branch) +@end deffn +@deffn {} BFD_RELOC_ALPHA_HINT +The HINT relocation indicates a value that should be filled into the +"hint" field of a jmp/jsr/ret instruction, for possible branch- +prediction logic which may be provided on some processors. +@end deffn +@deffn {} BFD_RELOC_ALPHA_LINKAGE +The LINKAGE relocation outputs a linkage pair in the object file, +which is filled by the linker. +@end deffn +@deffn {} BFD_RELOC_ALPHA_CODEADDR +The CODEADDR relocation outputs a STO_CA in the object file, +which is filled by the linker. +@end deffn +@deffn {} BFD_RELOC_ALPHA_GPREL_HI16 +@deffnx {} BFD_RELOC_ALPHA_GPREL_LO16 +The GPREL_HI/LO relocations together form a 32-bit offset from the +GP register. +@end deffn +@deffn {} BFD_RELOC_ALPHA_BRSGP +Like BFD_RELOC_23_PCREL_S2, except that the source and target must +share a common GP, and the target address is adjusted for +STO_ALPHA_STD_GPLOAD. +@end deffn +@deffn {} BFD_RELOC_ALPHA_TLSGD +@deffnx {} BFD_RELOC_ALPHA_TLSLDM +@deffnx {} BFD_RELOC_ALPHA_DTPMOD64 +@deffnx {} BFD_RELOC_ALPHA_GOTDTPREL16 +@deffnx {} BFD_RELOC_ALPHA_DTPREL64 +@deffnx {} BFD_RELOC_ALPHA_DTPREL_HI16 +@deffnx {} BFD_RELOC_ALPHA_DTPREL_LO16 +@deffnx {} BFD_RELOC_ALPHA_DTPREL16 +@deffnx {} BFD_RELOC_ALPHA_GOTTPREL16 +@deffnx {} BFD_RELOC_ALPHA_TPREL64 +@deffnx {} BFD_RELOC_ALPHA_TPREL_HI16 +@deffnx {} BFD_RELOC_ALPHA_TPREL_LO16 +@deffnx {} BFD_RELOC_ALPHA_TPREL16 +Alpha thread-local storage relocations. +@end deffn +@deffn {} BFD_RELOC_MIPS_JMP +Bits 27..2 of the relocation address shifted right 2 bits; +simple reloc otherwise. +@end deffn +@deffn {} BFD_RELOC_MIPS16_JMP +The MIPS16 jump instruction. +@end deffn +@deffn {} BFD_RELOC_MIPS16_GPREL +MIPS16 GP relative reloc. +@end deffn +@deffn {} BFD_RELOC_HI16 +High 16 bits of 32-bit value; simple reloc. +@end deffn +@deffn {} BFD_RELOC_HI16_S +High 16 bits of 32-bit value but the low 16 bits will be sign +extended and added to form the final result. If the low 16 +bits form a negative number, we need to add one to the high value +to compensate for the borrow when the low bits are added. +@end deffn +@deffn {} BFD_RELOC_LO16 +Low 16 bits. +@end deffn +@deffn {} BFD_RELOC_HI16_PCREL +High 16 bits of 32-bit pc-relative value +@end deffn +@deffn {} BFD_RELOC_HI16_S_PCREL +High 16 bits of 32-bit pc-relative value, adjusted +@end deffn +@deffn {} BFD_RELOC_LO16_PCREL +Low 16 bits of pc-relative value +@end deffn +@deffn {} BFD_RELOC_MIPS16_HI16 +MIPS16 high 16 bits of 32-bit value. +@end deffn +@deffn {} BFD_RELOC_MIPS16_HI16_S +MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign +extended and added to form the final result. If the low 16 +bits form a negative number, we need to add one to the high value +to compensate for the borrow when the low bits are added. +@end deffn +@deffn {} BFD_RELOC_MIPS16_LO16 +MIPS16 low 16 bits. +@end deffn +@deffn {} BFD_RELOC_MIPS_LITERAL +Relocation against a MIPS literal section. +@end deffn +@deffn {} BFD_RELOC_MIPS_GOT16 +@deffnx {} BFD_RELOC_MIPS_CALL16 +@deffnx {} BFD_RELOC_MIPS_GOT_HI16 +@deffnx {} BFD_RELOC_MIPS_GOT_LO16 +@deffnx {} BFD_RELOC_MIPS_CALL_HI16 +@deffnx {} BFD_RELOC_MIPS_CALL_LO16 +@deffnx {} BFD_RELOC_MIPS_SUB +@deffnx {} BFD_RELOC_MIPS_GOT_PAGE +@deffnx {} BFD_RELOC_MIPS_GOT_OFST +@deffnx {} BFD_RELOC_MIPS_GOT_DISP +@deffnx {} BFD_RELOC_MIPS_SHIFT5 +@deffnx {} BFD_RELOC_MIPS_SHIFT6 +@deffnx {} BFD_RELOC_MIPS_INSERT_A +@deffnx {} BFD_RELOC_MIPS_INSERT_B +@deffnx {} BFD_RELOC_MIPS_DELETE +@deffnx {} BFD_RELOC_MIPS_HIGHEST +@deffnx {} BFD_RELOC_MIPS_HIGHER +@deffnx {} BFD_RELOC_MIPS_SCN_DISP +@deffnx {} BFD_RELOC_MIPS_REL16 +@deffnx {} BFD_RELOC_MIPS_RELGOT +@deffnx {} BFD_RELOC_MIPS_JALR +@deffnx {} BFD_RELOC_MIPS_TLS_DTPMOD32 +@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL32 +@deffnx {} BFD_RELOC_MIPS_TLS_DTPMOD64 +@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL64 +@deffnx {} BFD_RELOC_MIPS_TLS_GD +@deffnx {} BFD_RELOC_MIPS_TLS_LDM +@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL_HI16 +@deffnx {} BFD_RELOC_MIPS_TLS_DTPREL_LO16 +@deffnx {} BFD_RELOC_MIPS_TLS_GOTTPREL +@deffnx {} BFD_RELOC_MIPS_TLS_TPREL32 +@deffnx {} BFD_RELOC_MIPS_TLS_TPREL64 +@deffnx {} BFD_RELOC_MIPS_TLS_TPREL_HI16 +@deffnx {} BFD_RELOC_MIPS_TLS_TPREL_LO16 +MIPS ELF relocations. +@end deffn +@deffn {} BFD_RELOC_MIPS_COPY +@deffnx {} BFD_RELOC_MIPS_JUMP_SLOT +MIPS ELF relocations (VxWorks extensions). +@end deffn +@deffn {} BFD_RELOC_FRV_LABEL16 +@deffnx {} BFD_RELOC_FRV_LABEL24 +@deffnx {} BFD_RELOC_FRV_LO16 +@deffnx {} BFD_RELOC_FRV_HI16 +@deffnx {} BFD_RELOC_FRV_GPREL12 +@deffnx {} BFD_RELOC_FRV_GPRELU12 +@deffnx {} BFD_RELOC_FRV_GPREL32 +@deffnx {} BFD_RELOC_FRV_GPRELHI +@deffnx {} BFD_RELOC_FRV_GPRELLO +@deffnx {} BFD_RELOC_FRV_GOT12 +@deffnx {} BFD_RELOC_FRV_GOTHI +@deffnx {} BFD_RELOC_FRV_GOTLO +@deffnx {} BFD_RELOC_FRV_FUNCDESC +@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOT12 +@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTHI +@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTLO +@deffnx {} BFD_RELOC_FRV_FUNCDESC_VALUE +@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFF12 +@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFFHI +@deffnx {} BFD_RELOC_FRV_FUNCDESC_GOTOFFLO +@deffnx {} BFD_RELOC_FRV_GOTOFF12 +@deffnx {} BFD_RELOC_FRV_GOTOFFHI +@deffnx {} BFD_RELOC_FRV_GOTOFFLO +@deffnx {} BFD_RELOC_FRV_GETTLSOFF +@deffnx {} BFD_RELOC_FRV_TLSDESC_VALUE +@deffnx {} BFD_RELOC_FRV_GOTTLSDESC12 +@deffnx {} BFD_RELOC_FRV_GOTTLSDESCHI +@deffnx {} BFD_RELOC_FRV_GOTTLSDESCLO +@deffnx {} BFD_RELOC_FRV_TLSMOFF12 +@deffnx {} BFD_RELOC_FRV_TLSMOFFHI +@deffnx {} BFD_RELOC_FRV_TLSMOFFLO +@deffnx {} BFD_RELOC_FRV_GOTTLSOFF12 +@deffnx {} BFD_RELOC_FRV_GOTTLSOFFHI +@deffnx {} BFD_RELOC_FRV_GOTTLSOFFLO +@deffnx {} BFD_RELOC_FRV_TLSOFF +@deffnx {} BFD_RELOC_FRV_TLSDESC_RELAX +@deffnx {} BFD_RELOC_FRV_GETTLSOFF_RELAX +@deffnx {} BFD_RELOC_FRV_TLSOFF_RELAX +@deffnx {} BFD_RELOC_FRV_TLSMOFF +Fujitsu Frv Relocations. +@end deffn +@deffn {} BFD_RELOC_MN10300_GOTOFF24 +This is a 24bit GOT-relative reloc for the mn10300. +@end deffn +@deffn {} BFD_RELOC_MN10300_GOT32 +This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes +in the instruction. +@end deffn +@deffn {} BFD_RELOC_MN10300_GOT24 +This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes +in the instruction. +@end deffn +@deffn {} BFD_RELOC_MN10300_GOT16 +This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes +in the instruction. +@end deffn +@deffn {} BFD_RELOC_MN10300_COPY +Copy symbol at runtime. +@end deffn +@deffn {} BFD_RELOC_MN10300_GLOB_DAT +Create GOT entry. +@end deffn +@deffn {} BFD_RELOC_MN10300_JMP_SLOT +Create PLT entry. +@end deffn +@deffn {} BFD_RELOC_MN10300_RELATIVE +Adjust by program base. +@end deffn +@deffn {} BFD_RELOC_386_GOT32 +@deffnx {} BFD_RELOC_386_PLT32 +@deffnx {} BFD_RELOC_386_COPY +@deffnx {} BFD_RELOC_386_GLOB_DAT +@deffnx {} BFD_RELOC_386_JUMP_SLOT +@deffnx {} BFD_RELOC_386_RELATIVE +@deffnx {} BFD_RELOC_386_GOTOFF +@deffnx {} BFD_RELOC_386_GOTPC +@deffnx {} BFD_RELOC_386_TLS_TPOFF +@deffnx {} BFD_RELOC_386_TLS_IE +@deffnx {} BFD_RELOC_386_TLS_GOTIE +@deffnx {} BFD_RELOC_386_TLS_LE +@deffnx {} BFD_RELOC_386_TLS_GD +@deffnx {} BFD_RELOC_386_TLS_LDM +@deffnx {} BFD_RELOC_386_TLS_LDO_32 +@deffnx {} BFD_RELOC_386_TLS_IE_32 +@deffnx {} BFD_RELOC_386_TLS_LE_32 +@deffnx {} BFD_RELOC_386_TLS_DTPMOD32 +@deffnx {} BFD_RELOC_386_TLS_DTPOFF32 +@deffnx {} BFD_RELOC_386_TLS_TPOFF32 +@deffnx {} BFD_RELOC_386_TLS_GOTDESC +@deffnx {} BFD_RELOC_386_TLS_DESC_CALL +@deffnx {} BFD_RELOC_386_TLS_DESC +i386/elf relocations +@end deffn +@deffn {} BFD_RELOC_X86_64_GOT32 +@deffnx {} BFD_RELOC_X86_64_PLT32 +@deffnx {} BFD_RELOC_X86_64_COPY +@deffnx {} BFD_RELOC_X86_64_GLOB_DAT +@deffnx {} BFD_RELOC_X86_64_JUMP_SLOT +@deffnx {} BFD_RELOC_X86_64_RELATIVE +@deffnx {} BFD_RELOC_X86_64_GOTPCREL +@deffnx {} BFD_RELOC_X86_64_32S +@deffnx {} BFD_RELOC_X86_64_DTPMOD64 +@deffnx {} BFD_RELOC_X86_64_DTPOFF64 +@deffnx {} BFD_RELOC_X86_64_TPOFF64 +@deffnx {} BFD_RELOC_X86_64_TLSGD +@deffnx {} BFD_RELOC_X86_64_TLSLD +@deffnx {} BFD_RELOC_X86_64_DTPOFF32 +@deffnx {} BFD_RELOC_X86_64_GOTTPOFF +@deffnx {} BFD_RELOC_X86_64_TPOFF32 +@deffnx {} BFD_RELOC_X86_64_GOTOFF64 +@deffnx {} BFD_RELOC_X86_64_GOTPC32 +@deffnx {} BFD_RELOC_X86_64_GOT64 +@deffnx {} BFD_RELOC_X86_64_GOTPCREL64 +@deffnx {} BFD_RELOC_X86_64_GOTPC64 +@deffnx {} BFD_RELOC_X86_64_GOTPLT64 +@deffnx {} BFD_RELOC_X86_64_PLTOFF64 +@deffnx {} BFD_RELOC_X86_64_GOTPC32_TLSDESC +@deffnx {} BFD_RELOC_X86_64_TLSDESC_CALL +@deffnx {} BFD_RELOC_X86_64_TLSDESC +x86-64/elf relocations +@end deffn +@deffn {} BFD_RELOC_NS32K_IMM_8 +@deffnx {} BFD_RELOC_NS32K_IMM_16 +@deffnx {} BFD_RELOC_NS32K_IMM_32 +@deffnx {} BFD_RELOC_NS32K_IMM_8_PCREL +@deffnx {} BFD_RELOC_NS32K_IMM_16_PCREL +@deffnx {} BFD_RELOC_NS32K_IMM_32_PCREL +@deffnx {} BFD_RELOC_NS32K_DISP_8 +@deffnx {} BFD_RELOC_NS32K_DISP_16 +@deffnx {} BFD_RELOC_NS32K_DISP_32 +@deffnx {} BFD_RELOC_NS32K_DISP_8_PCREL +@deffnx {} BFD_RELOC_NS32K_DISP_16_PCREL +@deffnx {} BFD_RELOC_NS32K_DISP_32_PCREL +ns32k relocations +@end deffn +@deffn {} BFD_RELOC_PDP11_DISP_8_PCREL +@deffnx {} BFD_RELOC_PDP11_DISP_6_PCREL +PDP11 relocations +@end deffn +@deffn {} BFD_RELOC_PJ_CODE_HI16 +@deffnx {} BFD_RELOC_PJ_CODE_LO16 +@deffnx {} BFD_RELOC_PJ_CODE_DIR16 +@deffnx {} BFD_RELOC_PJ_CODE_DIR32 +@deffnx {} BFD_RELOC_PJ_CODE_REL16 +@deffnx {} BFD_RELOC_PJ_CODE_REL32 +Picojava relocs. Not all of these appear in object files. +@end deffn +@deffn {} BFD_RELOC_PPC_B26 +@deffnx {} BFD_RELOC_PPC_BA26 +@deffnx {} BFD_RELOC_PPC_TOC16 +@deffnx {} BFD_RELOC_PPC_B16 +@deffnx {} BFD_RELOC_PPC_B16_BRTAKEN +@deffnx {} BFD_RELOC_PPC_B16_BRNTAKEN +@deffnx {} BFD_RELOC_PPC_BA16 +@deffnx {} BFD_RELOC_PPC_BA16_BRTAKEN +@deffnx {} BFD_RELOC_PPC_BA16_BRNTAKEN +@deffnx {} BFD_RELOC_PPC_COPY +@deffnx {} BFD_RELOC_PPC_GLOB_DAT +@deffnx {} BFD_RELOC_PPC_JMP_SLOT +@deffnx {} BFD_RELOC_PPC_RELATIVE +@deffnx {} BFD_RELOC_PPC_LOCAL24PC +@deffnx {} BFD_RELOC_PPC_EMB_NADDR32 +@deffnx {} BFD_RELOC_PPC_EMB_NADDR16 +@deffnx {} BFD_RELOC_PPC_EMB_NADDR16_LO +@deffnx {} BFD_RELOC_PPC_EMB_NADDR16_HI +@deffnx {} BFD_RELOC_PPC_EMB_NADDR16_HA +@deffnx {} BFD_RELOC_PPC_EMB_SDAI16 +@deffnx {} BFD_RELOC_PPC_EMB_SDA2I16 +@deffnx {} BFD_RELOC_PPC_EMB_SDA2REL +@deffnx {} BFD_RELOC_PPC_EMB_SDA21 +@deffnx {} BFD_RELOC_PPC_EMB_MRKREF +@deffnx {} BFD_RELOC_PPC_EMB_RELSEC16 +@deffnx {} BFD_RELOC_PPC_EMB_RELST_LO +@deffnx {} BFD_RELOC_PPC_EMB_RELST_HI +@deffnx {} BFD_RELOC_PPC_EMB_RELST_HA +@deffnx {} BFD_RELOC_PPC_EMB_BIT_FLD +@deffnx {} BFD_RELOC_PPC_EMB_RELSDA +@deffnx {} BFD_RELOC_PPC64_HIGHER +@deffnx {} BFD_RELOC_PPC64_HIGHER_S +@deffnx {} BFD_RELOC_PPC64_HIGHEST +@deffnx {} BFD_RELOC_PPC64_HIGHEST_S +@deffnx {} BFD_RELOC_PPC64_TOC16_LO +@deffnx {} BFD_RELOC_PPC64_TOC16_HI +@deffnx {} BFD_RELOC_PPC64_TOC16_HA +@deffnx {} BFD_RELOC_PPC64_TOC +@deffnx {} BFD_RELOC_PPC64_PLTGOT16 +@deffnx {} BFD_RELOC_PPC64_PLTGOT16_LO +@deffnx {} BFD_RELOC_PPC64_PLTGOT16_HI +@deffnx {} BFD_RELOC_PPC64_PLTGOT16_HA +@deffnx {} BFD_RELOC_PPC64_ADDR16_DS +@deffnx {} BFD_RELOC_PPC64_ADDR16_LO_DS +@deffnx {} BFD_RELOC_PPC64_GOT16_DS +@deffnx {} BFD_RELOC_PPC64_GOT16_LO_DS +@deffnx {} BFD_RELOC_PPC64_PLT16_LO_DS +@deffnx {} BFD_RELOC_PPC64_SECTOFF_DS +@deffnx {} BFD_RELOC_PPC64_SECTOFF_LO_DS +@deffnx {} BFD_RELOC_PPC64_TOC16_DS +@deffnx {} BFD_RELOC_PPC64_TOC16_LO_DS +@deffnx {} BFD_RELOC_PPC64_PLTGOT16_DS +@deffnx {} BFD_RELOC_PPC64_PLTGOT16_LO_DS +Power(rs6000) and PowerPC relocations. +@end deffn +@deffn {} BFD_RELOC_PPC_TLS +@deffnx {} BFD_RELOC_PPC_DTPMOD +@deffnx {} BFD_RELOC_PPC_TPREL16 +@deffnx {} BFD_RELOC_PPC_TPREL16_LO +@deffnx {} BFD_RELOC_PPC_TPREL16_HI +@deffnx {} BFD_RELOC_PPC_TPREL16_HA +@deffnx {} BFD_RELOC_PPC_TPREL +@deffnx {} BFD_RELOC_PPC_DTPREL16 +@deffnx {} BFD_RELOC_PPC_DTPREL16_LO +@deffnx {} BFD_RELOC_PPC_DTPREL16_HI +@deffnx {} BFD_RELOC_PPC_DTPREL16_HA +@deffnx {} BFD_RELOC_PPC_DTPREL +@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16 +@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_LO +@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_HI +@deffnx {} BFD_RELOC_PPC_GOT_TLSGD16_HA +@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16 +@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_LO +@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_HI +@deffnx {} BFD_RELOC_PPC_GOT_TLSLD16_HA +@deffnx {} BFD_RELOC_PPC_GOT_TPREL16 +@deffnx {} BFD_RELOC_PPC_GOT_TPREL16_LO +@deffnx {} BFD_RELOC_PPC_GOT_TPREL16_HI +@deffnx {} BFD_RELOC_PPC_GOT_TPREL16_HA +@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16 +@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_LO +@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HI +@deffnx {} BFD_RELOC_PPC_GOT_DTPREL16_HA +@deffnx {} BFD_RELOC_PPC64_TPREL16_DS +@deffnx {} BFD_RELOC_PPC64_TPREL16_LO_DS +@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHER +@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHERA +@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHEST +@deffnx {} BFD_RELOC_PPC64_TPREL16_HIGHESTA +@deffnx {} BFD_RELOC_PPC64_DTPREL16_DS +@deffnx {} BFD_RELOC_PPC64_DTPREL16_LO_DS +@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHER +@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHERA +@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHEST +@deffnx {} BFD_RELOC_PPC64_DTPREL16_HIGHESTA +PowerPC and PowerPC64 thread-local storage relocations. +@end deffn +@deffn {} BFD_RELOC_I370_D12 +IBM 370/390 relocations +@end deffn +@deffn {} BFD_RELOC_CTOR +The type of reloc used to build a constructor table - at the moment +probably a 32 bit wide absolute relocation, but the target can choose. +It generally does map to one of the other relocation types. +@end deffn +@deffn {} BFD_RELOC_ARM_PCREL_BRANCH +ARM 26 bit pc-relative branch. The lowest two bits must be zero and are +not stored in the instruction. +@end deffn +@deffn {} BFD_RELOC_ARM_PCREL_BLX +ARM 26 bit pc-relative branch. The lowest bit must be zero and is +not stored in the instruction. The 2nd lowest bit comes from a 1 bit +field in the instruction. +@end deffn +@deffn {} BFD_RELOC_THUMB_PCREL_BLX +Thumb 22 bit pc-relative branch. The lowest bit must be zero and is +not stored in the instruction. The 2nd lowest bit comes from a 1 bit +field in the instruction. +@end deffn +@deffn {} BFD_RELOC_ARM_PCREL_CALL +ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction. +@end deffn +@deffn {} BFD_RELOC_ARM_PCREL_JUMP +ARM 26-bit pc-relative branch for B or conditional BL instruction. +@end deffn +@deffn {} BFD_RELOC_THUMB_PCREL_BRANCH7 +@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH9 +@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH12 +@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH20 +@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH23 +@deffnx {} BFD_RELOC_THUMB_PCREL_BRANCH25 +Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches. +The lowest bit must be zero and is not stored in the instruction. +Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an +"nn" one smaller in all cases. Note further that BRANCH23 +corresponds to R_ARM_THM_CALL. +@end deffn +@deffn {} BFD_RELOC_ARM_OFFSET_IMM +12-bit immediate offset, used in ARM-format ldr and str instructions. +@end deffn +@deffn {} BFD_RELOC_ARM_THUMB_OFFSET +5-bit immediate offset, used in Thumb-format ldr and str instructions. +@end deffn +@deffn {} BFD_RELOC_ARM_TARGET1 +Pc-relative or absolute relocation depending on target. Used for +entries in .init_array sections. +@end deffn +@deffn {} BFD_RELOC_ARM_ROSEGREL32 +Read-only segment base relative address. +@end deffn +@deffn {} BFD_RELOC_ARM_SBREL32 +Data segment base relative address. +@end deffn +@deffn {} BFD_RELOC_ARM_TARGET2 +This reloc is used for references to RTTI data from exception handling +tables. The actual definition depends on the target. It may be a +pc-relative or some form of GOT-indirect relocation. +@end deffn +@deffn {} BFD_RELOC_ARM_PREL31 +31-bit PC relative address. +@end deffn +@deffn {} BFD_RELOC_ARM_MOVW +@deffnx {} BFD_RELOC_ARM_MOVT +@deffnx {} BFD_RELOC_ARM_MOVW_PCREL +@deffnx {} BFD_RELOC_ARM_MOVT_PCREL +@deffnx {} BFD_RELOC_ARM_THUMB_MOVW +@deffnx {} BFD_RELOC_ARM_THUMB_MOVT +@deffnx {} BFD_RELOC_ARM_THUMB_MOVW_PCREL +@deffnx {} BFD_RELOC_ARM_THUMB_MOVT_PCREL +Low and High halfword relocations for MOVW and MOVT instructions. +@end deffn +@deffn {} BFD_RELOC_ARM_JUMP_SLOT +@deffnx {} BFD_RELOC_ARM_GLOB_DAT +@deffnx {} BFD_RELOC_ARM_GOT32 +@deffnx {} BFD_RELOC_ARM_PLT32 +@deffnx {} BFD_RELOC_ARM_RELATIVE +@deffnx {} BFD_RELOC_ARM_GOTOFF +@deffnx {} BFD_RELOC_ARM_GOTPC +Relocations for setting up GOTs and PLTs for shared libraries. +@end deffn +@deffn {} BFD_RELOC_ARM_TLS_GD32 +@deffnx {} BFD_RELOC_ARM_TLS_LDO32 +@deffnx {} BFD_RELOC_ARM_TLS_LDM32 +@deffnx {} BFD_RELOC_ARM_TLS_DTPOFF32 +@deffnx {} BFD_RELOC_ARM_TLS_DTPMOD32 +@deffnx {} BFD_RELOC_ARM_TLS_TPOFF32 +@deffnx {} BFD_RELOC_ARM_TLS_IE32 +@deffnx {} BFD_RELOC_ARM_TLS_LE32 +ARM thread-local storage relocations. +@end deffn +@deffn {} BFD_RELOC_ARM_ALU_PC_G0_NC +@deffnx {} BFD_RELOC_ARM_ALU_PC_G0 +@deffnx {} BFD_RELOC_ARM_ALU_PC_G1_NC +@deffnx {} BFD_RELOC_ARM_ALU_PC_G1 +@deffnx {} BFD_RELOC_ARM_ALU_PC_G2 +@deffnx {} BFD_RELOC_ARM_LDR_PC_G0 +@deffnx {} BFD_RELOC_ARM_LDR_PC_G1 +@deffnx {} BFD_RELOC_ARM_LDR_PC_G2 +@deffnx {} BFD_RELOC_ARM_LDRS_PC_G0 +@deffnx {} BFD_RELOC_ARM_LDRS_PC_G1 +@deffnx {} BFD_RELOC_ARM_LDRS_PC_G2 +@deffnx {} BFD_RELOC_ARM_LDC_PC_G0 +@deffnx {} BFD_RELOC_ARM_LDC_PC_G1 +@deffnx {} BFD_RELOC_ARM_LDC_PC_G2 +@deffnx {} BFD_RELOC_ARM_ALU_SB_G0_NC +@deffnx {} BFD_RELOC_ARM_ALU_SB_G0 +@deffnx {} BFD_RELOC_ARM_ALU_SB_G1_NC +@deffnx {} BFD_RELOC_ARM_ALU_SB_G1 +@deffnx {} BFD_RELOC_ARM_ALU_SB_G2 +@deffnx {} BFD_RELOC_ARM_LDR_SB_G0 +@deffnx {} BFD_RELOC_ARM_LDR_SB_G1 +@deffnx {} BFD_RELOC_ARM_LDR_SB_G2 +@deffnx {} BFD_RELOC_ARM_LDRS_SB_G0 +@deffnx {} BFD_RELOC_ARM_LDRS_SB_G1 +@deffnx {} BFD_RELOC_ARM_LDRS_SB_G2 +@deffnx {} BFD_RELOC_ARM_LDC_SB_G0 +@deffnx {} BFD_RELOC_ARM_LDC_SB_G1 +@deffnx {} BFD_RELOC_ARM_LDC_SB_G2 +ARM group relocations. +@end deffn +@deffn {} BFD_RELOC_ARM_IMMEDIATE +@deffnx {} BFD_RELOC_ARM_ADRL_IMMEDIATE +@deffnx {} BFD_RELOC_ARM_T32_IMMEDIATE +@deffnx {} BFD_RELOC_ARM_T32_ADD_IMM +@deffnx {} BFD_RELOC_ARM_T32_IMM12 +@deffnx {} BFD_RELOC_ARM_T32_ADD_PC12 +@deffnx {} BFD_RELOC_ARM_SHIFT_IMM +@deffnx {} BFD_RELOC_ARM_SMC +@deffnx {} BFD_RELOC_ARM_SWI +@deffnx {} BFD_RELOC_ARM_MULTI +@deffnx {} BFD_RELOC_ARM_CP_OFF_IMM +@deffnx {} BFD_RELOC_ARM_CP_OFF_IMM_S2 +@deffnx {} BFD_RELOC_ARM_T32_CP_OFF_IMM +@deffnx {} BFD_RELOC_ARM_T32_CP_OFF_IMM_S2 +@deffnx {} BFD_RELOC_ARM_ADR_IMM +@deffnx {} BFD_RELOC_ARM_LDR_IMM +@deffnx {} BFD_RELOC_ARM_LITERAL +@deffnx {} BFD_RELOC_ARM_IN_POOL +@deffnx {} BFD_RELOC_ARM_OFFSET_IMM8 +@deffnx {} BFD_RELOC_ARM_T32_OFFSET_U8 +@deffnx {} BFD_RELOC_ARM_T32_OFFSET_IMM +@deffnx {} BFD_RELOC_ARM_HWLITERAL +@deffnx {} BFD_RELOC_ARM_THUMB_ADD +@deffnx {} BFD_RELOC_ARM_THUMB_IMM +@deffnx {} BFD_RELOC_ARM_THUMB_SHIFT +These relocs are only used within the ARM assembler. They are not +(at present) written to any object files. +@end deffn +@deffn {} BFD_RELOC_SH_PCDISP8BY2 +@deffnx {} BFD_RELOC_SH_PCDISP12BY2 +@deffnx {} BFD_RELOC_SH_IMM3 +@deffnx {} BFD_RELOC_SH_IMM3U +@deffnx {} BFD_RELOC_SH_DISP12 +@deffnx {} BFD_RELOC_SH_DISP12BY2 +@deffnx {} BFD_RELOC_SH_DISP12BY4 +@deffnx {} BFD_RELOC_SH_DISP12BY8 +@deffnx {} BFD_RELOC_SH_DISP20 +@deffnx {} BFD_RELOC_SH_DISP20BY8 +@deffnx {} BFD_RELOC_SH_IMM4 +@deffnx {} BFD_RELOC_SH_IMM4BY2 +@deffnx {} BFD_RELOC_SH_IMM4BY4 +@deffnx {} BFD_RELOC_SH_IMM8 +@deffnx {} BFD_RELOC_SH_IMM8BY2 +@deffnx {} BFD_RELOC_SH_IMM8BY4 +@deffnx {} BFD_RELOC_SH_PCRELIMM8BY2 +@deffnx {} BFD_RELOC_SH_PCRELIMM8BY4 +@deffnx {} BFD_RELOC_SH_SWITCH16 +@deffnx {} BFD_RELOC_SH_SWITCH32 +@deffnx {} BFD_RELOC_SH_USES +@deffnx {} BFD_RELOC_SH_COUNT +@deffnx {} BFD_RELOC_SH_ALIGN +@deffnx {} BFD_RELOC_SH_CODE +@deffnx {} BFD_RELOC_SH_DATA +@deffnx {} BFD_RELOC_SH_LABEL +@deffnx {} BFD_RELOC_SH_LOOP_START +@deffnx {} BFD_RELOC_SH_LOOP_END +@deffnx {} BFD_RELOC_SH_COPY +@deffnx {} BFD_RELOC_SH_GLOB_DAT +@deffnx {} BFD_RELOC_SH_JMP_SLOT +@deffnx {} BFD_RELOC_SH_RELATIVE +@deffnx {} BFD_RELOC_SH_GOTPC +@deffnx {} BFD_RELOC_SH_GOT_LOW16 +@deffnx {} BFD_RELOC_SH_GOT_MEDLOW16 +@deffnx {} BFD_RELOC_SH_GOT_MEDHI16 +@deffnx {} BFD_RELOC_SH_GOT_HI16 +@deffnx {} BFD_RELOC_SH_GOTPLT_LOW16 +@deffnx {} BFD_RELOC_SH_GOTPLT_MEDLOW16 +@deffnx {} BFD_RELOC_SH_GOTPLT_MEDHI16 +@deffnx {} BFD_RELOC_SH_GOTPLT_HI16 +@deffnx {} BFD_RELOC_SH_PLT_LOW16 +@deffnx {} BFD_RELOC_SH_PLT_MEDLOW16 +@deffnx {} BFD_RELOC_SH_PLT_MEDHI16 +@deffnx {} BFD_RELOC_SH_PLT_HI16 +@deffnx {} BFD_RELOC_SH_GOTOFF_LOW16 +@deffnx {} BFD_RELOC_SH_GOTOFF_MEDLOW16 +@deffnx {} BFD_RELOC_SH_GOTOFF_MEDHI16 +@deffnx {} BFD_RELOC_SH_GOTOFF_HI16 +@deffnx {} BFD_RELOC_SH_GOTPC_LOW16 +@deffnx {} BFD_RELOC_SH_GOTPC_MEDLOW16 +@deffnx {} BFD_RELOC_SH_GOTPC_MEDHI16 +@deffnx {} BFD_RELOC_SH_GOTPC_HI16 +@deffnx {} BFD_RELOC_SH_COPY64 +@deffnx {} BFD_RELOC_SH_GLOB_DAT64 +@deffnx {} BFD_RELOC_SH_JMP_SLOT64 +@deffnx {} BFD_RELOC_SH_RELATIVE64 +@deffnx {} BFD_RELOC_SH_GOT10BY4 +@deffnx {} BFD_RELOC_SH_GOT10BY8 +@deffnx {} BFD_RELOC_SH_GOTPLT10BY4 +@deffnx {} BFD_RELOC_SH_GOTPLT10BY8 +@deffnx {} BFD_RELOC_SH_GOTPLT32 +@deffnx {} BFD_RELOC_SH_SHMEDIA_CODE +@deffnx {} BFD_RELOC_SH_IMMU5 +@deffnx {} BFD_RELOC_SH_IMMS6 +@deffnx {} BFD_RELOC_SH_IMMS6BY32 +@deffnx {} BFD_RELOC_SH_IMMU6 +@deffnx {} BFD_RELOC_SH_IMMS10 +@deffnx {} BFD_RELOC_SH_IMMS10BY2 +@deffnx {} BFD_RELOC_SH_IMMS10BY4 +@deffnx {} BFD_RELOC_SH_IMMS10BY8 +@deffnx {} BFD_RELOC_SH_IMMS16 +@deffnx {} BFD_RELOC_SH_IMMU16 +@deffnx {} BFD_RELOC_SH_IMM_LOW16 +@deffnx {} BFD_RELOC_SH_IMM_LOW16_PCREL +@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16 +@deffnx {} BFD_RELOC_SH_IMM_MEDLOW16_PCREL +@deffnx {} BFD_RELOC_SH_IMM_MEDHI16 +@deffnx {} BFD_RELOC_SH_IMM_MEDHI16_PCREL +@deffnx {} BFD_RELOC_SH_IMM_HI16 +@deffnx {} BFD_RELOC_SH_IMM_HI16_PCREL +@deffnx {} BFD_RELOC_SH_PT_16 +@deffnx {} BFD_RELOC_SH_TLS_GD_32 +@deffnx {} BFD_RELOC_SH_TLS_LD_32 +@deffnx {} BFD_RELOC_SH_TLS_LDO_32 +@deffnx {} BFD_RELOC_SH_TLS_IE_32 +@deffnx {} BFD_RELOC_SH_TLS_LE_32 +@deffnx {} BFD_RELOC_SH_TLS_DTPMOD32 +@deffnx {} BFD_RELOC_SH_TLS_DTPOFF32 +@deffnx {} BFD_RELOC_SH_TLS_TPOFF32 +Renesas / SuperH SH relocs. Not all of these appear in object files. +@end deffn +@deffn {} BFD_RELOC_ARC_B22_PCREL +ARC Cores relocs. +ARC 22 bit pc-relative branch. The lowest two bits must be zero and are +not stored in the instruction. The high 20 bits are installed in bits 26 +through 7 of the instruction. +@end deffn +@deffn {} BFD_RELOC_ARC_B26 +ARC 26 bit absolute branch. The lowest two bits must be zero and are not +stored in the instruction. The high 24 bits are installed in bits 23 +through 0. +@end deffn +@deffn {} BFD_RELOC_BFIN_16_IMM +ADI Blackfin 16 bit immediate absolute reloc. +@end deffn +@deffn {} BFD_RELOC_BFIN_16_HIGH +ADI Blackfin 16 bit immediate absolute reloc higher 16 bits. +@end deffn +@deffn {} BFD_RELOC_BFIN_4_PCREL +ADI Blackfin 'a' part of LSETUP. +@end deffn +@deffn {} BFD_RELOC_BFIN_5_PCREL +ADI Blackfin. +@end deffn +@deffn {} BFD_RELOC_BFIN_16_LOW +ADI Blackfin 16 bit immediate absolute reloc lower 16 bits. +@end deffn +@deffn {} BFD_RELOC_BFIN_10_PCREL +ADI Blackfin. +@end deffn +@deffn {} BFD_RELOC_BFIN_11_PCREL +ADI Blackfin 'b' part of LSETUP. +@end deffn +@deffn {} BFD_RELOC_BFIN_12_PCREL_JUMP +ADI Blackfin. +@end deffn +@deffn {} BFD_RELOC_BFIN_12_PCREL_JUMP_S +ADI Blackfin Short jump, pcrel. +@end deffn +@deffn {} BFD_RELOC_BFIN_24_PCREL_CALL_X +ADI Blackfin Call.x not implemented. +@end deffn +@deffn {} BFD_RELOC_BFIN_24_PCREL_JUMP_L +ADI Blackfin Long Jump pcrel. +@end deffn +@deffn {} BFD_RELOC_BFIN_GOT17M4 +@deffnx {} BFD_RELOC_BFIN_GOTHI +@deffnx {} BFD_RELOC_BFIN_GOTLO +@deffnx {} BFD_RELOC_BFIN_FUNCDESC +@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOT17M4 +@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTHI +@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTLO +@deffnx {} BFD_RELOC_BFIN_FUNCDESC_VALUE +@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4 +@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI +@deffnx {} BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO +@deffnx {} BFD_RELOC_BFIN_GOTOFF17M4 +@deffnx {} BFD_RELOC_BFIN_GOTOFFHI +@deffnx {} BFD_RELOC_BFIN_GOTOFFLO +ADI Blackfin FD-PIC relocations. +@end deffn +@deffn {} BFD_RELOC_BFIN_GOT +ADI Blackfin GOT relocation. +@end deffn +@deffn {} BFD_RELOC_BFIN_PLTPC +ADI Blackfin PLTPC relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_PUSH +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_CONST +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_ADD +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_SUB +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_MULT +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_DIV +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_MOD +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_LSHIFT +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_RSHIFT +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_AND +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_OR +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_XOR +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_LAND +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_LOR +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_LEN +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_NEG +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_COMP +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_PAGE +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_HWPAGE +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_ARELOC_BFIN_ADDR +ADI Blackfin arithmetic relocation. +@end deffn +@deffn {} BFD_RELOC_D10V_10_PCREL_R +Mitsubishi D10V relocs. +This is a 10-bit reloc with the right 2 bits +assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D10V_10_PCREL_L +Mitsubishi D10V relocs. +This is a 10-bit reloc with the right 2 bits +assumed to be 0. This is the same as the previous reloc +except it is in the left container, i.e., +shifted left 15 bits. +@end deffn +@deffn {} BFD_RELOC_D10V_18 +This is an 18-bit reloc with the right 2 bits +assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D10V_18_PCREL +This is an 18-bit reloc with the right 2 bits +assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D30V_6 +Mitsubishi D30V relocs. +This is a 6-bit absolute reloc. +@end deffn +@deffn {} BFD_RELOC_D30V_9_PCREL +This is a 6-bit pc-relative reloc with +the right 3 bits assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D30V_9_PCREL_R +This is a 6-bit pc-relative reloc with +the right 3 bits assumed to be 0. Same +as the previous reloc but on the right side +of the container. +@end deffn +@deffn {} BFD_RELOC_D30V_15 +This is a 12-bit absolute reloc with the +right 3 bitsassumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D30V_15_PCREL +This is a 12-bit pc-relative reloc with +the right 3 bits assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D30V_15_PCREL_R +This is a 12-bit pc-relative reloc with +the right 3 bits assumed to be 0. Same +as the previous reloc but on the right side +of the container. +@end deffn +@deffn {} BFD_RELOC_D30V_21 +This is an 18-bit absolute reloc with +the right 3 bits assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D30V_21_PCREL +This is an 18-bit pc-relative reloc with +the right 3 bits assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_D30V_21_PCREL_R +This is an 18-bit pc-relative reloc with +the right 3 bits assumed to be 0. Same +as the previous reloc but on the right side +of the container. +@end deffn +@deffn {} BFD_RELOC_D30V_32 +This is a 32-bit absolute reloc. +@end deffn +@deffn {} BFD_RELOC_D30V_32_PCREL +This is a 32-bit pc-relative reloc. +@end deffn +@deffn {} BFD_RELOC_DLX_HI16_S +DLX relocs +@end deffn +@deffn {} BFD_RELOC_DLX_LO16 +DLX relocs +@end deffn +@deffn {} BFD_RELOC_DLX_JMP26 +DLX relocs +@end deffn +@deffn {} BFD_RELOC_M32C_HI8 +@deffnx {} BFD_RELOC_M32C_RL_JUMP +@deffnx {} BFD_RELOC_M32C_RL_1ADDR +@deffnx {} BFD_RELOC_M32C_RL_2ADDR +Renesas M16C/M32C Relocations. +@end deffn +@deffn {} BFD_RELOC_M32R_24 +Renesas M32R (formerly Mitsubishi M32R) relocs. +This is a 24 bit absolute address. +@end deffn +@deffn {} BFD_RELOC_M32R_10_PCREL +This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_M32R_18_PCREL +This is an 18-bit reloc with the right 2 bits assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_M32R_26_PCREL +This is a 26-bit reloc with the right 2 bits assumed to be 0. +@end deffn +@deffn {} BFD_RELOC_M32R_HI16_ULO +This is a 16-bit reloc containing the high 16 bits of an address +used when the lower 16 bits are treated as unsigned. +@end deffn +@deffn {} BFD_RELOC_M32R_HI16_SLO +This is a 16-bit reloc containing the high 16 bits of an address +used when the lower 16 bits are treated as signed. +@end deffn +@deffn {} BFD_RELOC_M32R_LO16 +This is a 16-bit reloc containing the lower 16 bits of an address. +@end deffn +@deffn {} BFD_RELOC_M32R_SDA16 +This is a 16-bit reloc containing the small data area offset for use in +add3, load, and store instructions. +@end deffn +@deffn {} BFD_RELOC_M32R_GOT24 +@deffnx {} BFD_RELOC_M32R_26_PLTREL +@deffnx {} BFD_RELOC_M32R_COPY +@deffnx {} BFD_RELOC_M32R_GLOB_DAT +@deffnx {} BFD_RELOC_M32R_JMP_SLOT +@deffnx {} BFD_RELOC_M32R_RELATIVE +@deffnx {} BFD_RELOC_M32R_GOTOFF +@deffnx {} BFD_RELOC_M32R_GOTOFF_HI_ULO +@deffnx {} BFD_RELOC_M32R_GOTOFF_HI_SLO +@deffnx {} BFD_RELOC_M32R_GOTOFF_LO +@deffnx {} BFD_RELOC_M32R_GOTPC24 +@deffnx {} BFD_RELOC_M32R_GOT16_HI_ULO +@deffnx {} BFD_RELOC_M32R_GOT16_HI_SLO +@deffnx {} BFD_RELOC_M32R_GOT16_LO +@deffnx {} BFD_RELOC_M32R_GOTPC_HI_ULO +@deffnx {} BFD_RELOC_M32R_GOTPC_HI_SLO +@deffnx {} BFD_RELOC_M32R_GOTPC_LO +For PIC. +@end deffn +@deffn {} BFD_RELOC_V850_9_PCREL +This is a 9-bit reloc +@end deffn +@deffn {} BFD_RELOC_V850_22_PCREL +This is a 22-bit reloc +@end deffn +@deffn {} BFD_RELOC_V850_SDA_16_16_OFFSET +This is a 16 bit offset from the short data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_SDA_15_16_OFFSET +This is a 16 bit offset (of which only 15 bits are used) from the +short data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_ZDA_16_16_OFFSET +This is a 16 bit offset from the zero data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_ZDA_15_16_OFFSET +This is a 16 bit offset (of which only 15 bits are used) from the +zero data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_TDA_6_8_OFFSET +This is an 8 bit offset (of which only 6 bits are used) from the +tiny data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_TDA_7_8_OFFSET +This is an 8bit offset (of which only 7 bits are used) from the tiny +data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_TDA_7_7_OFFSET +This is a 7 bit offset from the tiny data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_TDA_16_16_OFFSET +This is a 16 bit offset from the tiny data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_TDA_4_5_OFFSET +This is a 5 bit offset (of which only 4 bits are used) from the tiny +data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_TDA_4_4_OFFSET +This is a 4 bit offset from the tiny data area pointer. +@end deffn +@deffn {} BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET +This is a 16 bit offset from the short data area pointer, with the +bits placed non-contiguously in the instruction. +@end deffn +@deffn {} BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET +This is a 16 bit offset from the zero data area pointer, with the +bits placed non-contiguously in the instruction. +@end deffn +@deffn {} BFD_RELOC_V850_CALLT_6_7_OFFSET +This is a 6 bit offset from the call table base pointer. +@end deffn +@deffn {} BFD_RELOC_V850_CALLT_16_16_OFFSET +This is a 16 bit offset from the call table base pointer. +@end deffn +@deffn {} BFD_RELOC_V850_LONGCALL +Used for relaxing indirect function calls. +@end deffn +@deffn {} BFD_RELOC_V850_LONGJUMP +Used for relaxing indirect jumps. +@end deffn +@deffn {} BFD_RELOC_V850_ALIGN +Used to maintain alignment whilst relaxing. +@end deffn +@deffn {} BFD_RELOC_V850_LO16_SPLIT_OFFSET +This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu +instructions. +@end deffn +@deffn {} BFD_RELOC_MN10300_32_PCREL +This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the +instruction. +@end deffn +@deffn {} BFD_RELOC_MN10300_16_PCREL +This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the +instruction. +@end deffn +@deffn {} BFD_RELOC_TIC30_LDP +This is a 8bit DP reloc for the tms320c30, where the most +significant 8 bits of a 24 bit word are placed into the least +significant 8 bits of the opcode. +@end deffn +@deffn {} BFD_RELOC_TIC54X_PARTLS7 +This is a 7bit reloc for the tms320c54x, where the least +significant 7 bits of a 16 bit word are placed into the least +significant 7 bits of the opcode. +@end deffn +@deffn {} BFD_RELOC_TIC54X_PARTMS9 +This is a 9bit DP reloc for the tms320c54x, where the most +significant 9 bits of a 16 bit word are placed into the least +significant 9 bits of the opcode. +@end deffn +@deffn {} BFD_RELOC_TIC54X_23 +This is an extended address 23-bit reloc for the tms320c54x. +@end deffn +@deffn {} BFD_RELOC_TIC54X_16_OF_23 +This is a 16-bit reloc for the tms320c54x, where the least +significant 16 bits of a 23-bit extended address are placed into +the opcode. +@end deffn +@deffn {} BFD_RELOC_TIC54X_MS7_OF_23 +This is a reloc for the tms320c54x, where the most +significant 7 bits of a 23-bit extended address are placed into +the opcode. +@end deffn +@deffn {} BFD_RELOC_FR30_48 +This is a 48 bit reloc for the FR30 that stores 32 bits. +@end deffn +@deffn {} BFD_RELOC_FR30_20 +This is a 32 bit reloc for the FR30 that stores 20 bits split up into +two sections. +@end deffn +@deffn {} BFD_RELOC_FR30_6_IN_4 +This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in +4 bits. +@end deffn +@deffn {} BFD_RELOC_FR30_8_IN_8 +This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset +into 8 bits. +@end deffn +@deffn {} BFD_RELOC_FR30_9_IN_8 +This is a 16 bit reloc for the FR30 that stores a 9 bit short offset +into 8 bits. +@end deffn +@deffn {} BFD_RELOC_FR30_10_IN_8 +This is a 16 bit reloc for the FR30 that stores a 10 bit word offset +into 8 bits. +@end deffn +@deffn {} BFD_RELOC_FR30_9_PCREL +This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative +short offset into 8 bits. +@end deffn +@deffn {} BFD_RELOC_FR30_12_PCREL +This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative +short offset into 11 bits. +@end deffn +@deffn {} BFD_RELOC_MCORE_PCREL_IMM8BY4 +@deffnx {} BFD_RELOC_MCORE_PCREL_IMM11BY2 +@deffnx {} BFD_RELOC_MCORE_PCREL_IMM4BY2 +@deffnx {} BFD_RELOC_MCORE_PCREL_32 +@deffnx {} BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2 +@deffnx {} BFD_RELOC_MCORE_RVA +Motorola Mcore relocations. +@end deffn +@deffn {} BFD_RELOC_MEP_8 +@deffnx {} BFD_RELOC_MEP_16 +@deffnx {} BFD_RELOC_MEP_32 +@deffnx {} BFD_RELOC_MEP_PCREL8A2 +@deffnx {} BFD_RELOC_MEP_PCREL12A2 +@deffnx {} BFD_RELOC_MEP_PCREL17A2 +@deffnx {} BFD_RELOC_MEP_PCREL24A2 +@deffnx {} BFD_RELOC_MEP_PCABS24A2 +@deffnx {} BFD_RELOC_MEP_LOW16 +@deffnx {} BFD_RELOC_MEP_HI16U +@deffnx {} BFD_RELOC_MEP_HI16S +@deffnx {} BFD_RELOC_MEP_GPREL +@deffnx {} BFD_RELOC_MEP_TPREL +@deffnx {} BFD_RELOC_MEP_TPREL7 +@deffnx {} BFD_RELOC_MEP_TPREL7A2 +@deffnx {} BFD_RELOC_MEP_TPREL7A4 +@deffnx {} BFD_RELOC_MEP_UIMM24 +@deffnx {} BFD_RELOC_MEP_ADDR24A4 +@deffnx {} BFD_RELOC_MEP_GNU_VTINHERIT +@deffnx {} BFD_RELOC_MEP_GNU_VTENTRY +Toshiba Media Processor Relocations. +@end deffn +@deffn {} BFD_RELOC_MMIX_GETA +@deffnx {} BFD_RELOC_MMIX_GETA_1 +@deffnx {} BFD_RELOC_MMIX_GETA_2 +@deffnx {} BFD_RELOC_MMIX_GETA_3 +These are relocations for the GETA instruction. +@end deffn +@deffn {} BFD_RELOC_MMIX_CBRANCH +@deffnx {} BFD_RELOC_MMIX_CBRANCH_J +@deffnx {} BFD_RELOC_MMIX_CBRANCH_1 +@deffnx {} BFD_RELOC_MMIX_CBRANCH_2 +@deffnx {} BFD_RELOC_MMIX_CBRANCH_3 +These are relocations for a conditional branch instruction. +@end deffn +@deffn {} BFD_RELOC_MMIX_PUSHJ +@deffnx {} BFD_RELOC_MMIX_PUSHJ_1 +@deffnx {} BFD_RELOC_MMIX_PUSHJ_2 +@deffnx {} BFD_RELOC_MMIX_PUSHJ_3 +@deffnx {} BFD_RELOC_MMIX_PUSHJ_STUBBABLE +These are relocations for the PUSHJ instruction. +@end deffn +@deffn {} BFD_RELOC_MMIX_JMP +@deffnx {} BFD_RELOC_MMIX_JMP_1 +@deffnx {} BFD_RELOC_MMIX_JMP_2 +@deffnx {} BFD_RELOC_MMIX_JMP_3 +These are relocations for the JMP instruction. +@end deffn +@deffn {} BFD_RELOC_MMIX_ADDR19 +This is a relocation for a relative address as in a GETA instruction or +a branch. +@end deffn +@deffn {} BFD_RELOC_MMIX_ADDR27 +This is a relocation for a relative address as in a JMP instruction. +@end deffn +@deffn {} BFD_RELOC_MMIX_REG_OR_BYTE +This is a relocation for an instruction field that may be a general +register or a value 0..255. +@end deffn +@deffn {} BFD_RELOC_MMIX_REG +This is a relocation for an instruction field that may be a general +register. +@end deffn +@deffn {} BFD_RELOC_MMIX_BASE_PLUS_OFFSET +This is a relocation for two instruction fields holding a register and +an offset, the equivalent of the relocation. +@end deffn +@deffn {} BFD_RELOC_MMIX_LOCAL +This relocation is an assertion that the expression is not allocated as +a global register. It does not modify contents. +@end deffn +@deffn {} BFD_RELOC_AVR_7_PCREL +This is a 16 bit reloc for the AVR that stores 8 bit pc relative +short offset into 7 bits. +@end deffn +@deffn {} BFD_RELOC_AVR_13_PCREL +This is a 16 bit reloc for the AVR that stores 13 bit pc relative +short offset into 12 bits. +@end deffn +@deffn {} BFD_RELOC_AVR_16_PM +This is a 16 bit reloc for the AVR that stores 17 bit value (usually +program memory address) into 16 bits. +@end deffn +@deffn {} BFD_RELOC_AVR_LO8_LDI +This is a 16 bit reloc for the AVR that stores 8 bit value (usually +data memory address) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_HI8_LDI +This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit +of data memory address) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_HH8_LDI +This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit +of program memory address) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_MS8_LDI +This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit +of 32 bit value) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_LO8_LDI_NEG +This is a 16 bit reloc for the AVR that stores negated 8 bit value +(usually data memory address) into 8 bit immediate value of SUBI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_HI8_LDI_NEG +This is a 16 bit reloc for the AVR that stores negated 8 bit value +(high 8 bit of data memory address) into 8 bit immediate value of +SUBI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_HH8_LDI_NEG +This is a 16 bit reloc for the AVR that stores negated 8 bit value +(most high 8 bit of program memory address) into 8 bit immediate value +of LDI or SUBI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_MS8_LDI_NEG +This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb +of 32 bit value) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_LO8_LDI_PM +This is a 16 bit reloc for the AVR that stores 8 bit value (usually +command address) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_LO8_LDI_GS +This is a 16 bit reloc for the AVR that stores 8 bit value +(command address) into 8 bit immediate value of LDI insn. If the address +is beyond the 128k boundary, the linker inserts a jump stub for this reloc +in the lower 128k. +@end deffn +@deffn {} BFD_RELOC_AVR_HI8_LDI_PM +This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit +of command address) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_HI8_LDI_GS +This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit +of command address) into 8 bit immediate value of LDI insn. If the address +is beyond the 128k boundary, the linker inserts a jump stub for this reloc +below 128k. +@end deffn +@deffn {} BFD_RELOC_AVR_HH8_LDI_PM +This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit +of command address) into 8 bit immediate value of LDI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_LO8_LDI_PM_NEG +This is a 16 bit reloc for the AVR that stores negated 8 bit value +(usually command address) into 8 bit immediate value of SUBI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_HI8_LDI_PM_NEG +This is a 16 bit reloc for the AVR that stores negated 8 bit value +(high 8 bit of 16 bit command address) into 8 bit immediate value +of SUBI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_HH8_LDI_PM_NEG +This is a 16 bit reloc for the AVR that stores negated 8 bit value +(high 6 bit of 22 bit command address) into 8 bit immediate +value of SUBI insn. +@end deffn +@deffn {} BFD_RELOC_AVR_CALL +This is a 32 bit reloc for the AVR that stores 23 bit value +into 22 bits. +@end deffn +@deffn {} BFD_RELOC_AVR_LDI +This is a 16 bit reloc for the AVR that stores all needed bits +for absolute addressing with ldi with overflow check to linktime +@end deffn +@deffn {} BFD_RELOC_AVR_6 +This is a 6 bit reloc for the AVR that stores offset for ldd/std +instructions +@end deffn +@deffn {} BFD_RELOC_AVR_6_ADIW +This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw +instructions +@end deffn +@deffn {} BFD_RELOC_390_12 +Direct 12 bit. +@end deffn +@deffn {} BFD_RELOC_390_GOT12 +12 bit GOT offset. +@end deffn +@deffn {} BFD_RELOC_390_PLT32 +32 bit PC relative PLT address. +@end deffn +@deffn {} BFD_RELOC_390_COPY +Copy symbol at runtime. +@end deffn +@deffn {} BFD_RELOC_390_GLOB_DAT +Create GOT entry. +@end deffn +@deffn {} BFD_RELOC_390_JMP_SLOT +Create PLT entry. +@end deffn +@deffn {} BFD_RELOC_390_RELATIVE +Adjust by program base. +@end deffn +@deffn {} BFD_RELOC_390_GOTPC +32 bit PC relative offset to GOT. +@end deffn +@deffn {} BFD_RELOC_390_GOT16 +16 bit GOT offset. +@end deffn +@deffn {} BFD_RELOC_390_PC16DBL +PC relative 16 bit shifted by 1. +@end deffn +@deffn {} BFD_RELOC_390_PLT16DBL +16 bit PC rel. PLT shifted by 1. +@end deffn +@deffn {} BFD_RELOC_390_PC32DBL +PC relative 32 bit shifted by 1. +@end deffn +@deffn {} BFD_RELOC_390_PLT32DBL +32 bit PC rel. PLT shifted by 1. +@end deffn +@deffn {} BFD_RELOC_390_GOTPCDBL +32 bit PC rel. GOT shifted by 1. +@end deffn +@deffn {} BFD_RELOC_390_GOT64 +64 bit GOT offset. +@end deffn +@deffn {} BFD_RELOC_390_PLT64 +64 bit PC relative PLT address. +@end deffn +@deffn {} BFD_RELOC_390_GOTENT +32 bit rel. offset to GOT entry. +@end deffn +@deffn {} BFD_RELOC_390_GOTOFF64 +64 bit offset to GOT. +@end deffn +@deffn {} BFD_RELOC_390_GOTPLT12 +12-bit offset to symbol-entry within GOT, with PLT handling. +@end deffn +@deffn {} BFD_RELOC_390_GOTPLT16 +16-bit offset to symbol-entry within GOT, with PLT handling. +@end deffn +@deffn {} BFD_RELOC_390_GOTPLT32 +32-bit offset to symbol-entry within GOT, with PLT handling. +@end deffn +@deffn {} BFD_RELOC_390_GOTPLT64 +64-bit offset to symbol-entry within GOT, with PLT handling. +@end deffn +@deffn {} BFD_RELOC_390_GOTPLTENT +32-bit rel. offset to symbol-entry within GOT, with PLT handling. +@end deffn +@deffn {} BFD_RELOC_390_PLTOFF16 +16-bit rel. offset from the GOT to a PLT entry. +@end deffn +@deffn {} BFD_RELOC_390_PLTOFF32 +32-bit rel. offset from the GOT to a PLT entry. +@end deffn +@deffn {} BFD_RELOC_390_PLTOFF64 +64-bit rel. offset from the GOT to a PLT entry. +@end deffn +@deffn {} BFD_RELOC_390_TLS_LOAD +@deffnx {} BFD_RELOC_390_TLS_GDCALL +@deffnx {} BFD_RELOC_390_TLS_LDCALL +@deffnx {} BFD_RELOC_390_TLS_GD32 +@deffnx {} BFD_RELOC_390_TLS_GD64 +@deffnx {} BFD_RELOC_390_TLS_GOTIE12 +@deffnx {} BFD_RELOC_390_TLS_GOTIE32 +@deffnx {} BFD_RELOC_390_TLS_GOTIE64 +@deffnx {} BFD_RELOC_390_TLS_LDM32 +@deffnx {} BFD_RELOC_390_TLS_LDM64 +@deffnx {} BFD_RELOC_390_TLS_IE32 +@deffnx {} BFD_RELOC_390_TLS_IE64 +@deffnx {} BFD_RELOC_390_TLS_IEENT +@deffnx {} BFD_RELOC_390_TLS_LE32 +@deffnx {} BFD_RELOC_390_TLS_LE64 +@deffnx {} BFD_RELOC_390_TLS_LDO32 +@deffnx {} BFD_RELOC_390_TLS_LDO64 +@deffnx {} BFD_RELOC_390_TLS_DTPMOD +@deffnx {} BFD_RELOC_390_TLS_DTPOFF +@deffnx {} BFD_RELOC_390_TLS_TPOFF +s390 tls relocations. +@end deffn +@deffn {} BFD_RELOC_390_20 +@deffnx {} BFD_RELOC_390_GOT20 +@deffnx {} BFD_RELOC_390_GOTPLT20 +@deffnx {} BFD_RELOC_390_TLS_GOTIE20 +Long displacement extension. +@end deffn +@deffn {} BFD_RELOC_SCORE_DUMMY1 +Score relocations +@end deffn +@deffn {} BFD_RELOC_SCORE_GPREL15 +Low 16 bit for load/store +@end deffn +@deffn {} BFD_RELOC_SCORE_DUMMY2 +@deffnx {} BFD_RELOC_SCORE_JMP +This is a 24-bit reloc with the right 1 bit assumed to be 0 +@end deffn +@deffn {} BFD_RELOC_SCORE_BRANCH +This is a 19-bit reloc with the right 1 bit assumed to be 0 +@end deffn +@deffn {} BFD_RELOC_SCORE16_JMP +This is a 11-bit reloc with the right 1 bit assumed to be 0 +@end deffn +@deffn {} BFD_RELOC_SCORE16_BRANCH +This is a 8-bit reloc with the right 1 bit assumed to be 0 +@end deffn +@deffn {} BFD_RELOC_SCORE_GOT15 +@deffnx {} BFD_RELOC_SCORE_GOT_LO16 +@deffnx {} BFD_RELOC_SCORE_CALL15 +@deffnx {} BFD_RELOC_SCORE_DUMMY_HI16 +Undocumented Score relocs +@end deffn +@deffn {} BFD_RELOC_IP2K_FR9 +Scenix IP2K - 9-bit register number / data address +@end deffn +@deffn {} BFD_RELOC_IP2K_BANK +Scenix IP2K - 4-bit register/data bank number +@end deffn +@deffn {} BFD_RELOC_IP2K_ADDR16CJP +Scenix IP2K - low 13 bits of instruction word address +@end deffn +@deffn {} BFD_RELOC_IP2K_PAGE3 +Scenix IP2K - high 3 bits of instruction word address +@end deffn +@deffn {} BFD_RELOC_IP2K_LO8DATA +@deffnx {} BFD_RELOC_IP2K_HI8DATA +@deffnx {} BFD_RELOC_IP2K_EX8DATA +Scenix IP2K - ext/low/high 8 bits of data address +@end deffn +@deffn {} BFD_RELOC_IP2K_LO8INSN +@deffnx {} BFD_RELOC_IP2K_HI8INSN +Scenix IP2K - low/high 8 bits of instruction word address +@end deffn +@deffn {} BFD_RELOC_IP2K_PC_SKIP +Scenix IP2K - even/odd PC modifier to modify snb pcl.0 +@end deffn +@deffn {} BFD_RELOC_IP2K_TEXT +Scenix IP2K - 16 bit word address in text section. +@end deffn +@deffn {} BFD_RELOC_IP2K_FR_OFFSET +Scenix IP2K - 7-bit sp or dp offset +@end deffn +@deffn {} BFD_RELOC_VPE4KMATH_DATA +@deffnx {} BFD_RELOC_VPE4KMATH_INSN +Scenix VPE4K coprocessor - data/insn-space addressing +@end deffn +@deffn {} BFD_RELOC_VTABLE_INHERIT +@deffnx {} BFD_RELOC_VTABLE_ENTRY +These two relocations are used by the linker to determine which of +the entries in a C++ virtual function table are actually used. When +the --gc-sections option is given, the linker will zero out the entries +that are not used, so that the code for those functions need not be +included in the output. + +VTABLE_INHERIT is a zero-space relocation used to describe to the +linker the inheritance tree of a C++ virtual function table. The +relocation's symbol should be the parent class' vtable, and the +relocation should be located at the child vtable. + +VTABLE_ENTRY is a zero-space relocation that describes the use of a +virtual function table entry. The reloc's symbol should refer to the +table of the class mentioned in the code. Off of that base, an offset +describes the entry that is being used. For Rela hosts, this offset +is stored in the reloc's addend. For Rel hosts, we are forced to put +this offset in the reloc's section offset. +@end deffn +@deffn {} BFD_RELOC_IA64_IMM14 +@deffnx {} BFD_RELOC_IA64_IMM22 +@deffnx {} BFD_RELOC_IA64_IMM64 +@deffnx {} BFD_RELOC_IA64_DIR32MSB +@deffnx {} BFD_RELOC_IA64_DIR32LSB +@deffnx {} BFD_RELOC_IA64_DIR64MSB +@deffnx {} BFD_RELOC_IA64_DIR64LSB +@deffnx {} BFD_RELOC_IA64_GPREL22 +@deffnx {} BFD_RELOC_IA64_GPREL64I +@deffnx {} BFD_RELOC_IA64_GPREL32MSB +@deffnx {} BFD_RELOC_IA64_GPREL32LSB +@deffnx {} BFD_RELOC_IA64_GPREL64MSB +@deffnx {} BFD_RELOC_IA64_GPREL64LSB +@deffnx {} BFD_RELOC_IA64_LTOFF22 +@deffnx {} BFD_RELOC_IA64_LTOFF64I +@deffnx {} BFD_RELOC_IA64_PLTOFF22 +@deffnx {} BFD_RELOC_IA64_PLTOFF64I +@deffnx {} BFD_RELOC_IA64_PLTOFF64MSB +@deffnx {} BFD_RELOC_IA64_PLTOFF64LSB +@deffnx {} BFD_RELOC_IA64_FPTR64I +@deffnx {} BFD_RELOC_IA64_FPTR32MSB +@deffnx {} BFD_RELOC_IA64_FPTR32LSB +@deffnx {} BFD_RELOC_IA64_FPTR64MSB +@deffnx {} BFD_RELOC_IA64_FPTR64LSB +@deffnx {} BFD_RELOC_IA64_PCREL21B +@deffnx {} BFD_RELOC_IA64_PCREL21BI +@deffnx {} BFD_RELOC_IA64_PCREL21M +@deffnx {} BFD_RELOC_IA64_PCREL21F +@deffnx {} BFD_RELOC_IA64_PCREL22 +@deffnx {} BFD_RELOC_IA64_PCREL60B +@deffnx {} BFD_RELOC_IA64_PCREL64I +@deffnx {} BFD_RELOC_IA64_PCREL32MSB +@deffnx {} BFD_RELOC_IA64_PCREL32LSB +@deffnx {} BFD_RELOC_IA64_PCREL64MSB +@deffnx {} BFD_RELOC_IA64_PCREL64LSB +@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR22 +@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64I +@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR32MSB +@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR32LSB +@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64MSB +@deffnx {} BFD_RELOC_IA64_LTOFF_FPTR64LSB +@deffnx {} BFD_RELOC_IA64_SEGREL32MSB +@deffnx {} BFD_RELOC_IA64_SEGREL32LSB +@deffnx {} BFD_RELOC_IA64_SEGREL64MSB +@deffnx {} BFD_RELOC_IA64_SEGREL64LSB +@deffnx {} BFD_RELOC_IA64_SECREL32MSB +@deffnx {} BFD_RELOC_IA64_SECREL32LSB +@deffnx {} BFD_RELOC_IA64_SECREL64MSB +@deffnx {} BFD_RELOC_IA64_SECREL64LSB +@deffnx {} BFD_RELOC_IA64_REL32MSB +@deffnx {} BFD_RELOC_IA64_REL32LSB +@deffnx {} BFD_RELOC_IA64_REL64MSB +@deffnx {} BFD_RELOC_IA64_REL64LSB +@deffnx {} BFD_RELOC_IA64_LTV32MSB +@deffnx {} BFD_RELOC_IA64_LTV32LSB +@deffnx {} BFD_RELOC_IA64_LTV64MSB +@deffnx {} BFD_RELOC_IA64_LTV64LSB +@deffnx {} BFD_RELOC_IA64_IPLTMSB +@deffnx {} BFD_RELOC_IA64_IPLTLSB +@deffnx {} BFD_RELOC_IA64_COPY +@deffnx {} BFD_RELOC_IA64_LTOFF22X +@deffnx {} BFD_RELOC_IA64_LDXMOV +@deffnx {} BFD_RELOC_IA64_TPREL14 +@deffnx {} BFD_RELOC_IA64_TPREL22 +@deffnx {} BFD_RELOC_IA64_TPREL64I +@deffnx {} BFD_RELOC_IA64_TPREL64MSB +@deffnx {} BFD_RELOC_IA64_TPREL64LSB +@deffnx {} BFD_RELOC_IA64_LTOFF_TPREL22 +@deffnx {} BFD_RELOC_IA64_DTPMOD64MSB +@deffnx {} BFD_RELOC_IA64_DTPMOD64LSB +@deffnx {} BFD_RELOC_IA64_LTOFF_DTPMOD22 +@deffnx {} BFD_RELOC_IA64_DTPREL14 +@deffnx {} BFD_RELOC_IA64_DTPREL22 +@deffnx {} BFD_RELOC_IA64_DTPREL64I +@deffnx {} BFD_RELOC_IA64_DTPREL32MSB +@deffnx {} BFD_RELOC_IA64_DTPREL32LSB +@deffnx {} BFD_RELOC_IA64_DTPREL64MSB +@deffnx {} BFD_RELOC_IA64_DTPREL64LSB +@deffnx {} BFD_RELOC_IA64_LTOFF_DTPREL22 +Intel IA64 Relocations. +@end deffn +@deffn {} BFD_RELOC_M68HC11_HI8 +Motorola 68HC11 reloc. +This is the 8 bit high part of an absolute address. +@end deffn +@deffn {} BFD_RELOC_M68HC11_LO8 +Motorola 68HC11 reloc. +This is the 8 bit low part of an absolute address. +@end deffn +@deffn {} BFD_RELOC_M68HC11_3B +Motorola 68HC11 reloc. +This is the 3 bit of a value. +@end deffn +@deffn {} BFD_RELOC_M68HC11_RL_JUMP +Motorola 68HC11 reloc. +This reloc marks the beginning of a jump/call instruction. +It is used for linker relaxation to correctly identify beginning +of instruction and change some branches to use PC-relative +addressing mode. +@end deffn +@deffn {} BFD_RELOC_M68HC11_RL_GROUP +Motorola 68HC11 reloc. +This reloc marks a group of several instructions that gcc generates +and for which the linker relaxation pass can modify and/or remove +some of them. +@end deffn +@deffn {} BFD_RELOC_M68HC11_LO16 +Motorola 68HC11 reloc. +This is the 16-bit lower part of an address. It is used for 'call' +instruction to specify the symbol address without any special +transformation (due to memory bank window). +@end deffn +@deffn {} BFD_RELOC_M68HC11_PAGE +Motorola 68HC11 reloc. +This is a 8-bit reloc that specifies the page number of an address. +It is used by 'call' instruction to specify the page number of +the symbol. +@end deffn +@deffn {} BFD_RELOC_M68HC11_24 +Motorola 68HC11 reloc. +This is a 24-bit reloc that represents the address with a 16-bit +value and a 8-bit page number. The symbol address is transformed +to follow the 16K memory bank of 68HC12 (seen as mapped in the window). +@end deffn +@deffn {} BFD_RELOC_M68HC12_5B +Motorola 68HC12 reloc. +This is the 5 bits of a value. +@end deffn +@deffn {} BFD_RELOC_16C_NUM08 +@deffnx {} BFD_RELOC_16C_NUM08_C +@deffnx {} BFD_RELOC_16C_NUM16 +@deffnx {} BFD_RELOC_16C_NUM16_C +@deffnx {} BFD_RELOC_16C_NUM32 +@deffnx {} BFD_RELOC_16C_NUM32_C +@deffnx {} BFD_RELOC_16C_DISP04 +@deffnx {} BFD_RELOC_16C_DISP04_C +@deffnx {} BFD_RELOC_16C_DISP08 +@deffnx {} BFD_RELOC_16C_DISP08_C +@deffnx {} BFD_RELOC_16C_DISP16 +@deffnx {} BFD_RELOC_16C_DISP16_C +@deffnx {} BFD_RELOC_16C_DISP24 +@deffnx {} BFD_RELOC_16C_DISP24_C +@deffnx {} BFD_RELOC_16C_DISP24a +@deffnx {} BFD_RELOC_16C_DISP24a_C +@deffnx {} BFD_RELOC_16C_REG04 +@deffnx {} BFD_RELOC_16C_REG04_C +@deffnx {} BFD_RELOC_16C_REG04a +@deffnx {} BFD_RELOC_16C_REG04a_C +@deffnx {} BFD_RELOC_16C_REG14 +@deffnx {} BFD_RELOC_16C_REG14_C +@deffnx {} BFD_RELOC_16C_REG16 +@deffnx {} BFD_RELOC_16C_REG16_C +@deffnx {} BFD_RELOC_16C_REG20 +@deffnx {} BFD_RELOC_16C_REG20_C +@deffnx {} BFD_RELOC_16C_ABS20 +@deffnx {} BFD_RELOC_16C_ABS20_C +@deffnx {} BFD_RELOC_16C_ABS24 +@deffnx {} BFD_RELOC_16C_ABS24_C +@deffnx {} BFD_RELOC_16C_IMM04 +@deffnx {} BFD_RELOC_16C_IMM04_C +@deffnx {} BFD_RELOC_16C_IMM16 +@deffnx {} BFD_RELOC_16C_IMM16_C +@deffnx {} BFD_RELOC_16C_IMM20 +@deffnx {} BFD_RELOC_16C_IMM20_C +@deffnx {} BFD_RELOC_16C_IMM24 +@deffnx {} BFD_RELOC_16C_IMM24_C +@deffnx {} BFD_RELOC_16C_IMM32 +@deffnx {} BFD_RELOC_16C_IMM32_C +NS CR16C Relocations. +@end deffn +@deffn {} BFD_RELOC_CR16_NUM8 +@deffnx {} BFD_RELOC_CR16_NUM16 +@deffnx {} BFD_RELOC_CR16_NUM32 +@deffnx {} BFD_RELOC_CR16_NUM32a +@deffnx {} BFD_RELOC_CR16_REGREL0 +@deffnx {} BFD_RELOC_CR16_REGREL4 +@deffnx {} BFD_RELOC_CR16_REGREL4a +@deffnx {} BFD_RELOC_CR16_REGREL14 +@deffnx {} BFD_RELOC_CR16_REGREL14a +@deffnx {} BFD_RELOC_CR16_REGREL16 +@deffnx {} BFD_RELOC_CR16_REGREL20 +@deffnx {} BFD_RELOC_CR16_REGREL20a +@deffnx {} BFD_RELOC_CR16_ABS20 +@deffnx {} BFD_RELOC_CR16_ABS24 +@deffnx {} BFD_RELOC_CR16_IMM4 +@deffnx {} BFD_RELOC_CR16_IMM8 +@deffnx {} BFD_RELOC_CR16_IMM16 +@deffnx {} BFD_RELOC_CR16_IMM20 +@deffnx {} BFD_RELOC_CR16_IMM24 +@deffnx {} BFD_RELOC_CR16_IMM32 +@deffnx {} BFD_RELOC_CR16_IMM32a +@deffnx {} BFD_RELOC_CR16_DISP4 +@deffnx {} BFD_RELOC_CR16_DISP8 +@deffnx {} BFD_RELOC_CR16_DISP16 +@deffnx {} BFD_RELOC_CR16_DISP20 +@deffnx {} BFD_RELOC_CR16_DISP24 +@deffnx {} BFD_RELOC_CR16_DISP24a +NS CR16 Relocations. +@end deffn +@deffn {} BFD_RELOC_CRX_REL4 +@deffnx {} BFD_RELOC_CRX_REL8 +@deffnx {} BFD_RELOC_CRX_REL8_CMP +@deffnx {} BFD_RELOC_CRX_REL16 +@deffnx {} BFD_RELOC_CRX_REL24 +@deffnx {} BFD_RELOC_CRX_REL32 +@deffnx {} BFD_RELOC_CRX_REGREL12 +@deffnx {} BFD_RELOC_CRX_REGREL22 +@deffnx {} BFD_RELOC_CRX_REGREL28 +@deffnx {} BFD_RELOC_CRX_REGREL32 +@deffnx {} BFD_RELOC_CRX_ABS16 +@deffnx {} BFD_RELOC_CRX_ABS32 +@deffnx {} BFD_RELOC_CRX_NUM8 +@deffnx {} BFD_RELOC_CRX_NUM16 +@deffnx {} BFD_RELOC_CRX_NUM32 +@deffnx {} BFD_RELOC_CRX_IMM16 +@deffnx {} BFD_RELOC_CRX_IMM32 +@deffnx {} BFD_RELOC_CRX_SWITCH8 +@deffnx {} BFD_RELOC_CRX_SWITCH16 +@deffnx {} BFD_RELOC_CRX_SWITCH32 +NS CRX Relocations. +@end deffn +@deffn {} BFD_RELOC_CRIS_BDISP8 +@deffnx {} BFD_RELOC_CRIS_UNSIGNED_5 +@deffnx {} BFD_RELOC_CRIS_SIGNED_6 +@deffnx {} BFD_RELOC_CRIS_UNSIGNED_6 +@deffnx {} BFD_RELOC_CRIS_SIGNED_8 +@deffnx {} BFD_RELOC_CRIS_UNSIGNED_8 +@deffnx {} BFD_RELOC_CRIS_SIGNED_16 +@deffnx {} BFD_RELOC_CRIS_UNSIGNED_16 +@deffnx {} BFD_RELOC_CRIS_LAPCQ_OFFSET +@deffnx {} BFD_RELOC_CRIS_UNSIGNED_4 +These relocs are only used within the CRIS assembler. They are not +(at present) written to any object files. +@end deffn +@deffn {} BFD_RELOC_CRIS_COPY +@deffnx {} BFD_RELOC_CRIS_GLOB_DAT +@deffnx {} BFD_RELOC_CRIS_JUMP_SLOT +@deffnx {} BFD_RELOC_CRIS_RELATIVE +Relocs used in ELF shared libraries for CRIS. +@end deffn +@deffn {} BFD_RELOC_CRIS_32_GOT +32-bit offset to symbol-entry within GOT. +@end deffn +@deffn {} BFD_RELOC_CRIS_16_GOT +16-bit offset to symbol-entry within GOT. +@end deffn +@deffn {} BFD_RELOC_CRIS_32_GOTPLT +32-bit offset to symbol-entry within GOT, with PLT handling. +@end deffn +@deffn {} BFD_RELOC_CRIS_16_GOTPLT +16-bit offset to symbol-entry within GOT, with PLT handling. +@end deffn +@deffn {} BFD_RELOC_CRIS_32_GOTREL +32-bit offset to symbol, relative to GOT. +@end deffn +@deffn {} BFD_RELOC_CRIS_32_PLT_GOTREL +32-bit offset to symbol with PLT entry, relative to GOT. +@end deffn +@deffn {} BFD_RELOC_CRIS_32_PLT_PCREL +32-bit offset to symbol with PLT entry, relative to this relocation. +@end deffn +@deffn {} BFD_RELOC_860_COPY +@deffnx {} BFD_RELOC_860_GLOB_DAT +@deffnx {} BFD_RELOC_860_JUMP_SLOT +@deffnx {} BFD_RELOC_860_RELATIVE +@deffnx {} BFD_RELOC_860_PC26 +@deffnx {} BFD_RELOC_860_PLT26 +@deffnx {} BFD_RELOC_860_PC16 +@deffnx {} BFD_RELOC_860_LOW0 +@deffnx {} BFD_RELOC_860_SPLIT0 +@deffnx {} BFD_RELOC_860_LOW1 +@deffnx {} BFD_RELOC_860_SPLIT1 +@deffnx {} BFD_RELOC_860_LOW2 +@deffnx {} BFD_RELOC_860_SPLIT2 +@deffnx {} BFD_RELOC_860_LOW3 +@deffnx {} BFD_RELOC_860_LOGOT0 +@deffnx {} BFD_RELOC_860_SPGOT0 +@deffnx {} BFD_RELOC_860_LOGOT1 +@deffnx {} BFD_RELOC_860_SPGOT1 +@deffnx {} BFD_RELOC_860_LOGOTOFF0 +@deffnx {} BFD_RELOC_860_SPGOTOFF0 +@deffnx {} BFD_RELOC_860_LOGOTOFF1 +@deffnx {} BFD_RELOC_860_SPGOTOFF1 +@deffnx {} BFD_RELOC_860_LOGOTOFF2 +@deffnx {} BFD_RELOC_860_LOGOTOFF3 +@deffnx {} BFD_RELOC_860_LOPC +@deffnx {} BFD_RELOC_860_HIGHADJ +@deffnx {} BFD_RELOC_860_HAGOT +@deffnx {} BFD_RELOC_860_HAGOTOFF +@deffnx {} BFD_RELOC_860_HAPC +@deffnx {} BFD_RELOC_860_HIGH +@deffnx {} BFD_RELOC_860_HIGOT +@deffnx {} BFD_RELOC_860_HIGOTOFF +Intel i860 Relocations. +@end deffn +@deffn {} BFD_RELOC_OPENRISC_ABS_26 +@deffnx {} BFD_RELOC_OPENRISC_REL_26 +OpenRISC Relocations. +@end deffn +@deffn {} BFD_RELOC_H8_DIR16A8 +@deffnx {} BFD_RELOC_H8_DIR16R8 +@deffnx {} BFD_RELOC_H8_DIR24A8 +@deffnx {} BFD_RELOC_H8_DIR24R8 +@deffnx {} BFD_RELOC_H8_DIR32A16 +H8 elf Relocations. +@end deffn +@deffn {} BFD_RELOC_XSTORMY16_REL_12 +@deffnx {} BFD_RELOC_XSTORMY16_12 +@deffnx {} BFD_RELOC_XSTORMY16_24 +@deffnx {} BFD_RELOC_XSTORMY16_FPTR16 +Sony Xstormy16 Relocations. +@end deffn +@deffn {} BFD_RELOC_RELC +Self-describing complex relocations. +@end deffn +@deffn {} BFD_RELOC_XC16X_PAG +@deffnx {} BFD_RELOC_XC16X_POF +@deffnx {} BFD_RELOC_XC16X_SEG +@deffnx {} BFD_RELOC_XC16X_SOF +Infineon Relocations. +@end deffn +@deffn {} BFD_RELOC_VAX_GLOB_DAT +@deffnx {} BFD_RELOC_VAX_JMP_SLOT +@deffnx {} BFD_RELOC_VAX_RELATIVE +Relocations used by VAX ELF. +@end deffn +@deffn {} BFD_RELOC_MT_PC16 +Morpho MT - 16 bit immediate relocation. +@end deffn +@deffn {} BFD_RELOC_MT_HI16 +Morpho MT - Hi 16 bits of an address. +@end deffn +@deffn {} BFD_RELOC_MT_LO16 +Morpho MT - Low 16 bits of an address. +@end deffn +@deffn {} BFD_RELOC_MT_GNU_VTINHERIT +Morpho MT - Used to tell the linker which vtable entries are used. +@end deffn +@deffn {} BFD_RELOC_MT_GNU_VTENTRY +Morpho MT - Used to tell the linker which vtable entries are used. +@end deffn +@deffn {} BFD_RELOC_MT_PCINSN8 +Morpho MT - 8 bit immediate relocation. +@end deffn +@deffn {} BFD_RELOC_MSP430_10_PCREL +@deffnx {} BFD_RELOC_MSP430_16_PCREL +@deffnx {} BFD_RELOC_MSP430_16 +@deffnx {} BFD_RELOC_MSP430_16_PCREL_BYTE +@deffnx {} BFD_RELOC_MSP430_16_BYTE +@deffnx {} BFD_RELOC_MSP430_2X_PCREL +@deffnx {} BFD_RELOC_MSP430_RL_PCREL +msp430 specific relocation codes +@end deffn +@deffn {} BFD_RELOC_IQ2000_OFFSET_16 +@deffnx {} BFD_RELOC_IQ2000_OFFSET_21 +@deffnx {} BFD_RELOC_IQ2000_UHI16 +IQ2000 Relocations. +@end deffn +@deffn {} BFD_RELOC_XTENSA_RTLD +Special Xtensa relocation used only by PLT entries in ELF shared +objects to indicate that the runtime linker should set the value +to one of its own internal functions or data structures. +@end deffn +@deffn {} BFD_RELOC_XTENSA_GLOB_DAT +@deffnx {} BFD_RELOC_XTENSA_JMP_SLOT +@deffnx {} BFD_RELOC_XTENSA_RELATIVE +Xtensa relocations for ELF shared objects. +@end deffn +@deffn {} BFD_RELOC_XTENSA_PLT +Xtensa relocation used in ELF object files for symbols that may require +PLT entries. Otherwise, this is just a generic 32-bit relocation. +@end deffn +@deffn {} BFD_RELOC_XTENSA_DIFF8 +@deffnx {} BFD_RELOC_XTENSA_DIFF16 +@deffnx {} BFD_RELOC_XTENSA_DIFF32 +Xtensa relocations to mark the difference of two local symbols. +These are only needed to support linker relaxation and can be ignored +when not relaxing. The field is set to the value of the difference +assuming no relaxation. The relocation encodes the position of the +first symbol so the linker can determine whether to adjust the field +value. +@end deffn +@deffn {} BFD_RELOC_XTENSA_SLOT0_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT1_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT2_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT3_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT4_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT5_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT6_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT7_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT8_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT9_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT10_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT11_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT12_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT13_OP +@deffnx {} BFD_RELOC_XTENSA_SLOT14_OP +Generic Xtensa relocations for instruction operands. Only the slot +number is encoded in the relocation. The relocation applies to the +last PC-relative immediate operand, or if there are no PC-relative +immediates, to the last immediate operand. +@end deffn +@deffn {} BFD_RELOC_XTENSA_SLOT0_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT1_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT2_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT3_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT4_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT5_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT6_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT7_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT8_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT9_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT10_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT11_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT12_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT13_ALT +@deffnx {} BFD_RELOC_XTENSA_SLOT14_ALT +Alternate Xtensa relocations. Only the slot is encoded in the +relocation. The meaning of these relocations is opcode-specific. +@end deffn +@deffn {} BFD_RELOC_XTENSA_OP0 +@deffnx {} BFD_RELOC_XTENSA_OP1 +@deffnx {} BFD_RELOC_XTENSA_OP2 +Xtensa relocations for backward compatibility. These have all been +replaced by BFD_RELOC_XTENSA_SLOT0_OP. +@end deffn +@deffn {} BFD_RELOC_XTENSA_ASM_EXPAND +Xtensa relocation to mark that the assembler expanded the +instructions from an original target. The expansion size is +encoded in the reloc size. +@end deffn +@deffn {} BFD_RELOC_XTENSA_ASM_SIMPLIFY +Xtensa relocation to mark that the linker should simplify +assembler-expanded instructions. This is commonly used +internally by the linker after analysis of a +BFD_RELOC_XTENSA_ASM_EXPAND. +@end deffn +@deffn {} BFD_RELOC_Z80_DISP8 +8 bit signed offset in (ix+d) or (iy+d). +@end deffn +@deffn {} BFD_RELOC_Z8K_DISP7 +DJNZ offset. +@end deffn +@deffn {} BFD_RELOC_Z8K_CALLR +CALR offset. +@end deffn +@deffn {} BFD_RELOC_Z8K_IMM4L +4 bit value. +@end deffn + +@example + +typedef enum bfd_reloc_code_real bfd_reloc_code_real_type; +@end example +@findex bfd_reloc_type_lookup +@subsubsection @code{bfd_reloc_type_lookup} +@strong{Synopsis} +@example +reloc_howto_type *bfd_reloc_type_lookup + (bfd *abfd, bfd_reloc_code_real_type code); +reloc_howto_type *bfd_reloc_name_lookup + (bfd *abfd, const char *reloc_name); +@end example +@strong{Description}@* +Return a pointer to a howto structure which, when +invoked, will perform the relocation @var{code} on data from the +architecture noted. + +@findex bfd_default_reloc_type_lookup +@subsubsection @code{bfd_default_reloc_type_lookup} +@strong{Synopsis} +@example +reloc_howto_type *bfd_default_reloc_type_lookup + (bfd *abfd, bfd_reloc_code_real_type code); +@end example +@strong{Description}@* +Provides a default relocation lookup routine for any architecture. + +@findex bfd_get_reloc_code_name +@subsubsection @code{bfd_get_reloc_code_name} +@strong{Synopsis} +@example +const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code); +@end example +@strong{Description}@* +Provides a printable name for the supplied relocation code. +Useful mainly for printing error messages. + +@findex bfd_generic_relax_section +@subsubsection @code{bfd_generic_relax_section} +@strong{Synopsis} +@example +bfd_boolean bfd_generic_relax_section + (bfd *abfd, + asection *section, + struct bfd_link_info *, + bfd_boolean *); +@end example +@strong{Description}@* +Provides default handling for relaxing for back ends which +don't do relaxing. + +@findex bfd_generic_gc_sections +@subsubsection @code{bfd_generic_gc_sections} +@strong{Synopsis} +@example +bfd_boolean bfd_generic_gc_sections + (bfd *, struct bfd_link_info *); +@end example +@strong{Description}@* +Provides default handling for relaxing for back ends which +don't do section gc -- i.e., does nothing. + +@findex bfd_generic_merge_sections +@subsubsection @code{bfd_generic_merge_sections} +@strong{Synopsis} +@example +bfd_boolean bfd_generic_merge_sections + (bfd *, struct bfd_link_info *); +@end example +@strong{Description}@* +Provides default handling for SEC_MERGE section merging for back ends +which don't have SEC_MERGE support -- i.e., does nothing. + +@findex bfd_generic_get_relocated_section_contents +@subsubsection @code{bfd_generic_get_relocated_section_contents} +@strong{Synopsis} +@example +bfd_byte *bfd_generic_get_relocated_section_contents + (bfd *abfd, + struct bfd_link_info *link_info, + struct bfd_link_order *link_order, + bfd_byte *data, + bfd_boolean relocatable, + asymbol **symbols); +@end example +@strong{Description}@* +Provides default handling of relocation effort for back ends +which can't be bothered to do it efficiently. + diff --git a/bfd/doc/section.texi b/bfd/doc/section.texi new file mode 100644 index 000000000..e1a0e7c7b --- /dev/null +++ b/bfd/doc/section.texi @@ -0,0 +1,983 @@ +@section Sections +The raw data contained within a BFD is maintained through the +section abstraction. A single BFD may have any number of +sections. It keeps hold of them by pointing to the first; +each one points to the next in the list. + +Sections are supported in BFD in @code{section.c}. + +@menu +* Section Input:: +* Section Output:: +* typedef asection:: +* section prototypes:: +@end menu + +@node Section Input, Section Output, Sections, Sections +@subsection Section input +When a BFD is opened for reading, the section structures are +created and attached to the BFD. + +Each section has a name which describes the section in the +outside world---for example, @code{a.out} would contain at least +three sections, called @code{.text}, @code{.data} and @code{.bss}. + +Names need not be unique; for example a COFF file may have several +sections named @code{.data}. + +Sometimes a BFD will contain more than the ``natural'' number of +sections. A back end may attach other sections containing +constructor data, or an application may add a section (using +@code{bfd_make_section}) to the sections attached to an already open +BFD. For example, the linker creates an extra section +@code{COMMON} for each input file's BFD to hold information about +common storage. + +The raw data is not necessarily read in when +the section descriptor is created. Some targets may leave the +data in place until a @code{bfd_get_section_contents} call is +made. Other back ends may read in all the data at once. For +example, an S-record file has to be read once to determine the +size of the data. An IEEE-695 file doesn't contain raw data in +sections, but data and relocation expressions intermixed, so +the data area has to be parsed to get out the data and +relocations. + +@node Section Output, typedef asection, Section Input, Sections +@subsection Section output +To write a new object style BFD, the various sections to be +written have to be created. They are attached to the BFD in +the same way as input sections; data is written to the +sections using @code{bfd_set_section_contents}. + +Any program that creates or combines sections (e.g., the assembler +and linker) must use the @code{asection} fields @code{output_section} and +@code{output_offset} to indicate the file sections to which each +section must be written. (If the section is being created from +scratch, @code{output_section} should probably point to the section +itself and @code{output_offset} should probably be zero.) + +The data to be written comes from input sections attached +(via @code{output_section} pointers) to +the output sections. The output section structure can be +considered a filter for the input section: the output section +determines the vma of the output data and the name, but the +input section determines the offset into the output section of +the data to be written. + +E.g., to create a section "O", starting at 0x100, 0x123 long, +containing two subsections, "A" at offset 0x0 (i.e., at vma +0x100) and "B" at offset 0x20 (i.e., at vma 0x120) the @code{asection} +structures would look like: + +@example + section name "A" + output_offset 0x00 + size 0x20 + output_section -----------> section name "O" + | vma 0x100 + section name "B" | size 0x123 + output_offset 0x20 | + size 0x103 | + output_section --------| +@end example + +@subsection Link orders +The data within a section is stored in a @dfn{link_order}. +These are much like the fixups in @code{gas}. The link_order +abstraction allows a section to grow and shrink within itself. + +A link_order knows how big it is, and which is the next +link_order and where the raw data for it is; it also points to +a list of relocations which apply to it. + +The link_order is used by the linker to perform relaxing on +final code. The compiler creates code which is as big as +necessary to make it work without relaxing, and the user can +select whether to relax. Sometimes relaxing takes a lot of +time. The linker runs around the relocations to see if any +are attached to data which can be shrunk, if so it does it on +a link_order by link_order basis. + + +@node typedef asection, section prototypes, Section Output, Sections +@subsection typedef asection +Here is the section structure: + + +@example + +typedef struct bfd_section +@{ + /* The name of the section; the name isn't a copy, the pointer is + the same as that passed to bfd_make_section. */ + const char *name; + + /* A unique sequence number. */ + int id; + + /* Which section in the bfd; 0..n-1 as sections are created in a bfd. */ + int index; + + /* The next section in the list belonging to the BFD, or NULL. */ + struct bfd_section *next; + + /* The previous section in the list belonging to the BFD, or NULL. */ + struct bfd_section *prev; + + /* The field flags contains attributes of the section. Some + flags are read in from the object file, and some are + synthesized from other information. */ + flagword flags; + +#define SEC_NO_FLAGS 0x000 + + /* Tells the OS to allocate space for this section when loading. + This is clear for a section containing debug information only. */ +#define SEC_ALLOC 0x001 + + /* Tells the OS to load the section from the file when loading. + This is clear for a .bss section. */ +#define SEC_LOAD 0x002 + + /* The section contains data still to be relocated, so there is + some relocation information too. */ +#define SEC_RELOC 0x004 + + /* A signal to the OS that the section contains read only data. */ +#define SEC_READONLY 0x008 + + /* The section contains code only. */ +#define SEC_CODE 0x010 + + /* The section contains data only. */ +#define SEC_DATA 0x020 + + /* The section will reside in ROM. */ +#define SEC_ROM 0x040 + + /* The section contains constructor information. This section + type is used by the linker to create lists of constructors and + destructors used by @code{g++}. When a back end sees a symbol + which should be used in a constructor list, it creates a new + section for the type of name (e.g., @code{__CTOR_LIST__}), attaches + the symbol to it, and builds a relocation. To build the lists + of constructors, all the linker has to do is catenate all the + sections called @code{__CTOR_LIST__} and relocate the data + contained within - exactly the operations it would peform on + standard data. */ +#define SEC_CONSTRUCTOR 0x080 + + /* The section has contents - a data section could be + @code{SEC_ALLOC} | @code{SEC_HAS_CONTENTS}; a debug section could be + @code{SEC_HAS_CONTENTS} */ +#define SEC_HAS_CONTENTS 0x100 + + /* An instruction to the linker to not output the section + even if it has information which would normally be written. */ +#define SEC_NEVER_LOAD 0x200 + + /* The section contains thread local data. */ +#define SEC_THREAD_LOCAL 0x400 + + /* The section has GOT references. This flag is only for the + linker, and is currently only used by the elf32-hppa back end. + It will be set if global offset table references were detected + in this section, which indicate to the linker that the section + contains PIC code, and must be handled specially when doing a + static link. */ +#define SEC_HAS_GOT_REF 0x800 + + /* The section contains common symbols (symbols may be defined + multiple times, the value of a symbol is the amount of + space it requires, and the largest symbol value is the one + used). Most targets have exactly one of these (which we + translate to bfd_com_section_ptr), but ECOFF has two. */ +#define SEC_IS_COMMON 0x1000 + + /* The section contains only debugging information. For + example, this is set for ELF .debug and .stab sections. + strip tests this flag to see if a section can be + discarded. */ +#define SEC_DEBUGGING 0x2000 + + /* The contents of this section are held in memory pointed to + by the contents field. This is checked by bfd_get_section_contents, + and the data is retrieved from memory if appropriate. */ +#define SEC_IN_MEMORY 0x4000 + + /* The contents of this section are to be excluded by the + linker for executable and shared objects unless those + objects are to be further relocated. */ +#define SEC_EXCLUDE 0x8000 + + /* The contents of this section are to be sorted based on the sum of + the symbol and addend values specified by the associated relocation + entries. Entries without associated relocation entries will be + appended to the end of the section in an unspecified order. */ +#define SEC_SORT_ENTRIES 0x10000 + + /* When linking, duplicate sections of the same name should be + discarded, rather than being combined into a single section as + is usually done. This is similar to how common symbols are + handled. See SEC_LINK_DUPLICATES below. */ +#define SEC_LINK_ONCE 0x20000 + + /* If SEC_LINK_ONCE is set, this bitfield describes how the linker + should handle duplicate sections. */ +#define SEC_LINK_DUPLICATES 0x40000 + + /* This value for SEC_LINK_DUPLICATES means that duplicate + sections with the same name should simply be discarded. */ +#define SEC_LINK_DUPLICATES_DISCARD 0x0 + + /* This value for SEC_LINK_DUPLICATES means that the linker + should warn if there are any duplicate sections, although + it should still only link one copy. */ +#define SEC_LINK_DUPLICATES_ONE_ONLY 0x80000 + + /* This value for SEC_LINK_DUPLICATES means that the linker + should warn if any duplicate sections are a different size. */ +#define SEC_LINK_DUPLICATES_SAME_SIZE 0x100000 + + /* This value for SEC_LINK_DUPLICATES means that the linker + should warn if any duplicate sections contain different + contents. */ +#define SEC_LINK_DUPLICATES_SAME_CONTENTS \ + (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE) + + /* This section was created by the linker as part of dynamic + relocation or other arcane processing. It is skipped when + going through the first-pass output, trusting that someone + else up the line will take care of it later. */ +#define SEC_LINKER_CREATED 0x200000 + + /* This section should not be subject to garbage collection. + Also set to inform the linker that this section should not be + listed in the link map as discarded. */ +#define SEC_KEEP 0x400000 + + /* This section contains "short" data, and should be placed + "near" the GP. */ +#define SEC_SMALL_DATA 0x800000 + + /* Attempt to merge identical entities in the section. + Entity size is given in the entsize field. */ +#define SEC_MERGE 0x1000000 + + /* If given with SEC_MERGE, entities to merge are zero terminated + strings where entsize specifies character size instead of fixed + size entries. */ +#define SEC_STRINGS 0x2000000 + + /* This section contains data about section groups. */ +#define SEC_GROUP 0x4000000 + + /* The section is a COFF shared library section. This flag is + only for the linker. If this type of section appears in + the input file, the linker must copy it to the output file + without changing the vma or size. FIXME: Although this + was originally intended to be general, it really is COFF + specific (and the flag was renamed to indicate this). It + might be cleaner to have some more general mechanism to + allow the back end to control what the linker does with + sections. */ +#define SEC_COFF_SHARED_LIBRARY 0x10000000 + + /* This section contains data which may be shared with other + executables or shared objects. This is for COFF only. */ +#define SEC_COFF_SHARED 0x20000000 + + /* When a section with this flag is being linked, then if the size of + the input section is less than a page, it should not cross a page + boundary. If the size of the input section is one page or more, + it should be aligned on a page boundary. This is for TI + TMS320C54X only. */ +#define SEC_TIC54X_BLOCK 0x40000000 + + /* Conditionally link this section; do not link if there are no + references found to any symbol in the section. This is for TI + TMS320C54X only. */ +#define SEC_TIC54X_CLINK 0x80000000 + + /* End of section flags. */ + + /* Some internal packed boolean fields. */ + + /* See the vma field. */ + unsigned int user_set_vma : 1; + + /* A mark flag used by some of the linker backends. */ + unsigned int linker_mark : 1; + + /* Another mark flag used by some of the linker backends. Set for + output sections that have an input section. */ + unsigned int linker_has_input : 1; + + /* Mark flags used by some linker backends for garbage collection. */ + unsigned int gc_mark : 1; + unsigned int gc_mark_from_eh : 1; + + /* The following flags are used by the ELF linker. */ + + /* Mark sections which have been allocated to segments. */ + unsigned int segment_mark : 1; + + /* Type of sec_info information. */ + unsigned int sec_info_type:3; +#define ELF_INFO_TYPE_NONE 0 +#define ELF_INFO_TYPE_STABS 1 +#define ELF_INFO_TYPE_MERGE 2 +#define ELF_INFO_TYPE_EH_FRAME 3 +#define ELF_INFO_TYPE_JUST_SYMS 4 + + /* Nonzero if this section uses RELA relocations, rather than REL. */ + unsigned int use_rela_p:1; + + /* Bits used by various backends. The generic code doesn't touch + these fields. */ + + /* Nonzero if this section has TLS related relocations. */ + unsigned int has_tls_reloc:1; + + /* Nonzero if this section has a gp reloc. */ + unsigned int has_gp_reloc:1; + + /* Nonzero if this section needs the relax finalize pass. */ + unsigned int need_finalize_relax:1; + + /* Whether relocations have been processed. */ + unsigned int reloc_done : 1; + + /* End of internal packed boolean fields. */ + + /* The virtual memory address of the section - where it will be + at run time. The symbols are relocated against this. The + user_set_vma flag is maintained by bfd; if it's not set, the + backend can assign addresses (for example, in @code{a.out}, where + the default address for @code{.data} is dependent on the specific + target and various flags). */ + bfd_vma vma; + + /* The load address of the section - where it would be in a + rom image; really only used for writing section header + information. */ + bfd_vma lma; + + /* The size of the section in octets, as it will be output. + Contains a value even if the section has no contents (e.g., the + size of @code{.bss}). */ + bfd_size_type size; + + /* For input sections, the original size on disk of the section, in + octets. This field is used by the linker relaxation code. It is + currently only set for sections where the linker relaxation scheme + doesn't cache altered section and reloc contents (stabs, eh_frame, + SEC_MERGE, some coff relaxing targets), and thus the original size + needs to be kept to read the section multiple times. + For output sections, rawsize holds the section size calculated on + a previous linker relaxation pass. */ + bfd_size_type rawsize; + + /* If this section is going to be output, then this value is the + offset in *bytes* into the output section of the first byte in the + input section (byte ==> smallest addressable unit on the + target). In most cases, if this was going to start at the + 100th octet (8-bit quantity) in the output section, this value + would be 100. However, if the target byte size is 16 bits + (bfd_octets_per_byte is "2"), this value would be 50. */ + bfd_vma output_offset; + + /* The output section through which to map on output. */ + struct bfd_section *output_section; + + /* The alignment requirement of the section, as an exponent of 2 - + e.g., 3 aligns to 2^3 (or 8). */ + unsigned int alignment_power; + + /* If an input section, a pointer to a vector of relocation + records for the data in this section. */ + struct reloc_cache_entry *relocation; + + /* If an output section, a pointer to a vector of pointers to + relocation records for the data in this section. */ + struct reloc_cache_entry **orelocation; + + /* The number of relocation records in one of the above. */ + unsigned reloc_count; + + /* Information below is back end specific - and not always used + or updated. */ + + /* File position of section data. */ + file_ptr filepos; + + /* File position of relocation info. */ + file_ptr rel_filepos; + + /* File position of line data. */ + file_ptr line_filepos; + + /* Pointer to data for applications. */ + void *userdata; + + /* If the SEC_IN_MEMORY flag is set, this points to the actual + contents. */ + unsigned char *contents; + + /* Attached line number information. */ + alent *lineno; + + /* Number of line number records. */ + unsigned int lineno_count; + + /* Entity size for merging purposes. */ + unsigned int entsize; + + /* Points to the kept section if this section is a link-once section, + and is discarded. */ + struct bfd_section *kept_section; + + /* When a section is being output, this value changes as more + linenumbers are written out. */ + file_ptr moving_line_filepos; + + /* What the section number is in the target world. */ + int target_index; + + void *used_by_bfd; + + /* If this is a constructor section then here is a list of the + relocations created to relocate items within it. */ + struct relent_chain *constructor_chain; + + /* The BFD which owns the section. */ + bfd *owner; + + /* A symbol which points at this section only. */ + struct bfd_symbol *symbol; + struct bfd_symbol **symbol_ptr_ptr; + + /* Early in the link process, map_head and map_tail are used to build + a list of input sections attached to an output section. Later, + output sections use these fields for a list of bfd_link_order + structs. */ + union @{ + struct bfd_link_order *link_order; + struct bfd_section *s; + @} map_head, map_tail; +@} asection; + +/* These sections are global, and are managed by BFD. The application + and target back end are not permitted to change the values in + these sections. New code should use the section_ptr macros rather + than referring directly to the const sections. The const sections + may eventually vanish. */ +#define BFD_ABS_SECTION_NAME "*ABS*" +#define BFD_UND_SECTION_NAME "*UND*" +#define BFD_COM_SECTION_NAME "*COM*" +#define BFD_IND_SECTION_NAME "*IND*" + +/* The absolute section. */ +extern asection bfd_abs_section; +#define bfd_abs_section_ptr ((asection *) &bfd_abs_section) +#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr) +/* Pointer to the undefined section. */ +extern asection bfd_und_section; +#define bfd_und_section_ptr ((asection *) &bfd_und_section) +#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr) +/* Pointer to the common section. */ +extern asection bfd_com_section; +#define bfd_com_section_ptr ((asection *) &bfd_com_section) +/* Pointer to the indirect section. */ +extern asection bfd_ind_section; +#define bfd_ind_section_ptr ((asection *) &bfd_ind_section) +#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr) + +#define bfd_is_const_section(SEC) \ + ( ((SEC) == bfd_abs_section_ptr) \ + || ((SEC) == bfd_und_section_ptr) \ + || ((SEC) == bfd_com_section_ptr) \ + || ((SEC) == bfd_ind_section_ptr)) + +/* Macros to handle insertion and deletion of a bfd's sections. These + only handle the list pointers, ie. do not adjust section_count, + target_index etc. */ +#define bfd_section_list_remove(ABFD, S) \ + do \ + @{ \ + asection *_s = S; \ + asection *_next = _s->next; \ + asection *_prev = _s->prev; \ + if (_prev) \ + _prev->next = _next; \ + else \ + (ABFD)->sections = _next; \ + if (_next) \ + _next->prev = _prev; \ + else \ + (ABFD)->section_last = _prev; \ + @} \ + while (0) +#define bfd_section_list_append(ABFD, S) \ + do \ + @{ \ + asection *_s = S; \ + bfd *_abfd = ABFD; \ + _s->next = NULL; \ + if (_abfd->section_last) \ + @{ \ + _s->prev = _abfd->section_last; \ + _abfd->section_last->next = _s; \ + @} \ + else \ + @{ \ + _s->prev = NULL; \ + _abfd->sections = _s; \ + @} \ + _abfd->section_last = _s; \ + @} \ + while (0) +#define bfd_section_list_prepend(ABFD, S) \ + do \ + @{ \ + asection *_s = S; \ + bfd *_abfd = ABFD; \ + _s->prev = NULL; \ + if (_abfd->sections) \ + @{ \ + _s->next = _abfd->sections; \ + _abfd->sections->prev = _s; \ + @} \ + else \ + @{ \ + _s->next = NULL; \ + _abfd->section_last = _s; \ + @} \ + _abfd->sections = _s; \ + @} \ + while (0) +#define bfd_section_list_insert_after(ABFD, A, S) \ + do \ + @{ \ + asection *_a = A; \ + asection *_s = S; \ + asection *_next = _a->next; \ + _s->next = _next; \ + _s->prev = _a; \ + _a->next = _s; \ + if (_next) \ + _next->prev = _s; \ + else \ + (ABFD)->section_last = _s; \ + @} \ + while (0) +#define bfd_section_list_insert_before(ABFD, B, S) \ + do \ + @{ \ + asection *_b = B; \ + asection *_s = S; \ + asection *_prev = _b->prev; \ + _s->prev = _prev; \ + _s->next = _b; \ + _b->prev = _s; \ + if (_prev) \ + _prev->next = _s; \ + else \ + (ABFD)->sections = _s; \ + @} \ + while (0) +#define bfd_section_removed_from_list(ABFD, S) \ + ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S)) + +#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, NAME, IDX) \ + /* name, id, index, next, prev, flags, user_set_vma, */ \ + @{ NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ + \ + /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ \ + 0, 0, 1, 0, \ + \ + /* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, */ \ + 0, 0, 0, 0, \ + \ + /* has_gp_reloc, need_finalize_relax, reloc_done, */ \ + 0, 0, 0, \ + \ + /* vma, lma, size, rawsize */ \ + 0, 0, 0, 0, \ + \ + /* output_offset, output_section, alignment_power, */ \ + 0, (struct bfd_section *) &SEC, 0, \ + \ + /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \ + NULL, NULL, 0, 0, 0, \ + \ + /* line_filepos, userdata, contents, lineno, lineno_count, */ \ + 0, NULL, NULL, NULL, 0, \ + \ + /* entsize, kept_section, moving_line_filepos, */ \ + 0, NULL, 0, \ + \ + /* target_index, used_by_bfd, constructor_chain, owner, */ \ + 0, NULL, NULL, NULL, \ + \ + /* symbol, symbol_ptr_ptr, */ \ + (struct bfd_symbol *) SYM, &SEC.symbol, \ + \ + /* map_head, map_tail */ \ + @{ NULL @}, @{ NULL @} \ + @} + +@end example + +@node section prototypes, , typedef asection, Sections +@subsection Section prototypes +These are the functions exported by the section handling part of BFD. + +@findex bfd_section_list_clear +@subsubsection @code{bfd_section_list_clear} +@strong{Synopsis} +@example +void bfd_section_list_clear (bfd *); +@end example +@strong{Description}@* +Clears the section list, and also resets the section count and +hash table entries. + +@findex bfd_get_section_by_name +@subsubsection @code{bfd_get_section_by_name} +@strong{Synopsis} +@example +asection *bfd_get_section_by_name (bfd *abfd, const char *name); +@end example +@strong{Description}@* +Run through @var{abfd} and return the one of the +@code{asection}s whose name matches @var{name}, otherwise @code{NULL}. +@xref{Sections}, for more information. + +This should only be used in special cases; the normal way to process +all sections of a given name is to use @code{bfd_map_over_sections} and +@code{strcmp} on the name (or better yet, base it on the section flags +or something else) for each section. + +@findex bfd_get_section_by_name_if +@subsubsection @code{bfd_get_section_by_name_if} +@strong{Synopsis} +@example +asection *bfd_get_section_by_name_if + (bfd *abfd, + const char *name, + bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj), + void *obj); +@end example +@strong{Description}@* +Call the provided function @var{func} for each section +attached to the BFD @var{abfd} whose name matches @var{name}, +passing @var{obj} as an argument. The function will be called +as if by + +@example + func (abfd, the_section, obj); +@end example + +It returns the first section for which @var{func} returns true, +otherwise @code{NULL}. + +@findex bfd_get_unique_section_name +@subsubsection @code{bfd_get_unique_section_name} +@strong{Synopsis} +@example +char *bfd_get_unique_section_name + (bfd *abfd, const char *templat, int *count); +@end example +@strong{Description}@* +Invent a section name that is unique in @var{abfd} by tacking +a dot and a digit suffix onto the original @var{templat}. If +@var{count} is non-NULL, then it specifies the first number +tried as a suffix to generate a unique name. The value +pointed to by @var{count} will be incremented in this case. + +@findex bfd_make_section_old_way +@subsubsection @code{bfd_make_section_old_way} +@strong{Synopsis} +@example +asection *bfd_make_section_old_way (bfd *abfd, const char *name); +@end example +@strong{Description}@* +Create a new empty section called @var{name} +and attach it to the end of the chain of sections for the +BFD @var{abfd}. An attempt to create a section with a name which +is already in use returns its pointer without changing the +section chain. + +It has the funny name since this is the way it used to be +before it was rewritten.... + +Possible errors are: +@itemize @bullet + +@item +@code{bfd_error_invalid_operation} - +If output has already started for this BFD. +@item +@code{bfd_error_no_memory} - +If memory allocation fails. +@end itemize + +@findex bfd_make_section_anyway_with_flags +@subsubsection @code{bfd_make_section_anyway_with_flags} +@strong{Synopsis} +@example +asection *bfd_make_section_anyway_with_flags + (bfd *abfd, const char *name, flagword flags); +@end example +@strong{Description}@* +Create a new empty section called @var{name} and attach it to the end of +the chain of sections for @var{abfd}. Create a new section even if there +is already a section with that name. Also set the attributes of the +new section to the value @var{flags}. + +Return @code{NULL} and set @code{bfd_error} on error; possible errors are: +@itemize @bullet + +@item +@code{bfd_error_invalid_operation} - If output has already started for @var{abfd}. +@item +@code{bfd_error_no_memory} - If memory allocation fails. +@end itemize + +@findex bfd_make_section_anyway +@subsubsection @code{bfd_make_section_anyway} +@strong{Synopsis} +@example +asection *bfd_make_section_anyway (bfd *abfd, const char *name); +@end example +@strong{Description}@* +Create a new empty section called @var{name} and attach it to the end of +the chain of sections for @var{abfd}. Create a new section even if there +is already a section with that name. + +Return @code{NULL} and set @code{bfd_error} on error; possible errors are: +@itemize @bullet + +@item +@code{bfd_error_invalid_operation} - If output has already started for @var{abfd}. +@item +@code{bfd_error_no_memory} - If memory allocation fails. +@end itemize + +@findex bfd_make_section_with_flags +@subsubsection @code{bfd_make_section_with_flags} +@strong{Synopsis} +@example +asection *bfd_make_section_with_flags + (bfd *, const char *name, flagword flags); +@end example +@strong{Description}@* +Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling +bfd_set_error ()) without changing the section chain if there is already a +section named @var{name}. Also set the attributes of the new section to +the value @var{flags}. If there is an error, return @code{NULL} and set +@code{bfd_error}. + +@findex bfd_make_section +@subsubsection @code{bfd_make_section} +@strong{Synopsis} +@example +asection *bfd_make_section (bfd *, const char *name); +@end example +@strong{Description}@* +Like @code{bfd_make_section_anyway}, but return @code{NULL} (without calling +bfd_set_error ()) without changing the section chain if there is already a +section named @var{name}. If there is an error, return @code{NULL} and set +@code{bfd_error}. + +@findex bfd_set_section_flags +@subsubsection @code{bfd_set_section_flags} +@strong{Synopsis} +@example +bfd_boolean bfd_set_section_flags + (bfd *abfd, asection *sec, flagword flags); +@end example +@strong{Description}@* +Set the attributes of the section @var{sec} in the BFD +@var{abfd} to the value @var{flags}. Return @code{TRUE} on success, +@code{FALSE} on error. Possible error returns are: + +@itemize @bullet + +@item +@code{bfd_error_invalid_operation} - +The section cannot have one or more of the attributes +requested. For example, a .bss section in @code{a.out} may not +have the @code{SEC_HAS_CONTENTS} field set. +@end itemize + +@findex bfd_map_over_sections +@subsubsection @code{bfd_map_over_sections} +@strong{Synopsis} +@example +void bfd_map_over_sections + (bfd *abfd, + void (*func) (bfd *abfd, asection *sect, void *obj), + void *obj); +@end example +@strong{Description}@* +Call the provided function @var{func} for each section +attached to the BFD @var{abfd}, passing @var{obj} as an +argument. The function will be called as if by + +@example + func (abfd, the_section, obj); +@end example + +This is the preferred method for iterating over sections; an +alternative would be to use a loop: + +@example + section *p; + for (p = abfd->sections; p != NULL; p = p->next) + func (abfd, p, ...) +@end example + +@findex bfd_sections_find_if +@subsubsection @code{bfd_sections_find_if} +@strong{Synopsis} +@example +asection *bfd_sections_find_if + (bfd *abfd, + bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj), + void *obj); +@end example +@strong{Description}@* +Call the provided function @var{operation} for each section +attached to the BFD @var{abfd}, passing @var{obj} as an +argument. The function will be called as if by + +@example + operation (abfd, the_section, obj); +@end example + +It returns the first section for which @var{operation} returns true. + +@findex bfd_set_section_size +@subsubsection @code{bfd_set_section_size} +@strong{Synopsis} +@example +bfd_boolean bfd_set_section_size + (bfd *abfd, asection *sec, bfd_size_type val); +@end example +@strong{Description}@* +Set @var{sec} to the size @var{val}. If the operation is +ok, then @code{TRUE} is returned, else @code{FALSE}. + +Possible error returns: +@itemize @bullet + +@item +@code{bfd_error_invalid_operation} - +Writing has started to the BFD, so setting the size is invalid. +@end itemize + +@findex bfd_set_section_contents +@subsubsection @code{bfd_set_section_contents} +@strong{Synopsis} +@example +bfd_boolean bfd_set_section_contents + (bfd *abfd, asection *section, const void *data, + file_ptr offset, bfd_size_type count); +@end example +@strong{Description}@* +Sets the contents of the section @var{section} in BFD +@var{abfd} to the data starting in memory at @var{data}. The +data is written to the output section starting at offset +@var{offset} for @var{count} octets. + +Normally @code{TRUE} is returned, else @code{FALSE}. Possible error +returns are: +@itemize @bullet + +@item +@code{bfd_error_no_contents} - +The output section does not have the @code{SEC_HAS_CONTENTS} +attribute, so nothing can be written to it. +@item +and some more too +@end itemize +This routine is front end to the back end function +@code{_bfd_set_section_contents}. + +@findex bfd_get_section_contents +@subsubsection @code{bfd_get_section_contents} +@strong{Synopsis} +@example +bfd_boolean bfd_get_section_contents + (bfd *abfd, asection *section, void *location, file_ptr offset, + bfd_size_type count); +@end example +@strong{Description}@* +Read data from @var{section} in BFD @var{abfd} +into memory starting at @var{location}. The data is read at an +offset of @var{offset} from the start of the input section, +and is read for @var{count} bytes. + +If the contents of a constructor with the @code{SEC_CONSTRUCTOR} +flag set are requested or if the section does not have the +@code{SEC_HAS_CONTENTS} flag set, then the @var{location} is filled +with zeroes. If no errors occur, @code{TRUE} is returned, else +@code{FALSE}. + +@findex bfd_malloc_and_get_section +@subsubsection @code{bfd_malloc_and_get_section} +@strong{Synopsis} +@example +bfd_boolean bfd_malloc_and_get_section + (bfd *abfd, asection *section, bfd_byte **buf); +@end example +@strong{Description}@* +Read all data from @var{section} in BFD @var{abfd} +into a buffer, *@var{buf}, malloc'd by this function. + +@findex bfd_copy_private_section_data +@subsubsection @code{bfd_copy_private_section_data} +@strong{Synopsis} +@example +bfd_boolean bfd_copy_private_section_data + (bfd *ibfd, asection *isec, bfd *obfd, asection *osec); +@end example +@strong{Description}@* +Copy private section information from @var{isec} in the BFD +@var{ibfd} to the section @var{osec} in the BFD @var{obfd}. +Return @code{TRUE} on success, @code{FALSE} on error. Possible error +returns are: + +@itemize @bullet + +@item +@code{bfd_error_no_memory} - +Not enough memory exists to create private data for @var{osec}. +@end itemize +@example +#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \ + BFD_SEND (obfd, _bfd_copy_private_section_data, \ + (ibfd, isection, obfd, osection)) +@end example + +@findex bfd_generic_is_group_section +@subsubsection @code{bfd_generic_is_group_section} +@strong{Synopsis} +@example +bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec); +@end example +@strong{Description}@* +Returns TRUE if @var{sec} is a member of a group. + +@findex bfd_generic_discard_group +@subsubsection @code{bfd_generic_discard_group} +@strong{Synopsis} +@example +bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group); +@end example +@strong{Description}@* +Remove all members of @var{group} from the output. + diff --git a/bfd/doc/syms.texi b/bfd/doc/syms.texi new file mode 100644 index 000000000..ad2286125 --- /dev/null +++ b/bfd/doc/syms.texi @@ -0,0 +1,469 @@ +@section Symbols +BFD tries to maintain as much symbol information as it can when +it moves information from file to file. BFD passes information +to applications though the @code{asymbol} structure. When the +application requests the symbol table, BFD reads the table in +the native form and translates parts of it into the internal +format. To maintain more than the information passed to +applications, some targets keep some information ``behind the +scenes'' in a structure only the particular back end knows +about. For example, the coff back end keeps the original +symbol table structure as well as the canonical structure when +a BFD is read in. On output, the coff back end can reconstruct +the output symbol table so that no information is lost, even +information unique to coff which BFD doesn't know or +understand. If a coff symbol table were read, but were written +through an a.out back end, all the coff specific information +would be lost. The symbol table of a BFD +is not necessarily read in until a canonicalize request is +made. Then the BFD back end fills in a table provided by the +application with pointers to the canonical information. To +output symbols, the application provides BFD with a table of +pointers to pointers to @code{asymbol}s. This allows applications +like the linker to output a symbol as it was read, since the ``behind +the scenes'' information will be still available. +@menu +* Reading Symbols:: +* Writing Symbols:: +* Mini Symbols:: +* typedef asymbol:: +* symbol handling functions:: +@end menu + +@node Reading Symbols, Writing Symbols, Symbols, Symbols +@subsection Reading symbols +There are two stages to reading a symbol table from a BFD: +allocating storage, and the actual reading process. This is an +excerpt from an application which reads the symbol table: + +@example + long storage_needed; + asymbol **symbol_table; + long number_of_symbols; + long i; + + storage_needed = bfd_get_symtab_upper_bound (abfd); + + if (storage_needed < 0) + FAIL + + if (storage_needed == 0) + return; + + symbol_table = xmalloc (storage_needed); + ... + number_of_symbols = + bfd_canonicalize_symtab (abfd, symbol_table); + + if (number_of_symbols < 0) + FAIL + + for (i = 0; i < number_of_symbols; i++) + process_symbol (symbol_table[i]); +@end example + +All storage for the symbols themselves is in an objalloc +connected to the BFD; it is freed when the BFD is closed. + +@node Writing Symbols, Mini Symbols, Reading Symbols, Symbols +@subsection Writing symbols +Writing of a symbol table is automatic when a BFD open for +writing is closed. The application attaches a vector of +pointers to pointers to symbols to the BFD being written, and +fills in the symbol count. The close and cleanup code reads +through the table provided and performs all the necessary +operations. The BFD output code must always be provided with an +``owned'' symbol: one which has come from another BFD, or one +which has been created using @code{bfd_make_empty_symbol}. Here is an +example showing the creation of a symbol table with only one element: + +@example + #include "bfd.h" + int main (void) + @{ + bfd *abfd; + asymbol *ptrs[2]; + asymbol *new; + + abfd = bfd_openw ("foo","a.out-sunos-big"); + bfd_set_format (abfd, bfd_object); + new = bfd_make_empty_symbol (abfd); + new->name = "dummy_symbol"; + new->section = bfd_make_section_old_way (abfd, ".text"); + new->flags = BSF_GLOBAL; + new->value = 0x12345; + + ptrs[0] = new; + ptrs[1] = 0; + + bfd_set_symtab (abfd, ptrs, 1); + bfd_close (abfd); + return 0; + @} + + ./makesym + nm foo + 00012345 A dummy_symbol +@end example + +Many formats cannot represent arbitrary symbol information; for +instance, the @code{a.out} object format does not allow an +arbitrary number of sections. A symbol pointing to a section +which is not one of @code{.text}, @code{.data} or @code{.bss} cannot +be described. + +@node Mini Symbols, typedef asymbol, Writing Symbols, Symbols +@subsection Mini Symbols +Mini symbols provide read-only access to the symbol table. +They use less memory space, but require more time to access. +They can be useful for tools like nm or objdump, which may +have to handle symbol tables of extremely large executables. + +The @code{bfd_read_minisymbols} function will read the symbols +into memory in an internal form. It will return a @code{void *} +pointer to a block of memory, a symbol count, and the size of +each symbol. The pointer is allocated using @code{malloc}, and +should be freed by the caller when it is no longer needed. + +The function @code{bfd_minisymbol_to_symbol} will take a pointer +to a minisymbol, and a pointer to a structure returned by +@code{bfd_make_empty_symbol}, and return a @code{asymbol} structure. +The return value may or may not be the same as the value from +@code{bfd_make_empty_symbol} which was passed in. + + +@node typedef asymbol, symbol handling functions, Mini Symbols, Symbols +@subsection typedef asymbol +An @code{asymbol} has the form: + + +@example + +typedef struct bfd_symbol +@{ + /* A pointer to the BFD which owns the symbol. This information + is necessary so that a back end can work out what additional + information (invisible to the application writer) is carried + with the symbol. + + This field is *almost* redundant, since you can use section->owner + instead, except that some symbols point to the global sections + bfd_@{abs,com,und@}_section. This could be fixed by making + these globals be per-bfd (or per-target-flavor). FIXME. */ + struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field. */ + + /* The text of the symbol. The name is left alone, and not copied; the + application may not alter it. */ + const char *name; + + /* The value of the symbol. This really should be a union of a + numeric value with a pointer, since some flags indicate that + a pointer to another symbol is stored here. */ + symvalue value; + + /* Attributes of a symbol. */ +#define BSF_NO_FLAGS 0x00 + + /* The symbol has local scope; @code{static} in @code{C}. The value + is the offset into the section of the data. */ +#define BSF_LOCAL 0x01 + + /* The symbol has global scope; initialized data in @code{C}. The + value is the offset into the section of the data. */ +#define BSF_GLOBAL 0x02 + + /* The symbol has global scope and is exported. The value is + the offset into the section of the data. */ +#define BSF_EXPORT BSF_GLOBAL /* No real difference. */ + + /* A normal C symbol would be one of: + @code{BSF_LOCAL}, @code{BSF_FORT_COMM}, @code{BSF_UNDEFINED} or + @code{BSF_GLOBAL}. */ + + /* The symbol is a debugging record. The value has an arbitrary + meaning, unless BSF_DEBUGGING_RELOC is also set. */ +#define BSF_DEBUGGING 0x08 + + /* The symbol denotes a function entry point. Used in ELF, + perhaps others someday. */ +#define BSF_FUNCTION 0x10 + + /* Used by the linker. */ +#define BSF_KEEP 0x20 +#define BSF_KEEP_G 0x40 + + /* A weak global symbol, overridable without warnings by + a regular global symbol of the same name. */ +#define BSF_WEAK 0x80 + + /* This symbol was created to point to a section, e.g. ELF's + STT_SECTION symbols. */ +#define BSF_SECTION_SYM 0x100 + + /* The symbol used to be a common symbol, but now it is + allocated. */ +#define BSF_OLD_COMMON 0x200 + + /* The default value for common data. */ +#define BFD_FORT_COMM_DEFAULT_VALUE 0 + + /* In some files the type of a symbol sometimes alters its + location in an output file - ie in coff a @code{ISFCN} symbol + which is also @code{C_EXT} symbol appears where it was + declared and not at the end of a section. This bit is set + by the target BFD part to convey this information. */ +#define BSF_NOT_AT_END 0x400 + + /* Signal that the symbol is the label of constructor section. */ +#define BSF_CONSTRUCTOR 0x800 + + /* Signal that the symbol is a warning symbol. The name is a + warning. The name of the next symbol is the one to warn about; + if a reference is made to a symbol with the same name as the next + symbol, a warning is issued by the linker. */ +#define BSF_WARNING 0x1000 + + /* Signal that the symbol is indirect. This symbol is an indirect + pointer to the symbol with the same name as the next symbol. */ +#define BSF_INDIRECT 0x2000 + + /* BSF_FILE marks symbols that contain a file name. This is used + for ELF STT_FILE symbols. */ +#define BSF_FILE 0x4000 + + /* Symbol is from dynamic linking information. */ +#define BSF_DYNAMIC 0x8000 + + /* The symbol denotes a data object. Used in ELF, and perhaps + others someday. */ +#define BSF_OBJECT 0x10000 + + /* This symbol is a debugging symbol. The value is the offset + into the section of the data. BSF_DEBUGGING should be set + as well. */ +#define BSF_DEBUGGING_RELOC 0x20000 + + /* This symbol is thread local. Used in ELF. */ +#define BSF_THREAD_LOCAL 0x40000 + + /* This symbol represents a complex relocation expression, + with the expression tree serialized in the symbol name. */ +#define BSF_RELC 0x80000 + + /* This symbol represents a signed complex relocation expression, + with the expression tree serialized in the symbol name. */ +#define BSF_SRELC 0x100000 + + flagword flags; + + /* A pointer to the section to which this symbol is + relative. This will always be non NULL, there are special + sections for undefined and absolute symbols. */ + struct bfd_section *section; + + /* Back end special data. */ + union + @{ + void *p; + bfd_vma i; + @} + udata; +@} +asymbol; + +@end example + +@node symbol handling functions, , typedef asymbol, Symbols +@subsection Symbol handling functions + + +@findex bfd_get_symtab_upper_bound +@subsubsection @code{bfd_get_symtab_upper_bound} +@strong{Description}@* +Return the number of bytes required to store a vector of pointers +to @code{asymbols} for all the symbols in the BFD @var{abfd}, +including a terminal NULL pointer. If there are no symbols in +the BFD, then return 0. If an error occurs, return -1. +@example +#define bfd_get_symtab_upper_bound(abfd) \ + BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd)) + +@end example + +@findex bfd_is_local_label +@subsubsection @code{bfd_is_local_label} +@strong{Synopsis} +@example +bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym); +@end example +@strong{Description}@* +Return TRUE if the given symbol @var{sym} in the BFD @var{abfd} is +a compiler generated local label, else return FALSE. + +@findex bfd_is_local_label_name +@subsubsection @code{bfd_is_local_label_name} +@strong{Synopsis} +@example +bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name); +@end example +@strong{Description}@* +Return TRUE if a symbol with the name @var{name} in the BFD +@var{abfd} is a compiler generated local label, else return +FALSE. This just checks whether the name has the form of a +local label. +@example +#define bfd_is_local_label_name(abfd, name) \ + BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name)) + +@end example + +@findex bfd_is_target_special_symbol +@subsubsection @code{bfd_is_target_special_symbol} +@strong{Synopsis} +@example +bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym); +@end example +@strong{Description}@* +Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something +special to the particular target represented by the BFD. Such symbols +should normally not be mentioned to the user. +@example +#define bfd_is_target_special_symbol(abfd, sym) \ + BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym)) + +@end example + +@findex bfd_canonicalize_symtab +@subsubsection @code{bfd_canonicalize_symtab} +@strong{Description}@* +Read the symbols from the BFD @var{abfd}, and fills in +the vector @var{location} with pointers to the symbols and +a trailing NULL. +Return the actual number of symbol pointers, not +including the NULL. +@example +#define bfd_canonicalize_symtab(abfd, location) \ + BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location)) + +@end example + +@findex bfd_set_symtab +@subsubsection @code{bfd_set_symtab} +@strong{Synopsis} +@example +bfd_boolean bfd_set_symtab + (bfd *abfd, asymbol **location, unsigned int count); +@end example +@strong{Description}@* +Arrange that when the output BFD @var{abfd} is closed, +the table @var{location} of @var{count} pointers to symbols +will be written. + +@findex bfd_print_symbol_vandf +@subsubsection @code{bfd_print_symbol_vandf} +@strong{Synopsis} +@example +void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol); +@end example +@strong{Description}@* +Print the value and flags of the @var{symbol} supplied to the +stream @var{file}. + +@findex bfd_make_empty_symbol +@subsubsection @code{bfd_make_empty_symbol} +@strong{Description}@* +Create a new @code{asymbol} structure for the BFD @var{abfd} +and return a pointer to it. + +This routine is necessary because each back end has private +information surrounding the @code{asymbol}. Building your own +@code{asymbol} and pointing to it will not create the private +information, and will cause problems later on. +@example +#define bfd_make_empty_symbol(abfd) \ + BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd)) + +@end example + +@findex _bfd_generic_make_empty_symbol +@subsubsection @code{_bfd_generic_make_empty_symbol} +@strong{Synopsis} +@example +asymbol *_bfd_generic_make_empty_symbol (bfd *); +@end example +@strong{Description}@* +Create a new @code{asymbol} structure for the BFD @var{abfd} +and return a pointer to it. Used by core file routines, +binary back-end and anywhere else where no private info +is needed. + +@findex bfd_make_debug_symbol +@subsubsection @code{bfd_make_debug_symbol} +@strong{Description}@* +Create a new @code{asymbol} structure for the BFD @var{abfd}, +to be used as a debugging symbol. Further details of its use have +yet to be worked out. +@example +#define bfd_make_debug_symbol(abfd,ptr,size) \ + BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size)) + +@end example + +@findex bfd_decode_symclass +@subsubsection @code{bfd_decode_symclass} +@strong{Description}@* +Return a character corresponding to the symbol +class of @var{symbol}, or '?' for an unknown class. + +@strong{Synopsis} +@example +int bfd_decode_symclass (asymbol *symbol); +@end example +@findex bfd_is_undefined_symclass +@subsubsection @code{bfd_is_undefined_symclass} +@strong{Description}@* +Returns non-zero if the class symbol returned by +bfd_decode_symclass represents an undefined symbol. +Returns zero otherwise. + +@strong{Synopsis} +@example +bfd_boolean bfd_is_undefined_symclass (int symclass); +@end example +@findex bfd_symbol_info +@subsubsection @code{bfd_symbol_info} +@strong{Description}@* +Fill in the basic info about symbol that nm needs. +Additional info may be added by the back-ends after +calling this function. + +@strong{Synopsis} +@example +void bfd_symbol_info (asymbol *symbol, symbol_info *ret); +@end example +@findex bfd_copy_private_symbol_data +@subsubsection @code{bfd_copy_private_symbol_data} +@strong{Synopsis} +@example +bfd_boolean bfd_copy_private_symbol_data + (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym); +@end example +@strong{Description}@* +Copy private symbol information from @var{isym} in the BFD +@var{ibfd} to the symbol @var{osym} in the BFD @var{obfd}. +Return @code{TRUE} on success, @code{FALSE} on error. Possible error +returns are: + +@itemize @bullet + +@item +@code{bfd_error_no_memory} - +Not enough memory exists to create private data for @var{osec}. +@end itemize +@example +#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \ + BFD_SEND (obfd, _bfd_copy_private_symbol_data, \ + (ibfd, isymbol, obfd, osymbol)) + +@end example + diff --git a/bfd/doc/targets.texi b/bfd/doc/targets.texi new file mode 100644 index 000000000..2b10ccbcb --- /dev/null +++ b/bfd/doc/targets.texi @@ -0,0 +1,557 @@ +@section Targets + + +@strong{Description}@* +Each port of BFD to a different machine requires the creation +of a target back end. All the back end provides to the root +part of BFD is a structure containing pointers to functions +which perform certain low level operations on files. BFD +translates the applications's requests through a pointer into +calls to the back end routines. + +When a file is opened with @code{bfd_openr}, its format and +target are unknown. BFD uses various mechanisms to determine +how to interpret the file. The operations performed are: + +@itemize @bullet + +@item +Create a BFD by calling the internal routine +@code{_bfd_new_bfd}, then call @code{bfd_find_target} with the +target string supplied to @code{bfd_openr} and the new BFD pointer. + +@item +If a null target string was provided to @code{bfd_find_target}, +look up the environment variable @code{GNUTARGET} and use +that as the target string. + +@item +If the target string is still @code{NULL}, or the target string is +@code{default}, then use the first item in the target vector +as the target type, and set @code{target_defaulted} in the BFD to +cause @code{bfd_check_format} to loop through all the targets. +@xref{bfd_target}. @xref{Formats}. + +@item +Otherwise, inspect the elements in the target vector +one by one, until a match on target name is found. When found, +use it. + +@item +Otherwise return the error @code{bfd_error_invalid_target} to +@code{bfd_openr}. + +@item +@code{bfd_openr} attempts to open the file using +@code{bfd_open_file}, and returns the BFD. +@end itemize +Once the BFD has been opened and the target selected, the file +format may be determined. This is done by calling +@code{bfd_check_format} on the BFD with a suggested format. +If @code{target_defaulted} has been set, each possible target +type is tried to see if it recognizes the specified format. +@code{bfd_check_format} returns @code{TRUE} when the caller guesses right. +@menu +* bfd_target:: +@end menu + +@node bfd_target, , Targets, Targets + +@subsection bfd_target + + +@strong{Description}@* +This structure contains everything that BFD knows about a +target. It includes things like its byte order, name, and which +routines to call to do various operations. + +Every BFD points to a target structure with its @code{xvec} +member. + +The macros below are used to dispatch to functions through the +@code{bfd_target} vector. They are used in a number of macros further +down in @file{bfd.h}, and are also used when calling various +routines by hand inside the BFD implementation. The @var{arglist} +argument must be parenthesized; it contains all the arguments +to the called function. + +They make the documentation (more) unpleasant to read, so if +someone wants to fix this and not break the above, please do. +@example +#define BFD_SEND(bfd, message, arglist) \ + ((*((bfd)->xvec->message)) arglist) + +#ifdef DEBUG_BFD_SEND +#undef BFD_SEND +#define BFD_SEND(bfd, message, arglist) \ + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ + ((*((bfd)->xvec->message)) arglist) : \ + (bfd_assert (__FILE__,__LINE__), NULL)) +#endif +@end example +For operations which index on the BFD format: +@example +#define BFD_SEND_FMT(bfd, message, arglist) \ + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) + +#ifdef DEBUG_BFD_SEND +#undef BFD_SEND_FMT +#define BFD_SEND_FMT(bfd, message, arglist) \ + (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \ + (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \ + (bfd_assert (__FILE__,__LINE__), NULL)) +#endif + +@end example +This is the structure which defines the type of BFD this is. The +@code{xvec} member of the struct @code{bfd} itself points here. Each +module that implements access to a different target under BFD, +defines one of these. + +FIXME, these names should be rationalised with the names of +the entry points which call them. Too bad we can't have one +macro to define them both! +@example +enum bfd_flavour +@{ + bfd_target_unknown_flavour, + bfd_target_aout_flavour, + bfd_target_coff_flavour, + bfd_target_ecoff_flavour, + bfd_target_xcoff_flavour, + bfd_target_elf_flavour, + bfd_target_ieee_flavour, + bfd_target_nlm_flavour, + bfd_target_oasys_flavour, + bfd_target_tekhex_flavour, + bfd_target_srec_flavour, + bfd_target_ihex_flavour, + bfd_target_som_flavour, + bfd_target_os9k_flavour, + bfd_target_versados_flavour, + bfd_target_msdos_flavour, + bfd_target_ovax_flavour, + bfd_target_evax_flavour, + bfd_target_mmo_flavour, + bfd_target_mach_o_flavour, + bfd_target_pef_flavour, + bfd_target_pef_xlib_flavour, + bfd_target_sym_flavour +@}; + +enum bfd_endian @{ BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN @}; + +/* Forward declaration. */ +typedef struct bfd_link_info _bfd_link_info; + +typedef struct bfd_target +@{ + /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc. */ + char *name; + + /* The "flavour" of a back end is a general indication about + the contents of a file. */ + enum bfd_flavour flavour; + + /* The order of bytes within the data area of a file. */ + enum bfd_endian byteorder; + + /* The order of bytes within the header parts of a file. */ + enum bfd_endian header_byteorder; + + /* A mask of all the flags which an executable may have set - + from the set @code{BFD_NO_FLAGS}, @code{HAS_RELOC}, ...@code{D_PAGED}. */ + flagword object_flags; + + /* A mask of all the flags which a section may have set - from + the set @code{SEC_NO_FLAGS}, @code{SEC_ALLOC}, ...@code{SET_NEVER_LOAD}. */ + flagword section_flags; + + /* The character normally found at the front of a symbol. + (if any), perhaps `_'. */ + char symbol_leading_char; + + /* The pad character for file names within an archive header. */ + char ar_pad_char; + + /* The maximum number of characters in an archive header. */ + unsigned short ar_max_namelen; + + /* Entries for byte swapping for data. These are different from the + other entry points, since they don't take a BFD as the first argument. + Certain other handlers could do the same. */ + bfd_uint64_t (*bfd_getx64) (const void *); + bfd_int64_t (*bfd_getx_signed_64) (const void *); + void (*bfd_putx64) (bfd_uint64_t, void *); + bfd_vma (*bfd_getx32) (const void *); + bfd_signed_vma (*bfd_getx_signed_32) (const void *); + void (*bfd_putx32) (bfd_vma, void *); + bfd_vma (*bfd_getx16) (const void *); + bfd_signed_vma (*bfd_getx_signed_16) (const void *); + void (*bfd_putx16) (bfd_vma, void *); + + /* Byte swapping for the headers. */ + bfd_uint64_t (*bfd_h_getx64) (const void *); + bfd_int64_t (*bfd_h_getx_signed_64) (const void *); + void (*bfd_h_putx64) (bfd_uint64_t, void *); + bfd_vma (*bfd_h_getx32) (const void *); + bfd_signed_vma (*bfd_h_getx_signed_32) (const void *); + void (*bfd_h_putx32) (bfd_vma, void *); + bfd_vma (*bfd_h_getx16) (const void *); + bfd_signed_vma (*bfd_h_getx_signed_16) (const void *); + void (*bfd_h_putx16) (bfd_vma, void *); + + /* Format dependent routines: these are vectors of entry points + within the target vector structure, one for each format to check. */ + + /* Check the format of a file being read. Return a @code{bfd_target *} or zero. */ + const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *); + + /* Set the format of a file being written. */ + bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *); + + /* Write cached information into a file being written, at @code{bfd_close}. */ + bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *); + +@end example +The general target vector. These vectors are initialized using the +BFD_JUMP_TABLE macros. +@example + + /* Generic entry points. */ +#define BFD_JUMP_TABLE_GENERIC(NAME) \ + NAME##_close_and_cleanup, \ + NAME##_bfd_free_cached_info, \ + NAME##_new_section_hook, \ + NAME##_get_section_contents, \ + NAME##_get_section_contents_in_window + + /* Called when the BFD is being closed to do any necessary cleanup. */ + bfd_boolean (*_close_and_cleanup) (bfd *); + /* Ask the BFD to free all cached information. */ + bfd_boolean (*_bfd_free_cached_info) (bfd *); + /* Called when a new section is created. */ + bfd_boolean (*_new_section_hook) (bfd *, sec_ptr); + /* Read the contents of a section. */ + bfd_boolean (*_bfd_get_section_contents) + (bfd *, sec_ptr, void *, file_ptr, bfd_size_type); + bfd_boolean (*_bfd_get_section_contents_in_window) + (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type); + + /* Entry points to copy private data. */ +#define BFD_JUMP_TABLE_COPY(NAME) \ + NAME##_bfd_copy_private_bfd_data, \ + NAME##_bfd_merge_private_bfd_data, \ + _bfd_generic_init_private_section_data, \ + NAME##_bfd_copy_private_section_data, \ + NAME##_bfd_copy_private_symbol_data, \ + NAME##_bfd_copy_private_header_data, \ + NAME##_bfd_set_private_flags, \ + NAME##_bfd_print_private_bfd_data + + /* Called to copy BFD general private data from one object file + to another. */ + bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *); + /* Called to merge BFD general private data from one object file + to a common output file when linking. */ + bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *); + /* Called to initialize BFD private section data from one object file + to another. */ +#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \ + BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info)) + bfd_boolean (*_bfd_init_private_section_data) + (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *); + /* Called to copy BFD private section data from one object file + to another. */ + bfd_boolean (*_bfd_copy_private_section_data) + (bfd *, sec_ptr, bfd *, sec_ptr); + /* Called to copy BFD private symbol data from one symbol + to another. */ + bfd_boolean (*_bfd_copy_private_symbol_data) + (bfd *, asymbol *, bfd *, asymbol *); + /* Called to copy BFD private header data from one object file + to another. */ + bfd_boolean (*_bfd_copy_private_header_data) + (bfd *, bfd *); + /* Called to set private backend flags. */ + bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword); + + /* Called to print private BFD data. */ + bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *); + + /* Core file entry points. */ +#define BFD_JUMP_TABLE_CORE(NAME) \ + NAME##_core_file_failing_command, \ + NAME##_core_file_failing_signal, \ + NAME##_core_file_matches_executable_p + + char * (*_core_file_failing_command) (bfd *); + int (*_core_file_failing_signal) (bfd *); + bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *); + + /* Archive entry points. */ +#define BFD_JUMP_TABLE_ARCHIVE(NAME) \ + NAME##_slurp_armap, \ + NAME##_slurp_extended_name_table, \ + NAME##_construct_extended_name_table, \ + NAME##_truncate_arname, \ + NAME##_write_armap, \ + NAME##_read_ar_hdr, \ + NAME##_openr_next_archived_file, \ + NAME##_get_elt_at_index, \ + NAME##_generic_stat_arch_elt, \ + NAME##_update_armap_timestamp + + bfd_boolean (*_bfd_slurp_armap) (bfd *); + bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *); + bfd_boolean (*_bfd_construct_extended_name_table) + (bfd *, char **, bfd_size_type *, const char **); + void (*_bfd_truncate_arname) (bfd *, const char *, char *); + bfd_boolean (*write_armap) + (bfd *, unsigned int, struct orl *, unsigned int, int); + void * (*_bfd_read_ar_hdr_fn) (bfd *); + bfd * (*openr_next_archived_file) (bfd *, bfd *); +#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i)) + bfd * (*_bfd_get_elt_at_index) (bfd *, symindex); + int (*_bfd_stat_arch_elt) (bfd *, struct stat *); + bfd_boolean (*_bfd_update_armap_timestamp) (bfd *); + + /* Entry points used for symbols. */ +#define BFD_JUMP_TABLE_SYMBOLS(NAME) \ + NAME##_get_symtab_upper_bound, \ + NAME##_canonicalize_symtab, \ + NAME##_make_empty_symbol, \ + NAME##_print_symbol, \ + NAME##_get_symbol_info, \ + NAME##_bfd_is_local_label_name, \ + NAME##_bfd_is_target_special_symbol, \ + NAME##_get_lineno, \ + NAME##_find_nearest_line, \ + _bfd_generic_find_line, \ + NAME##_find_inliner_info, \ + NAME##_bfd_make_debug_symbol, \ + NAME##_read_minisymbols, \ + NAME##_minisymbol_to_symbol + + long (*_bfd_get_symtab_upper_bound) (bfd *); + long (*_bfd_canonicalize_symtab) + (bfd *, struct bfd_symbol **); + struct bfd_symbol * + (*_bfd_make_empty_symbol) (bfd *); + void (*_bfd_print_symbol) + (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type); +#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e)) + void (*_bfd_get_symbol_info) + (bfd *, struct bfd_symbol *, symbol_info *); +#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e)) + bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *); + bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *); + alent * (*_get_lineno) (bfd *, struct bfd_symbol *); + bfd_boolean (*_bfd_find_nearest_line) + (bfd *, struct bfd_section *, struct bfd_symbol **, bfd_vma, + const char **, const char **, unsigned int *); + bfd_boolean (*_bfd_find_line) + (bfd *, struct bfd_symbol **, struct bfd_symbol *, + const char **, unsigned int *); + bfd_boolean (*_bfd_find_inliner_info) + (bfd *, const char **, const char **, unsigned int *); + /* Back-door to allow format-aware applications to create debug symbols + while using BFD for everything else. Currently used by the assembler + when creating COFF files. */ + asymbol * (*_bfd_make_debug_symbol) + (bfd *, void *, unsigned long size); +#define bfd_read_minisymbols(b, d, m, s) \ + BFD_SEND (b, _read_minisymbols, (b, d, m, s)) + long (*_read_minisymbols) + (bfd *, bfd_boolean, void **, unsigned int *); +#define bfd_minisymbol_to_symbol(b, d, m, f) \ + BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f)) + asymbol * (*_minisymbol_to_symbol) + (bfd *, bfd_boolean, const void *, asymbol *); + + /* Routines for relocs. */ +#define BFD_JUMP_TABLE_RELOCS(NAME) \ + NAME##_get_reloc_upper_bound, \ + NAME##_canonicalize_reloc, \ + NAME##_bfd_reloc_type_lookup, \ + NAME##_bfd_reloc_name_lookup + + long (*_get_reloc_upper_bound) (bfd *, sec_ptr); + long (*_bfd_canonicalize_reloc) + (bfd *, sec_ptr, arelent **, struct bfd_symbol **); + /* See documentation on reloc types. */ + reloc_howto_type * + (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type); + reloc_howto_type * + (*reloc_name_lookup) (bfd *, const char *); + + + /* Routines used when writing an object file. */ +#define BFD_JUMP_TABLE_WRITE(NAME) \ + NAME##_set_arch_mach, \ + NAME##_set_section_contents + + bfd_boolean (*_bfd_set_arch_mach) + (bfd *, enum bfd_architecture, unsigned long); + bfd_boolean (*_bfd_set_section_contents) + (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type); + + /* Routines used by the linker. */ +#define BFD_JUMP_TABLE_LINK(NAME) \ + NAME##_sizeof_headers, \ + NAME##_bfd_get_relocated_section_contents, \ + NAME##_bfd_relax_section, \ + NAME##_bfd_link_hash_table_create, \ + NAME##_bfd_link_hash_table_free, \ + NAME##_bfd_link_add_symbols, \ + NAME##_bfd_link_just_syms, \ + NAME##_bfd_final_link, \ + NAME##_bfd_link_split_section, \ + NAME##_bfd_gc_sections, \ + NAME##_bfd_merge_sections, \ + NAME##_bfd_is_group_section, \ + NAME##_bfd_discard_group, \ + NAME##_section_already_linked \ + + int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); + bfd_byte * (*_bfd_get_relocated_section_contents) + (bfd *, struct bfd_link_info *, struct bfd_link_order *, + bfd_byte *, bfd_boolean, struct bfd_symbol **); + + bfd_boolean (*_bfd_relax_section) + (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *); + + /* Create a hash table for the linker. Different backends store + different information in this table. */ + struct bfd_link_hash_table * + (*_bfd_link_hash_table_create) (bfd *); + + /* Release the memory associated with the linker hash table. */ + void (*_bfd_link_hash_table_free) (struct bfd_link_hash_table *); + + /* Add symbols from this object file into the hash table. */ + bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *); + + /* Indicate that we are only retrieving symbol values from this section. */ + void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *); + + /* Do a link based on the link_order structures attached to each + section of the BFD. */ + bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *); + + /* Should this section be split up into smaller pieces during linking. */ + bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *); + + /* Remove sections that are not referenced from the output. */ + bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *); + + /* Attempt to merge SEC_MERGE sections. */ + bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); + + /* Is this section a member of a group? */ + bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *); + + /* Discard members of a group. */ + bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *); + + /* Check if SEC has been already linked during a reloceatable or + final link. */ + void (*_section_already_linked) (bfd *, struct bfd_section *, + struct bfd_link_info *); + + /* Routines to handle dynamic symbols and relocs. */ +#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ + NAME##_get_dynamic_symtab_upper_bound, \ + NAME##_canonicalize_dynamic_symtab, \ + NAME##_get_synthetic_symtab, \ + NAME##_get_dynamic_reloc_upper_bound, \ + NAME##_canonicalize_dynamic_reloc + + /* Get the amount of memory required to hold the dynamic symbols. */ + long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *); + /* Read in the dynamic symbols. */ + long (*_bfd_canonicalize_dynamic_symtab) + (bfd *, struct bfd_symbol **); + /* Create synthetized symbols. */ + long (*_bfd_get_synthetic_symtab) + (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **, + struct bfd_symbol **); + /* Get the amount of memory required to hold the dynamic relocs. */ + long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *); + /* Read in the dynamic relocs. */ + long (*_bfd_canonicalize_dynamic_reloc) + (bfd *, arelent **, struct bfd_symbol **); + +@end example +A pointer to an alternative bfd_target in case the current one is not +satisfactory. This can happen when the target cpu supports both big +and little endian code, and target chosen by the linker has the wrong +endianness. The function open_output() in ld/ldlang.c uses this field +to find an alternative output format that is suitable. +@example + /* Opposite endian version of this target. */ + const struct bfd_target * alternative_target; + + /* Data for use by back-end routines, which isn't + generic enough to belong in this structure. */ + const void *backend_data; + +@} bfd_target; + +@end example + +@findex bfd_set_default_target +@subsubsection @code{bfd_set_default_target} +@strong{Synopsis} +@example +bfd_boolean bfd_set_default_target (const char *name); +@end example +@strong{Description}@* +Set the default target vector to use when recognizing a BFD. +This takes the name of the target, which may be a BFD target +name or a configuration triplet. + +@findex bfd_find_target +@subsubsection @code{bfd_find_target} +@strong{Synopsis} +@example +const bfd_target *bfd_find_target (const char *target_name, bfd *abfd); +@end example +@strong{Description}@* +Return a pointer to the transfer vector for the object target +named @var{target_name}. If @var{target_name} is @code{NULL}, +choose the one in the environment variable @code{GNUTARGET}; if +that is null or not defined, then choose the first entry in the +target list. Passing in the string "default" or setting the +environment variable to "default" will cause the first entry in +the target list to be returned, and "target_defaulted" will be +set in the BFD if @var{abfd} isn't @code{NULL}. This causes +@code{bfd_check_format} to loop over all the targets to find the +one that matches the file being read. + +@findex bfd_target_list +@subsubsection @code{bfd_target_list} +@strong{Synopsis} +@example +const char ** bfd_target_list (void); +@end example +@strong{Description}@* +Return a freshly malloced NULL-terminated +vector of the names of all the valid BFD targets. Do not +modify the names. + +@findex bfd_seach_for_target +@subsubsection @code{bfd_seach_for_target} +@strong{Synopsis} +@example +const bfd_target *bfd_search_for_target + (int (*search_func) (const bfd_target *, void *), + void *); +@end example +@strong{Description}@* +Return a pointer to the first transfer vector in the list of +transfer vectors maintained by BFD that produces a non-zero +result when passed to the function @var{search_func}. The +parameter @var{data} is passed, unexamined, to the search +function. + diff --git a/bfd/po/da.gmo b/bfd/po/da.gmo new file mode 100644 index 0000000000000000000000000000000000000000..944a11c1610b78a696d9df49faf3ede29a908b5d GIT binary patch literal 60556 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 O?iZHk89Ivm9RCl3k3&TO literal 0 HcwPel00001 diff --git a/bfd/po/es.gmo b/bfd/po/es.gmo new file mode 100644 index 0000000000000000000000000000000000000000..4097899662a1fb91c4e3a87c8a77b532336f27f8 GIT binary patch literal 87772 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�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 N*I5bC+L7Gv{{lVL)CB+l literal 0 HcwPel00001 diff --git a/bfd/po/fr.gmo b/bfd/po/fr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..1a6948d5b93c8ceff3453eee203a10df302646c7 GIT binary patch literal 71749 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 K7(&{@_WuCg+XJcq literal 0 HcwPel00001 diff --git a/bfd/po/ja.gmo b/bfd/po/ja.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f8142480577e285021ebd309468e387bd7989e77 GIT binary patch literal 38616 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
  • D`&ohmU1~zjqU) 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 KRGO$5R{3whJ=D?w literal 0 HcwPel00001 diff --git a/binutils/arlex.c b/binutils/arlex.c new file mode 100644 index 000000000..5dda7b8ee --- /dev/null +++ b/binutils/arlex.c @@ -0,0 +1,2035 @@ + +#line 3 "arlex.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#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. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +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 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - 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). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +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 realloc() it to grow it, and should free() 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; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* 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 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* 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". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* 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 = 0; /* 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 (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (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 = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 40 +#define YY_END_OF_BUFFER 41 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[177] = + { 0, + 0, 0, 41, 40, 39, 38, 35, 32, 33, 36, + 40, 34, 37, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 36, 31, 37, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 7, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 22, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + + 35, 35, 35, 10, 11, 12, 35, 15, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 25, 26, 27, + 35, 30, 35, 35, 35, 3, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 18, 35, 35, 35, 35, + 35, 35, 35, 1, 2, 4, 5, 35, 35, 35, + 35, 35, 16, 17, 19, 20, 35, 35, 35, 35, + 35, 35, 8, 9, 13, 14, 35, 23, 24, 28, + 29, 35, 35, 6, 21, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 4, 1, 1, 1, 5, + 6, 7, 8, 9, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 10, 1, + 1, 1, 1, 1, 11, 12, 13, 14, 15, 16, + 4, 17, 18, 4, 4, 19, 20, 21, 22, 23, + 4, 24, 25, 26, 27, 28, 4, 29, 30, 4, + 1, 4, 1, 1, 4, 1, 31, 32, 33, 34, + + 35, 36, 4, 37, 38, 4, 4, 39, 40, 41, + 42, 43, 4, 44, 45, 46, 47, 48, 4, 49, + 50, 4, 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, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[51] = + { 0, + 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + } ; + +static yyconst flex_int16_t yy_base[180] = + { 0, + 0, 0, 193, 194, 194, 194, 0, 194, 194, 0, + 190, 194, 0, 177, 32, 37, 32, 163, 174, 170, + 164, 171, 174, 169, 149, 15, 22, 17, 135, 146, + 142, 136, 143, 146, 141, 0, 0, 194, 0, 161, + 159, 158, 153, 147, 156, 143, 149, 148, 141, 150, + 141, 135, 138, 127, 125, 124, 119, 113, 122, 109, + 115, 114, 107, 116, 107, 101, 104, 43, 136, 135, + 130, 129, 0, 119, 123, 118, 114, 118, 119, 122, + 124, 25, 104, 103, 98, 97, 0, 87, 91, 86, + 82, 86, 87, 90, 92, 105, 100, 97, 94, 93, + + 105, 106, 102, 0, 0, 0, 104, 0, 92, 75, + 70, 67, 64, 63, 75, 76, 72, 0, 0, 0, + 74, 0, 62, 91, 88, 0, 86, 85, 73, 85, + 79, 83, 70, 62, 59, 0, 57, 56, 44, 56, + 50, 54, 41, 0, 0, 0, 0, 63, 58, 59, + 67, 66, 0, 0, 0, 0, 38, 33, 34, 42, + 41, 51, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 43, 21, 0, 0, 194, 65, 66, 69 + } ; + +static yyconst flex_int16_t yy_def[180] = + { 0, + 176, 1, 176, 176, 176, 176, 177, 176, 176, 178, + 176, 176, 179, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 178, 176, 179, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 0, 176, 176, 176 + } ; + +static yyconst flex_int16_t yy_nxt[245] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 7, 15, 16, 17, 18, 19, 7, 20, 7, + 7, 21, 7, 22, 23, 7, 7, 24, 7, 7, + 25, 7, 26, 27, 28, 29, 30, 7, 31, 7, + 7, 32, 7, 33, 34, 7, 7, 35, 7, 7, + 41, 43, 45, 55, 44, 42, 57, 59, 56, 58, + 46, 96, 97, 110, 111, 60, 37, 36, 37, 39, + 175, 39, 174, 173, 172, 171, 170, 169, 168, 167, + 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, + 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, + + 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, + 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, + 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, + 116, 115, 114, 113, 112, 109, 108, 107, 106, 105, + 104, 103, 102, 101, 100, 99, 98, 95, 94, 93, + 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, + 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, + 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, + 62, 61, 54, 53, 52, 51, 50, 49, 48, 47, + 40, 38, 176, 3, 176, 176, 176, 176, 176, 176, + + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176 + } ; + +static yyconst flex_int16_t yy_chk[245] = + { 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, 1, + 15, 16, 17, 26, 16, 15, 27, 28, 26, 27, + 17, 68, 68, 82, 82, 28, 178, 177, 178, 179, + 173, 179, 172, 167, 162, 161, 160, 159, 158, 157, + 152, 151, 150, 149, 148, 143, 142, 141, 140, 139, + 138, 137, 135, 134, 133, 132, 131, 130, 129, 128, + + 127, 125, 124, 123, 121, 117, 116, 115, 114, 113, + 112, 111, 110, 109, 107, 103, 102, 101, 100, 99, + 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, + 88, 86, 85, 84, 83, 81, 80, 79, 78, 77, + 76, 75, 74, 72, 71, 70, 69, 67, 66, 65, + 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, + 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, + 44, 43, 42, 41, 40, 35, 34, 33, 32, 31, + 30, 29, 25, 24, 23, 22, 21, 20, 19, 18, + 14, 11, 3, 176, 176, 176, 176, 176, 176, 176, + + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* 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 "arlex.l" +#line 2 "arlex.l" +/* arlex.l - Strange script language lexer */ + +/* Copyright 1992, 1997, 2000, 2001, 2002, 2003, 2004, 2007 + Free Software Foundation, Inc. + + This file is part of GNU Binutils. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + + +/* Contributed by Steve Chamberlain . */ + +#define DONTDECLARE_MALLOC +#include "ansidecl.h" +#include "libiberty.h" +#include "arparse.h" + +#define YY_NO_UNPUT + +extern int yylex (void); + +int linenumber; +#line 599 "arlex.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#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_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t 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 \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#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 + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* 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 + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 42 "arlex.l" + + +#line 755 "arlex.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#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 ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + 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 >= 177 ) + 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] != 194 ); + +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 44 "arlex.l" +{ return ADDLIB; } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 45 "arlex.l" +{ return ADDMOD; } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 46 "arlex.l" +{ return CLEAR; } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 47 "arlex.l" +{ return CREATE; } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 48 "arlex.l" +{ return DELETE; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 49 "arlex.l" +{ return DIRECTORY; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 50 "arlex.l" +{ return END; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 51 "arlex.l" +{ return EXTRACT; } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 52 "arlex.l" +{ return FULLDIR; } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 53 "arlex.l" +{ return HELP; } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 54 "arlex.l" +{ return LIST; } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 55 "arlex.l" +{ return OPEN; } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 56 "arlex.l" +{ return REPLACE; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 57 "arlex.l" +{ return VERBOSE; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 58 "arlex.l" +{ return SAVE; } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 59 "arlex.l" +{ return ADDLIB; } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 60 "arlex.l" +{ return ADDMOD; } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 61 "arlex.l" +{ return CLEAR; } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 62 "arlex.l" +{ return CREATE; } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 63 "arlex.l" +{ return DELETE; } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 64 "arlex.l" +{ return DIRECTORY; } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 65 "arlex.l" +{ return END; } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 66 "arlex.l" +{ return EXTRACT; } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 67 "arlex.l" +{ return FULLDIR; } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 68 "arlex.l" +{ return HELP; } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 69 "arlex.l" +{ return LIST; } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 70 "arlex.l" +{ return OPEN; } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 71 "arlex.l" +{ return REPLACE; } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 72 "arlex.l" +{ return VERBOSE; } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 73 "arlex.l" +{ return SAVE; } + YY_BREAK +case 31: +/* rule 31 can match eol */ +YY_RULE_SETUP +#line 74 "arlex.l" +{ linenumber ++; } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 75 "arlex.l" +{ return '('; } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 76 "arlex.l" +{ return ')'; } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 77 "arlex.l" +{ return ','; } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 78 "arlex.l" +{ + yylval.name = xstrdup (yytext); + return FILENAME; + } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 82 "arlex.l" +{ } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 83 "arlex.l" +{ } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 84 "arlex.l" +{ } + YY_BREAK +case 39: +/* rule 39 can match eol */ +YY_RULE_SETUP +#line 85 "arlex.l" +{ linenumber ++; return NEWLINE; } + YY_BREAK +case 40: +YY_RULE_SETUP +#line 87 "arlex.l" +ECHO; + YY_BREAK +#line 1043 "arlex.c" +case YY_STATE_EOF(INITIAL): + 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_LVALUE->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_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->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 (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* 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. */ + yyrealloc((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_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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 (void) +{ + 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 >= 177 ) + 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 ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + 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 >= 177 ) + 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 == 176); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#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_LVALUE->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 ); + + /*FALLTHROUGH*/ + + 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 /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + 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_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = 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; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(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 *) yyalloc(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; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + 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( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + 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) yyalloc(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; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_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; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (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. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* 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 *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 87 "arlex.l" + + +#ifndef yywrap +/* Needed for lex, though not flex. */ +int yywrap(void) { return 1; } +#endif + diff --git a/binutils/arparse.c b/binutils/arparse.c new file mode 100644 index 000000000..5adb8a519 --- /dev/null +++ b/binutils/arparse.c @@ -0,0 +1,1770 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NEWLINE = 258, + VERBOSE = 259, + FILENAME = 260, + ADDLIB = 261, + LIST = 262, + ADDMOD = 263, + CLEAR = 264, + CREATE = 265, + DELETE = 266, + DIRECTORY = 267, + END = 268, + EXTRACT = 269, + FULLDIR = 270, + HELP = 271, + QUIT = 272, + REPLACE = 273, + SAVE = 274, + OPEN = 275 + }; +#endif +/* Tokens. */ +#define NEWLINE 258 +#define VERBOSE 259 +#define FILENAME 260 +#define ADDLIB 261 +#define LIST 262 +#define ADDMOD 263 +#define CLEAR 264 +#define CREATE 265 +#define DELETE 266 +#define DIRECTORY 267 +#define END 268 +#define EXTRACT 269 +#define FULLDIR 270 +#define HELP 271 +#define QUIT 272 +#define REPLACE 273 +#define SAVE 274 +#define OPEN 275 + + + + +/* Copy the first part of user declarations. */ +#line 1 "arparse.y" + +/* arparse.y - Stange script language parser */ + +/* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003, 2007 + Free Software Foundation, Inc. + + This file is part of GNU Binutils. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + + +/* Contributed by Steve Chamberlain + sac@cygnus.com + +*/ +#define DONTDECLARE_MALLOC +#include "sysdep.h" +#include "bfd.h" +#include "arsup.h" +extern int verbose; +extern int yylex (void); +static int yyerror (const char *); + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 38 "arparse.y" +{ + char *name; +struct list *list ; + +} +/* Line 187 of yacc.c. */ +#line 179 "arparse.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 192 "arparse.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 34 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 24 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 22 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 42 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 53 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 275 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 21, 22, 2, 2, 23, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 4, 7, 10, 11, 14, 16, 18, + 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, + 40, 42, 44, 45, 48, 51, 53, 56, 59, 61, + 63, 66, 69, 73, 78, 80, 81, 85, 86, 90, + 91, 93, 94 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 25, 0, -1, -1, 26, 27, -1, 27, 28, -1, + -1, 29, 3, -1, 37, -1, 38, -1, 45, -1, + 40, -1, 39, -1, 32, -1, 34, -1, 36, -1, + 30, -1, 31, -1, 33, -1, 35, -1, 13, -1, + 1, -1, 5, -1, -1, 14, 43, -1, 18, 43, + -1, 9, -1, 11, 43, -1, 8, 43, -1, 7, + -1, 19, -1, 20, 5, -1, 10, 5, -1, 6, + 5, 42, -1, 12, 5, 42, 41, -1, 5, -1, + -1, 21, 43, 22, -1, -1, 43, 44, 5, -1, + -1, 23, -1, -1, 4, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint8 yyrline[] = +{ + 0, 69, 69, 69, 73, 74, 78, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 102, 107, 112, 117, 121, 126, 131, + 138, 143, 149, 153, 160, 162, 166, 169, 173, 179, + 184, 185, 190 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "NEWLINE", "VERBOSE", "FILENAME", + "ADDLIB", "LIST", "ADDMOD", "CLEAR", "CREATE", "DELETE", "DIRECTORY", + "END", "EXTRACT", "FULLDIR", "HELP", "QUIT", "REPLACE", "SAVE", "OPEN", + "'('", "')'", "','", "$accept", "start", "@1", "session", "command_line", + "command", "extract_command", "replace_command", "clear_command", + "delete_command", "addmod_command", "list_command", "save_command", + "open_command", "create_command", "addlib_command", "directory_command", + "optional_filename", "modulelist", "modulename", "optcomma", + "verbose_command", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 40, 41, 44 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 24, 26, 25, 27, 27, 28, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 41, 42, 42, 43, 43, + 44, 44, 45 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 2, 2, 0, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 2, 2, 1, 2, 2, 1, 1, + 2, 2, 3, 4, 1, 0, 3, 0, 3, 0, + 1, 0, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 2, 0, 5, 1, 0, 20, 42, 21, 0, 28, + 39, 25, 0, 39, 0, 19, 39, 39, 29, 0, + 4, 0, 15, 16, 12, 17, 13, 18, 14, 7, + 8, 11, 10, 9, 37, 27, 31, 26, 37, 23, + 24, 30, 6, 39, 32, 40, 0, 35, 41, 38, + 34, 33, 36 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 1, 2, 4, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 51, 44, 35, + 46, 33 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -14 +static const yytype_int8 yypact[] = +{ + -14, 1, -14, -14, 5, -14, -14, -14, 2, -14, + -14, -14, 21, -14, 22, -14, -14, -14, -14, 23, + -14, 26, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, 10, -3, -14, -3, 10, -3, + -3, -14, -14, -14, -14, -14, 27, 28, -1, -14, + -14, -14, -14 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -4, -13, + -14, -14 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -42 +static const yytype_int8 yytable[] = +{ + 37, 3, -41, 39, 40, -3, 5, 34, -22, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 45, 52, 45, 17, 18, 19, 36, 38, 41, 42, + 48, 43, 49, 50, 47 +}; + +static const yytype_uint8 yycheck[] = +{ + 13, 0, 5, 16, 17, 0, 1, 5, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 23, 22, 23, 18, 19, 20, 5, 5, 5, 3, + 43, 21, 5, 5, 38 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 25, 26, 0, 27, 1, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 18, 19, 20, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 45, 5, 43, 5, 43, 5, 43, + 43, 5, 3, 21, 42, 23, 44, 42, 43, 5, + 5, 41, 22 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 69 "arparse.y" + { prompt(); } + break; + + case 6: +#line 78 "arparse.y" + { prompt(); } + break; + + case 19: +#line 94 "arparse.y" + { ar_end(); return 0; } + break; + + case 21: +#line 96 "arparse.y" + { yyerror("foo"); } + break; + + case 23: +#line 103 "arparse.y" + { ar_extract((yyvsp[(2) - (2)].list)); } + break; + + case 24: +#line 108 "arparse.y" + { ar_replace((yyvsp[(2) - (2)].list)); } + break; + + case 25: +#line 113 "arparse.y" + { ar_clear(); } + break; + + case 26: +#line 118 "arparse.y" + { ar_delete((yyvsp[(2) - (2)].list)); } + break; + + case 27: +#line 122 "arparse.y" + { ar_addmod((yyvsp[(2) - (2)].list)); } + break; + + case 28: +#line 127 "arparse.y" + { ar_list(); } + break; + + case 29: +#line 132 "arparse.y" + { ar_save(); } + break; + + case 30: +#line 139 "arparse.y" + { ar_open((yyvsp[(2) - (2)].name),0); } + break; + + case 31: +#line 144 "arparse.y" + { ar_open((yyvsp[(2) - (2)].name),1); } + break; + + case 32: +#line 150 "arparse.y" + { ar_addlib((yyvsp[(2) - (3)].name),(yyvsp[(3) - (3)].list)); } + break; + + case 33: +#line 154 "arparse.y" + { ar_directory((yyvsp[(2) - (4)].name), (yyvsp[(3) - (4)].list), (yyvsp[(4) - (4)].name)); } + break; + + case 34: +#line 161 "arparse.y" + { (yyval.name) = (yyvsp[(1) - (1)].name); } + break; + + case 35: +#line 162 "arparse.y" + { (yyval.name) = 0; } + break; + + case 36: +#line 167 "arparse.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); } + break; + + case 37: +#line 169 "arparse.y" + { (yyval.list) = 0; } + break; + + case 38: +#line 174 "arparse.y" + { struct list *n = (struct list *) malloc(sizeof(struct list)); + n->next = (yyvsp[(1) - (3)].list); + n->name = (yyvsp[(3) - (3)].name); + (yyval.list) = n; + } + break; + + case 39: +#line 179 "arparse.y" + { (yyval.list) = 0; } + break; + + case 42: +#line 191 "arparse.y" + { verbose = !verbose; } + break; + + +/* Line 1267 of yacc.c. */ +#line 1546 "arparse.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 195 "arparse.y" + + +static int +yyerror (const char *x ATTRIBUTE_UNUSED) +{ + extern int linenumber; + + printf (_("Syntax error in archive script, line %d\n"), linenumber + 1); + return 0; +} + diff --git a/binutils/arparse.h b/binutils/arparse.h new file mode 100644 index 000000000..ec15109dd --- /dev/null +++ b/binutils/arparse.h @@ -0,0 +1,102 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NEWLINE = 258, + VERBOSE = 259, + FILENAME = 260, + ADDLIB = 261, + LIST = 262, + ADDMOD = 263, + CLEAR = 264, + CREATE = 265, + DELETE = 266, + DIRECTORY = 267, + END = 268, + EXTRACT = 269, + FULLDIR = 270, + HELP = 271, + QUIT = 272, + REPLACE = 273, + SAVE = 274, + OPEN = 275 + }; +#endif +/* Tokens. */ +#define NEWLINE 258 +#define VERBOSE 259 +#define FILENAME 260 +#define ADDLIB 261 +#define LIST 262 +#define ADDMOD 263 +#define CLEAR 264 +#define CREATE 265 +#define DELETE 266 +#define DIRECTORY 267 +#define END 268 +#define EXTRACT 269 +#define FULLDIR 270 +#define HELP 271 +#define QUIT 272 +#define REPLACE 273 +#define SAVE 274 +#define OPEN 275 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 38 "arparse.y" +{ + char *name; +struct list *list ; + +} +/* Line 1489 of yacc.c. */ +#line 95 "arparse.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/binutils/deflex.c b/binutils/deflex.c new file mode 100644 index 000000000..9f698926d --- /dev/null +++ b/binutils/deflex.c @@ -0,0 +1,2061 @@ + +#line 3 "deflex.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#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. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +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 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - 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). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +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 realloc() it to grow it, and should free() 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; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* 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 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* 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". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* 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 = 0; /* 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 (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (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 = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 41 +#define YY_END_OF_BUFFER 42 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[198] = + { 0, + 0, 0, 42, 41, 34, 36, 35, 33, 41, 28, + 41, 31, 40, 38, 27, 32, 37, 39, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 0, 29, 28, 0, 30, 31, 27, + 32, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 12, 6, 28, 7, + 28, 28, 28, 28, 28, 28, 28, 28, 1, 28, + + 28, 28, 16, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 17, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 14, 28, 28, 28, 19, 21, 28, 28, 28, + 28, 28, 28, 18, 9, 28, 10, 28, 28, 2, + 28, 28, 15, 28, 28, 28, 28, 11, 13, 28, + 5, 28, 28, 22, 28, 8, 28, 28, 28, 28, + 28, 28, 20, 4, 28, 28, 28, 24, 28, 26, + 28, 3, 28, 28, 23, 25, 0 + + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 5, 1, 6, 1, 7, 1, 1, 8, 1, + 1, 9, 1, 10, 7, 11, 12, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 7, 14, 1, + 15, 1, 7, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 7, 26, 27, 28, 29, 30, 31, + 7, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 1, 1, 1, 1, 7, 1, 22, 22, 22, 22, + + 22, 22, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 22, + 7, 7, 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, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[41] = + { 0, + 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, + 1, 4, 5, 1, 1, 4, 6, 6, 6, 6, + 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + } ; + +static yyconst flex_int16_t yy_base[205] = + { 0, + 0, 0, 229, 230, 230, 230, 230, 230, 222, 0, + 219, 0, 230, 230, 0, 0, 230, 0, 209, 195, + 24, 186, 202, 14, 197, 186, 27, 188, 198, 25, + 197, 196, 184, 209, 230, 0, 206, 230, 0, 0, + 0, 0, 180, 27, 178, 178, 27, 193, 178, 183, + 189, 179, 177, 175, 178, 185, 182, 183, 170, 181, + 165, 164, 170, 173, 172, 159, 174, 171, 170, 158, + 156, 156, 151, 152, 149, 161, 34, 145, 160, 145, + 146, 154, 157, 147, 141, 139, 0, 0, 138, 0, + 139, 135, 137, 135, 135, 29, 149, 140, 0, 136, + + 139, 145, 0, 136, 139, 132, 132, 30, 132, 135, + 138, 129, 119, 118, 126, 116, 122, 119, 115, 115, + 124, 127, 109, 112, 121, 119, 106, 111, 108, 106, + 0, 106, 103, 112, 99, 91, 97, 99, 95, 88, + 99, 0, 93, 103, 94, 0, 0, 97, 91, 87, + 90, 84, 83, 0, 0, 95, 0, 97, 80, 0, + 92, 91, 0, 78, 70, 91, 74, 0, 0, 82, + 0, 89, 88, 0, 84, 0, 82, 85, 83, 69, + 66, 56, 0, 0, 39, 36, 35, 0, 44, 0, + 43, 0, 40, 39, 0, 0, 230, 67, 71, 77, + + 83, 85, 91, 95 + } ; + +static yyconst flex_int16_t yy_def[205] = + { 0, + 197, 1, 197, 197, 197, 197, 197, 197, 198, 199, + 200, 201, 197, 197, 202, 203, 197, 204, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 198, 197, 199, 200, 197, 201, 202, + 203, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 199, 0, 197, 197, 197, + + 197, 197, 197, 197 + } ; + +static yyconst flex_int16_t yy_nxt[271] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 4, 15, 16, 17, 18, 10, 19, 20, 21, + 22, 10, 10, 23, 24, 10, 25, 26, 27, 10, + 28, 29, 30, 31, 10, 32, 33, 10, 10, 10, + 45, 49, 50, 53, 46, 57, 65, 69, 58, 59, + 100, 117, 128, 118, 129, 66, 54, 70, 60, 196, + 195, 194, 193, 192, 191, 190, 101, 34, 34, 34, + 34, 34, 34, 36, 36, 36, 36, 37, 37, 37, + 37, 37, 37, 39, 189, 39, 39, 39, 39, 40, + 40, 41, 188, 41, 41, 41, 41, 42, 187, 186, + + 42, 185, 184, 183, 182, 181, 180, 179, 178, 177, + 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, + 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, + 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, + 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, + 136, 135, 134, 133, 132, 131, 130, 127, 126, 125, + 124, 123, 122, 121, 120, 119, 116, 115, 114, 113, + 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, + 102, 99, 98, 97, 96, 95, 94, 93, 92, 91, + 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, + + 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, + 68, 67, 64, 38, 35, 63, 62, 61, 56, 55, + 52, 51, 48, 47, 44, 43, 38, 35, 197, 3, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197 + } ; + +static yyconst flex_int16_t yy_chk[271] = + { 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, + 21, 24, 24, 27, 21, 30, 44, 47, 30, 30, + 77, 96, 108, 96, 108, 44, 27, 47, 30, 194, + 193, 191, 189, 187, 186, 185, 77, 198, 198, 198, + 198, 198, 198, 199, 199, 199, 199, 200, 200, 200, + 200, 200, 200, 201, 182, 201, 201, 201, 201, 202, + 202, 203, 181, 203, 203, 203, 203, 204, 180, 179, + + 204, 178, 177, 175, 173, 172, 170, 167, 166, 165, + 164, 162, 161, 159, 158, 156, 153, 152, 151, 150, + 149, 148, 145, 144, 143, 141, 140, 139, 138, 137, + 136, 135, 134, 133, 132, 130, 129, 128, 127, 126, + 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, + 115, 114, 113, 112, 111, 110, 109, 107, 106, 105, + 104, 102, 101, 100, 98, 97, 95, 94, 93, 92, + 91, 89, 86, 85, 84, 83, 82, 81, 80, 79, + 78, 76, 75, 74, 73, 72, 71, 70, 69, 68, + 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, + + 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, + 46, 45, 43, 37, 34, 33, 32, 31, 29, 28, + 26, 25, 23, 22, 20, 19, 11, 9, 3, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* 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 "deflex.l" +#line 2 "deflex.l" + +/* Copyright 1995, 1997, 1998, 1999, 2002, 2003, 2004, 2005, 2007 + Free Software Foundation, Inc. + + This file is part of GNU Binutils. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + + +/* Contributed by Steve Chamberlain: sac@cygnus.com */ + +#define DONTDECLARE_MALLOC +#include "libiberty.h" +#include "defparse.h" +#include "dlltool.h" + +#define YY_NO_UNPUT + +int linenumber; + +#line 611 "deflex.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#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_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t 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 \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#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 + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* 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 + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 36 "deflex.l" + +#line 766 "deflex.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#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 ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + 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 >= 198 ) + 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] != 230 ); + +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 37 "deflex.l" +{ return NAME;} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 38 "deflex.l" +{ return LIBRARY;} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 39 "deflex.l" +{ return DESCRIPTION;} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 40 "deflex.l" +{ return STACKSIZE;} + YY_BREAK +case 5: +YY_RULE_SETUP +#line 41 "deflex.l" +{ return HEAPSIZE;} + YY_BREAK +case 6: +YY_RULE_SETUP +#line 42 "deflex.l" +{ return CODE;} + YY_BREAK +case 7: +YY_RULE_SETUP +#line 43 "deflex.l" +{ return DATA;} + YY_BREAK +case 8: +YY_RULE_SETUP +#line 44 "deflex.l" +{ return SECTIONS;} + YY_BREAK +case 9: +YY_RULE_SETUP +#line 45 "deflex.l" +{ return EXPORTS;} + YY_BREAK +case 10: +YY_RULE_SETUP +#line 46 "deflex.l" +{ return IMPORTS;} + YY_BREAK +case 11: +YY_RULE_SETUP +#line 47 "deflex.l" +{ return VERSIONK;} + YY_BREAK +case 12: +YY_RULE_SETUP +#line 48 "deflex.l" +{ return BASE;} + YY_BREAK +case 13: +YY_RULE_SETUP +#line 49 "deflex.l" +{ return CONSTANT; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 50 "deflex.l" +{ return NONAME; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 51 "deflex.l" +{ return PRIVATE; } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 52 "deflex.l" +{ return READ;} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 53 "deflex.l" +{ return WRITE;} + YY_BREAK +case 18: +YY_RULE_SETUP +#line 54 "deflex.l" +{ return EXECUTE;} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 55 "deflex.l" +{ return SHARED;} + YY_BREAK +case 20: +YY_RULE_SETUP +#line 56 "deflex.l" +{ return NONSHARED;} + YY_BREAK +case 21: +YY_RULE_SETUP +#line 57 "deflex.l" +{ return SINGLE;} + YY_BREAK +case 22: +YY_RULE_SETUP +#line 58 "deflex.l" +{ return MULTIPLE;} + YY_BREAK +case 23: +YY_RULE_SETUP +#line 59 "deflex.l" +{ return INITINSTANCE;} + YY_BREAK +case 24: +YY_RULE_SETUP +#line 60 "deflex.l" +{ return INITGLOBAL;} + YY_BREAK +case 25: +YY_RULE_SETUP +#line 61 "deflex.l" +{ return TERMINSTANCE;} + YY_BREAK +case 26: +YY_RULE_SETUP +#line 62 "deflex.l" +{ return TERMGLOBAL;} + YY_BREAK +case 27: +YY_RULE_SETUP +#line 64 "deflex.l" +{ yylval.number = strtol (yytext,0,0); + return NUMBER; } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 67 "deflex.l" +{ + yylval.id = xstrdup (yytext); + return ID; + } + YY_BREAK +case 29: +/* rule 29 can match eol */ +YY_RULE_SETUP +#line 72 "deflex.l" +{ + yylval.id = xstrdup (yytext+1); + yylval.id[yyleng-2] = 0; + return ID; + } + YY_BREAK +case 30: +/* rule 30 can match eol */ +YY_RULE_SETUP +#line 78 "deflex.l" +{ + yylval.id = xstrdup (yytext+1); + yylval.id[yyleng-2] = 0; + return ID; + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 83 "deflex.l" +{ } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 84 "deflex.l" +{ } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 85 "deflex.l" +{ } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 86 "deflex.l" +{ } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 87 "deflex.l" +{ } + YY_BREAK +case 36: +/* rule 36 can match eol */ +YY_RULE_SETUP +#line 88 "deflex.l" +{ linenumber ++ ;} + YY_BREAK +case 37: +YY_RULE_SETUP +#line 89 "deflex.l" +{ return '=';} + YY_BREAK +case 38: +YY_RULE_SETUP +#line 90 "deflex.l" +{ return '.';} + YY_BREAK +case 39: +YY_RULE_SETUP +#line 91 "deflex.l" +{ return '@';} + YY_BREAK +case 40: +YY_RULE_SETUP +#line 92 "deflex.l" +{ return ',';} + YY_BREAK +case 41: +YY_RULE_SETUP +#line 93 "deflex.l" +ECHO; + YY_BREAK +#line 1069 "deflex.c" +case YY_STATE_EOF(INITIAL): + 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_LVALUE->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_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->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 (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* 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. */ + yyrealloc((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_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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 (void) +{ + 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 >= 198 ) + 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 ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + 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 >= 198 ) + 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 == 197); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#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_LVALUE->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 ); + + /*FALLTHROUGH*/ + + 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 /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + 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_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = 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; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(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 *) yyalloc(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; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + 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( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + 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) yyalloc(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; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_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; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (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. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* 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 *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 93 "deflex.l" + + +#ifndef yywrap +/* Needed for lex, though not flex. */ +int yywrap(void) { return 1; } +#endif + diff --git a/binutils/defparse.c b/binutils/defparse.c new file mode 100644 index 000000000..0eb72e0b6 --- /dev/null +++ b/binutils/defparse.c @@ -0,0 +1,1943 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NAME = 258, + LIBRARY = 259, + DESCRIPTION = 260, + STACKSIZE = 261, + HEAPSIZE = 262, + CODE = 263, + DATA = 264, + SECTIONS = 265, + EXPORTS = 266, + IMPORTS = 267, + VERSIONK = 268, + BASE = 269, + CONSTANT = 270, + READ = 271, + WRITE = 272, + EXECUTE = 273, + SHARED = 274, + NONSHARED = 275, + NONAME = 276, + PRIVATE = 277, + SINGLE = 278, + MULTIPLE = 279, + INITINSTANCE = 280, + INITGLOBAL = 281, + TERMINSTANCE = 282, + TERMGLOBAL = 283, + ID = 284, + NUMBER = 285 + }; +#endif +/* Tokens. */ +#define NAME 258 +#define LIBRARY 259 +#define DESCRIPTION 260 +#define STACKSIZE 261 +#define HEAPSIZE 262 +#define CODE 263 +#define DATA 264 +#define SECTIONS 265 +#define EXPORTS 266 +#define IMPORTS 267 +#define VERSIONK 268 +#define BASE 269 +#define CONSTANT 270 +#define READ 271 +#define WRITE 272 +#define EXECUTE 273 +#define SHARED 274 +#define NONSHARED 275 +#define NONAME 276 +#define PRIVATE 277 +#define SINGLE 278 +#define MULTIPLE 279 +#define INITINSTANCE 280 +#define INITGLOBAL 281 +#define TERMINSTANCE 282 +#define TERMGLOBAL 283 +#define ID 284 +#define NUMBER 285 + + + + +/* Copy the first part of user declarations. */ +#line 1 "defparse.y" + /* defparse.y - parser for .def files */ + +/* Copyright 1995, 1997, 1998, 1999, 2001, 2004, 2007 + Free Software Foundation, Inc. + + This file is part of GNU Binutils. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "libiberty.h" +#include "dlltool.h" + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 29 "defparse.y" +{ + char *id; + int number; +} +/* Line 187 of yacc.c. */ +#line 189 "defparse.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 202 "defparse.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 38 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 114 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 35 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 23 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 68 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 98 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 285 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 33, 2, 31, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 32, 2, 2, 34, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 6, 8, 12, 17, 20, 23, 27, + 31, 34, 37, 40, 43, 46, 51, 52, 55, 63, + 66, 68, 76, 84, 90, 96, 102, 108, 112, 116, + 119, 121, 124, 128, 130, 132, 133, 136, 137, 139, + 141, 143, 145, 147, 149, 151, 153, 154, 156, 157, + 159, 160, 162, 163, 165, 169, 170, 173, 174, 177, + 182, 183, 187, 188, 189, 193, 195, 197, 199 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 36, 0, -1, 36, 37, -1, 37, -1, 3, 52, + 55, -1, 4, 52, 55, 56, -1, 11, 38, -1, + 5, 29, -1, 6, 30, 46, -1, 7, 30, 46, + -1, 8, 44, -1, 9, 44, -1, 10, 42, -1, + 12, 40, -1, 13, 30, -1, 13, 30, 31, 30, + -1, -1, 38, 39, -1, 29, 54, 53, 49, 48, + 50, 51, -1, 40, 41, -1, 41, -1, 29, 32, + 29, 31, 29, 31, 29, -1, 29, 32, 29, 31, + 29, 31, 30, -1, 29, 32, 29, 31, 29, -1, + 29, 32, 29, 31, 30, -1, 29, 31, 29, 31, + 29, -1, 29, 31, 29, 31, 30, -1, 29, 31, + 29, -1, 29, 31, 30, -1, 42, 43, -1, 43, + -1, 29, 44, -1, 44, 45, 47, -1, 47, -1, + 33, -1, -1, 33, 30, -1, -1, 16, -1, 17, + -1, 18, -1, 19, -1, 20, -1, 23, -1, 24, + -1, 15, -1, -1, 21, -1, -1, 9, -1, -1, + 22, -1, -1, 29, -1, 29, 31, 29, -1, -1, + 34, 30, -1, -1, 32, 29, -1, 32, 29, 31, + 29, -1, -1, 14, 32, 30, -1, -1, -1, 56, + 45, 57, -1, 25, -1, 26, -1, 27, -1, 28, + -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint8 yyrline[] = +{ + 0, 46, 46, 47, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 66, 68, 72, 76, + 77, 81, 82, 83, 84, 85, 86, 87, 88, 92, + 93, 97, 101, 102, 106, 107, 109, 110, 114, 115, + 116, 117, 118, 119, 120, 124, 125, 129, 130, 134, + 135, 139, 140, 143, 144, 150, 154, 155, 159, 160, + 166, 169, 170, 173, 175, 179, 180, 181, 182 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "NAME", "LIBRARY", "DESCRIPTION", + "STACKSIZE", "HEAPSIZE", "CODE", "DATA", "SECTIONS", "EXPORTS", + "IMPORTS", "VERSIONK", "BASE", "CONSTANT", "READ", "WRITE", "EXECUTE", + "SHARED", "NONSHARED", "NONAME", "PRIVATE", "SINGLE", "MULTIPLE", + "INITINSTANCE", "INITGLOBAL", "TERMINSTANCE", "TERMGLOBAL", "ID", + "NUMBER", "'.'", "'='", "','", "'@'", "$accept", "start", "command", + "explist", "expline", "implist", "impline", "seclist", "secline", + "attr_list", "opt_comma", "opt_number", "attr", "opt_CONSTANT", + "opt_NONAME", "opt_DATA", "opt_PRIVATE", "opt_name", "opt_ordinal", + "opt_equal_name", "opt_base", "option_list", "option", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 46, 61, 44, 64 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 35, 36, 36, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 38, 38, 39, 40, + 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, + 42, 43, 44, 44, 45, 45, 46, 46, 47, 47, + 47, 47, 47, 47, 47, 48, 48, 49, 49, 50, + 50, 51, 51, 52, 52, 52, 53, 53, 54, 54, + 54, 55, 55, 56, 56, 57, 57, 57, 57 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 2, 1, 3, 4, 2, 2, 3, 3, + 2, 2, 2, 2, 2, 4, 0, 2, 7, 2, + 1, 7, 7, 5, 5, 5, 5, 3, 3, 2, + 1, 2, 3, 1, 1, 0, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 3, 0, 2, 0, 2, 4, + 0, 3, 0, 0, 3, 1, 1, 1, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 0, 55, 55, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 3, 53, 62, 62, 7, 37, 37, + 38, 39, 40, 41, 42, 43, 44, 10, 33, 11, + 0, 12, 30, 6, 0, 13, 20, 14, 1, 2, + 0, 0, 4, 63, 0, 8, 9, 34, 0, 31, + 29, 60, 17, 0, 0, 19, 0, 54, 0, 5, + 36, 32, 0, 57, 27, 28, 0, 15, 61, 0, + 58, 0, 48, 0, 0, 65, 66, 67, 68, 64, + 0, 56, 47, 46, 25, 26, 23, 24, 59, 45, + 50, 0, 49, 52, 21, 22, 51, 18 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 12, 13, 33, 52, 35, 36, 31, 32, 27, + 48, 45, 28, 90, 83, 93, 97, 15, 72, 63, + 42, 59, 79 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -26 +static const yytype_int8 yypact[] = +{ + 32, -12, -12, 17, -8, 33, -4, -4, 35, -26, + 36, 37, 21, -26, 38, 48, 48, -26, 39, 39, + -26, -26, -26, -26, -26, -26, -26, -15, -26, -15, + -4, 35, -26, 41, -25, 36, -26, 40, -26, -26, + 44, 34, -26, -26, 45, -26, -26, -26, -4, -15, + -26, 42, -26, -19, 47, -26, 49, -26, 50, 22, + -26, -26, 52, 43, 51, -26, 53, -26, -26, 26, + 54, 56, 57, 27, 29, -26, -26, -26, -26, -26, + 58, -26, -26, 68, -26, -26, 59, -26, -26, -26, + 79, 31, -26, 46, -26, -26, -26, -26 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -26, -26, 77, -26, -26, -26, 60, -26, 61, -7, + 55, 72, 62, -26, -26, -26, -26, 91, -26, -26, + 78, -26, -26 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -36 +static const yytype_int8 yytable[] = +{ + 29, -35, -35, -35, -35, -35, 53, 54, -35, -35, + 64, 65, 20, 21, 22, 23, 24, 14, 47, 25, + 26, 38, 18, 49, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 17, -35, -35, -35, + -35, 75, 76, 77, 78, 47, 84, 85, 86, 87, + 94, 95, 41, 19, 30, 34, 58, 37, 96, 40, + 51, 56, 44, 57, 62, 60, 66, 71, 82, 67, + 68, 70, 73, 89, 74, 80, 81, 88, 92, 39, + 91, 46, 50, 16, 43, 55, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 0, 0, 69 +}; + +static const yytype_int8 yycheck[] = +{ + 7, 16, 17, 18, 19, 20, 31, 32, 23, 24, + 29, 30, 16, 17, 18, 19, 20, 29, 33, 23, + 24, 0, 30, 30, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 29, 25, 26, 27, + 28, 25, 26, 27, 28, 33, 29, 30, 29, 30, + 29, 30, 14, 30, 29, 29, 32, 30, 22, 31, + 29, 31, 33, 29, 32, 30, 29, 34, 21, 30, + 30, 29, 31, 15, 31, 31, 30, 29, 9, 12, + 31, 19, 31, 2, 16, 35, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 48, -1, -1, -1, 59 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 36, 37, 29, 52, 52, 29, 30, 30, + 16, 17, 18, 19, 20, 23, 24, 44, 47, 44, + 29, 42, 43, 38, 29, 40, 41, 30, 0, 37, + 31, 14, 55, 55, 33, 46, 46, 33, 45, 44, + 43, 29, 39, 31, 32, 41, 31, 29, 32, 56, + 30, 47, 32, 54, 29, 30, 29, 30, 30, 45, + 29, 34, 53, 31, 31, 25, 26, 27, 28, 57, + 31, 30, 21, 49, 29, 30, 29, 30, 29, 15, + 48, 31, 9, 50, 29, 30, 22, 51 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 4: +#line 51 "defparse.y" + { def_name ((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].number)); } + break; + + case 5: +#line 52 "defparse.y" + { def_library ((yyvsp[(2) - (4)].id), (yyvsp[(3) - (4)].number)); } + break; + + case 7: +#line 54 "defparse.y" + { def_description ((yyvsp[(2) - (2)].id));} + break; + + case 8: +#line 55 "defparse.y" + { def_stacksize ((yyvsp[(2) - (3)].number), (yyvsp[(3) - (3)].number));} + break; + + case 9: +#line 56 "defparse.y" + { def_heapsize ((yyvsp[(2) - (3)].number), (yyvsp[(3) - (3)].number));} + break; + + case 10: +#line 57 "defparse.y" + { def_code ((yyvsp[(2) - (2)].number));} + break; + + case 11: +#line 58 "defparse.y" + { def_data ((yyvsp[(2) - (2)].number));} + break; + + case 14: +#line 61 "defparse.y" + { def_version ((yyvsp[(2) - (2)].number),0);} + break; + + case 15: +#line 62 "defparse.y" + { def_version ((yyvsp[(2) - (4)].number),(yyvsp[(4) - (4)].number));} + break; + + case 18: +#line 73 "defparse.y" + { def_exports ((yyvsp[(1) - (7)].id), (yyvsp[(2) - (7)].id), (yyvsp[(3) - (7)].number), (yyvsp[(4) - (7)].number), (yyvsp[(5) - (7)].number), (yyvsp[(6) - (7)].number), (yyvsp[(7) - (7)].number));} + break; + + case 21: +#line 81 "defparse.y" + { def_import ((yyvsp[(1) - (7)].id),(yyvsp[(3) - (7)].id),(yyvsp[(5) - (7)].id),(yyvsp[(7) - (7)].id), 0); } + break; + + case 22: +#line 82 "defparse.y" + { def_import ((yyvsp[(1) - (7)].id),(yyvsp[(3) - (7)].id),(yyvsp[(5) - (7)].id), 0,(yyvsp[(7) - (7)].number)); } + break; + + case 23: +#line 83 "defparse.y" + { def_import ((yyvsp[(1) - (5)].id),(yyvsp[(3) - (5)].id), 0,(yyvsp[(5) - (5)].id), 0); } + break; + + case 24: +#line 84 "defparse.y" + { def_import ((yyvsp[(1) - (5)].id),(yyvsp[(3) - (5)].id), 0, 0,(yyvsp[(5) - (5)].number)); } + break; + + case 25: +#line 85 "defparse.y" + { def_import ( 0,(yyvsp[(1) - (5)].id),(yyvsp[(3) - (5)].id),(yyvsp[(5) - (5)].id), 0); } + break; + + case 26: +#line 86 "defparse.y" + { def_import ( 0,(yyvsp[(1) - (5)].id),(yyvsp[(3) - (5)].id), 0,(yyvsp[(5) - (5)].number)); } + break; + + case 27: +#line 87 "defparse.y" + { def_import ( 0,(yyvsp[(1) - (3)].id), 0,(yyvsp[(3) - (3)].id), 0); } + break; + + case 28: +#line 88 "defparse.y" + { def_import ( 0,(yyvsp[(1) - (3)].id), 0, 0,(yyvsp[(3) - (3)].number)); } + break; + + case 31: +#line 97 "defparse.y" + { def_section ((yyvsp[(1) - (2)].id),(yyvsp[(2) - (2)].number));} + break; + + case 36: +#line 109 "defparse.y" + { (yyval.number)=(yyvsp[(2) - (2)].number);} + break; + + case 37: +#line 110 "defparse.y" + { (yyval.number)=-1;} + break; + + case 38: +#line 114 "defparse.y" + { (yyval.number) = 1; } + break; + + case 39: +#line 115 "defparse.y" + { (yyval.number) = 2; } + break; + + case 40: +#line 116 "defparse.y" + { (yyval.number) = 4; } + break; + + case 41: +#line 117 "defparse.y" + { (yyval.number) = 8; } + break; + + case 42: +#line 118 "defparse.y" + { (yyval.number) = 0; } + break; + + case 43: +#line 119 "defparse.y" + { (yyval.number) = 0; } + break; + + case 44: +#line 120 "defparse.y" + { (yyval.number) = 0; } + break; + + case 45: +#line 124 "defparse.y" + {(yyval.number)=1;} + break; + + case 46: +#line 125 "defparse.y" + {(yyval.number)=0;} + break; + + case 47: +#line 129 "defparse.y" + {(yyval.number)=1;} + break; + + case 48: +#line 130 "defparse.y" + {(yyval.number)=0;} + break; + + case 49: +#line 134 "defparse.y" + { (yyval.number) = 1; } + break; + + case 50: +#line 135 "defparse.y" + { (yyval.number) = 0; } + break; + + case 51: +#line 139 "defparse.y" + { (yyval.number) = 1; } + break; + + case 52: +#line 140 "defparse.y" + { (yyval.number) = 0; } + break; + + case 53: +#line 143 "defparse.y" + { (yyval.id) =(yyvsp[(1) - (1)].id); } + break; + + case 54: +#line 145 "defparse.y" + { + char *name = xmalloc (strlen ((yyvsp[(1) - (3)].id)) + 1 + strlen ((yyvsp[(3) - (3)].id)) + 1); + sprintf (name, "%s.%s", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id)); + (yyval.id) = name; + } + break; + + case 55: +#line 150 "defparse.y" + { (yyval.id)=""; } + break; + + case 56: +#line 154 "defparse.y" + { (yyval.number)=(yyvsp[(2) - (2)].number);} + break; + + case 57: +#line 155 "defparse.y" + { (yyval.number)=-1;} + break; + + case 58: +#line 159 "defparse.y" + { (yyval.id) = (yyvsp[(2) - (2)].id); } + break; + + case 59: +#line 161 "defparse.y" + { + char *name = xmalloc (strlen ((yyvsp[(2) - (4)].id)) + 1 + strlen ((yyvsp[(4) - (4)].id)) + 1); + sprintf (name, "%s.%s", (yyvsp[(2) - (4)].id), (yyvsp[(4) - (4)].id)); + (yyval.id) = name; + } + break; + + case 60: +#line 166 "defparse.y" + { (yyval.id) = 0; } + break; + + case 61: +#line 169 "defparse.y" + { (yyval.number)= (yyvsp[(3) - (3)].number);} + break; + + case 62: +#line 170 "defparse.y" + { (yyval.number)=-1;} + break; + + +/* Line 1267 of yacc.c. */ +#line 1730 "defparse.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + + diff --git a/binutils/defparse.h b/binutils/defparse.h new file mode 100644 index 000000000..039b4b03d --- /dev/null +++ b/binutils/defparse.h @@ -0,0 +1,121 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NAME = 258, + LIBRARY = 259, + DESCRIPTION = 260, + STACKSIZE = 261, + HEAPSIZE = 262, + CODE = 263, + DATA = 264, + SECTIONS = 265, + EXPORTS = 266, + IMPORTS = 267, + VERSIONK = 268, + BASE = 269, + CONSTANT = 270, + READ = 271, + WRITE = 272, + EXECUTE = 273, + SHARED = 274, + NONSHARED = 275, + NONAME = 276, + PRIVATE = 277, + SINGLE = 278, + MULTIPLE = 279, + INITINSTANCE = 280, + INITGLOBAL = 281, + TERMINSTANCE = 282, + TERMGLOBAL = 283, + ID = 284, + NUMBER = 285 + }; +#endif +/* Tokens. */ +#define NAME 258 +#define LIBRARY 259 +#define DESCRIPTION 260 +#define STACKSIZE 261 +#define HEAPSIZE 262 +#define CODE 263 +#define DATA 264 +#define SECTIONS 265 +#define EXPORTS 266 +#define IMPORTS 267 +#define VERSIONK 268 +#define BASE 269 +#define CONSTANT 270 +#define READ 271 +#define WRITE 272 +#define EXECUTE 273 +#define SHARED 274 +#define NONSHARED 275 +#define NONAME 276 +#define PRIVATE 277 +#define SINGLE 278 +#define MULTIPLE 279 +#define INITINSTANCE 280 +#define INITGLOBAL 281 +#define TERMINSTANCE 282 +#define TERMGLOBAL 283 +#define ID 284 +#define NUMBER 285 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 29 "defparse.y" +{ + char *id; + int number; +} +/* Line 1489 of yacc.c. */ +#line 114 "defparse.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/binutils/doc/addr2line.1 b/binutils/doc/addr2line.1 new file mode 100644 index 000000000..761cff958 --- /dev/null +++ b/binutils/doc/addr2line.1 @@ -0,0 +1,265 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ADDR2LINE 1" +.TH ADDR2LINE 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +addr2line \- convert addresses into file names and line numbers. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +addr2line [\fB\-b\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR] + [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR]] + [\fB\-e\fR \fIfilename\fR|\fB\-\-exe=\fR\fIfilename\fR] + [\fB\-f\fR|\fB\-\-functions\fR] [\fB\-s\fR|\fB\-\-basename\fR] + [\fB\-i\fR|\fB\-\-inlines\fR] + [\fB\-j\fR|\fB\-\-section=\fR\fIname\fR] + [\fB\-H\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] + [addr addr ...] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBaddr2line\fR translates addresses into file names and line numbers. +Given an address in an executable or an offset in a section of a relocatable +object, it uses the debugging information to figure out which file name and +line number are associated with it. +.PP +The executable or relocatable object to use is specified with the \fB\-e\fR +option. The default is the file \fIa.out\fR. The section in the relocatable +object to use is specified with the \fB\-j\fR option. +.PP +\&\fBaddr2line\fR has two modes of operation. +.PP +In the first, hexadecimal addresses are specified on the command line, +and \fBaddr2line\fR displays the file name and line number for each +address. +.PP +In the second, \fBaddr2line\fR reads hexadecimal addresses from +standard input, and prints the file name and line number for each +address on standard output. In this mode, \fBaddr2line\fR may be used +in a pipe to convert dynamically chosen addresses. +.PP +The format of the output is \fB\s-1FILENAME:LINENO\s0\fR. The file name and +line number for each address is printed on a separate line. If the +\&\fB\-f\fR option is used, then each \fB\s-1FILENAME:LINENO\s0\fR line is +preceded by a \fB\s-1FUNCTIONNAME\s0\fR line which is the name of the function +containing the address. +.PP +If the file name or function name can not be determined, +\&\fBaddr2line\fR will print two question marks in their place. If the +line number can not be determined, \fBaddr2line\fR will print 0. +.SH "OPTIONS" +.IX Header "OPTIONS" +The long and short forms of options, shown here as alternatives, are +equivalent. +.IP "\fB\-b\fR \fIbfdname\fR" 4 +.IX Item "-b bfdname" +.PD 0 +.IP "\fB\-\-target=\fR\fIbfdname\fR" 4 +.IX Item "--target=bfdname" +.PD +Specify that the object-code format for the object files is +\&\fIbfdname\fR. +.IP "\fB\-C\fR" 4 +.IX Item "-C" +.PD 0 +.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4 +.IX Item "--demangle[=style]" +.PD +Decode (\fIdemangle\fR) low-level symbol names into user-level names. +Besides removing any initial underscore prepended by the system, this +makes \*(C+ function names readable. Different compilers have different +mangling styles. The optional demangling style argument can be used to +choose an appropriate demangling style for your compiler. +.IP "\fB\-e\fR \fIfilename\fR" 4 +.IX Item "-e filename" +.PD 0 +.IP "\fB\-\-exe=\fR\fIfilename\fR" 4 +.IX Item "--exe=filename" +.PD +Specify the name of the executable for which addresses should be +translated. The default file is \fIa.out\fR. +.IP "\fB\-f\fR" 4 +.IX Item "-f" +.PD 0 +.IP "\fB\-\-functions\fR" 4 +.IX Item "--functions" +.PD +Display function names as well as file and line number information. +.IP "\fB\-s\fR" 4 +.IX Item "-s" +.PD 0 +.IP "\fB\-\-basenames\fR" 4 +.IX Item "--basenames" +.PD +Display only the base of each file name. +.IP "\fB\-i\fR" 4 +.IX Item "-i" +.PD 0 +.IP "\fB\-\-inlines\fR" 4 +.IX Item "--inlines" +.PD +If the address belongs to a function that was inlined, the source +information for all enclosing scopes back to the first non-inlined +function will also be printed. For example, if \f(CW\*(C`main\*(C'\fR inlines +\&\f(CW\*(C`callee1\*(C'\fR which inlines \f(CW\*(C`callee2\*(C'\fR, and address is from +\&\f(CW\*(C`callee2\*(C'\fR, the source information for \f(CW\*(C`callee1\*(C'\fR and \f(CW\*(C`main\*(C'\fR +will also be printed. +.IP "\fB\-j\fR" 4 +.IX Item "-j" +.PD 0 +.IP "\fB\-\-section\fR" 4 +.IX Item "--section" +.PD +Read offsets relative to the specified section instead of absolute addresses. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/ar.1 b/binutils/doc/ar.1 new file mode 100644 index 000000000..4bd3ab2f5 --- /dev/null +++ b/binutils/doc/ar.1 @@ -0,0 +1,390 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "AR 1" +.TH AR 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +ar \- create, modify, and extract from archives +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +ar [\fB\-X32_64\fR] [\fB\-\fR]\fIp\fR[\fImod\fR [\fIrelpos\fR] [\fIcount\fR]] \fIarchive\fR [\fImember\fR...] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1GNU\s0 \fBar\fR program creates, modifies, and extracts from +archives. An \fIarchive\fR is a single file holding a collection of +other files in a structure that makes it possible to retrieve +the original individual files (called \fImembers\fR of the archive). +.PP +The original files' contents, mode (permissions), timestamp, owner, and +group are preserved in the archive, and can be restored on +extraction. +.PP +\&\s-1GNU\s0 \fBar\fR can maintain archives whose members have names of any +length; however, depending on how \fBar\fR is configured on your +system, a limit on member-name length may be imposed for compatibility +with archive formats maintained with other tools. If it exists, the +limit is often 15 characters (typical of formats related to a.out) or 16 +characters (typical of formats related to coff). +.PP +\&\fBar\fR is considered a binary utility because archives of this sort +are most often used as \fIlibraries\fR holding commonly needed +subroutines. +.PP +\&\fBar\fR creates an index to the symbols defined in relocatable +object modules in the archive when you specify the modifier \fBs\fR. +Once created, this index is updated in the archive whenever \fBar\fR +makes a change to its contents (save for the \fBq\fR update operation). +An archive with such an index speeds up linking to the library, and +allows routines in the library to call each other without regard to +their placement in the archive. +.PP +You may use \fBnm \-s\fR or \fBnm \-\-print\-armap\fR to list this index +table. If an archive lacks the table, another form of \fBar\fR called +\&\fBranlib\fR can be used to add just the table. +.PP +\&\s-1GNU\s0 \fBar\fR is designed to be compatible with two different +facilities. You can control its activity using command-line options, +like the different varieties of \fBar\fR on Unix systems; or, if you +specify the single command-line option \fB\-M\fR, you can control it +with a script supplied via standard input, like the \s-1MRI\s0 \*(L"librarian\*(R" +program. +.SH "OPTIONS" +.IX Header "OPTIONS" +\&\s-1GNU\s0 \fBar\fR allows you to mix the operation code \fIp\fR and modifier +flags \fImod\fR in any order, within the first command-line argument. +.PP +If you wish, you may begin the first command-line argument with a +dash. +.PP +The \fIp\fR keyletter specifies what operation to execute; it may be +any of the following, but you must specify only one of them: +.IP "\fBd\fR" 4 +.IX Item "d" +\&\fIDelete\fR modules from the archive. Specify the names of modules to +be deleted as \fImember\fR...; the archive is untouched if you +specify no files to delete. +.Sp +If you specify the \fBv\fR modifier, \fBar\fR lists each module +as it is deleted. +.IP "\fBm\fR" 4 +.IX Item "m" +Use this operation to \fImove\fR members in an archive. +.Sp +The ordering of members in an archive can make a difference in how +programs are linked using the library, if a symbol is defined in more +than one member. +.Sp +If no modifiers are used with \f(CW\*(C`m\*(C'\fR, any members you name in the +\&\fImember\fR arguments are moved to the \fIend\fR of the archive; +you can use the \fBa\fR, \fBb\fR, or \fBi\fR modifiers to move them to a +specified place instead. +.IP "\fBp\fR" 4 +.IX Item "p" +\&\fIPrint\fR the specified members of the archive, to the standard +output file. If the \fBv\fR modifier is specified, show the member +name before copying its contents to standard output. +.Sp +If you specify no \fImember\fR arguments, all the files in the archive are +printed. +.IP "\fBq\fR" 4 +.IX Item "q" +\&\fIQuick append\fR; Historically, add the files \fImember\fR... to the end of +\&\fIarchive\fR, without checking for replacement. +.Sp +The modifiers \fBa\fR, \fBb\fR, and \fBi\fR do \fInot\fR affect this +operation; new members are always placed at the end of the archive. +.Sp +The modifier \fBv\fR makes \fBar\fR list each file as it is appended. +.Sp +Since the point of this operation is speed, the archive's symbol table +index is not updated, even if it already existed; you can use \fBar s\fR or +\&\fBranlib\fR explicitly to update the symbol table index. +.Sp +However, too many different systems assume quick append rebuilds the +index, so \s-1GNU\s0 \fBar\fR implements \fBq\fR as a synonym for \fBr\fR. +.IP "\fBr\fR" 4 +.IX Item "r" +Insert the files \fImember\fR... into \fIarchive\fR (with +\&\fIreplacement\fR). This operation differs from \fBq\fR in that any +previously existing members are deleted if their names match those being +added. +.Sp +If one of the files named in \fImember\fR... does not exist, \fBar\fR +displays an error message, and leaves undisturbed any existing members +of the archive matching that name. +.Sp +By default, new members are added at the end of the file; but you may +use one of the modifiers \fBa\fR, \fBb\fR, or \fBi\fR to request +placement relative to some existing member. +.Sp +The modifier \fBv\fR used with this operation elicits a line of +output for each file inserted, along with one of the letters \fBa\fR or +\&\fBr\fR to indicate whether the file was appended (no old member +deleted) or replaced. +.IP "\fBt\fR" 4 +.IX Item "t" +Display a \fItable\fR listing the contents of \fIarchive\fR, or those +of the files listed in \fImember\fR... that are present in the +archive. Normally only the member name is shown; if you also want to +see the modes (permissions), timestamp, owner, group, and size, you can +request that by also specifying the \fBv\fR modifier. +.Sp +If you do not specify a \fImember\fR, all files in the archive +are listed. +.Sp +If there is more than one file with the same name (say, \fBfie\fR) in +an archive (say \fBb.a\fR), \fBar t b.a fie\fR lists only the +first instance; to see them all, you must ask for a complete +listing\-\-\-in our example, \fBar t b.a\fR. +.IP "\fBx\fR" 4 +.IX Item "x" +\&\fIExtract\fR members (named \fImember\fR) from the archive. You can +use the \fBv\fR modifier with this operation, to request that +\&\fBar\fR list each name as it extracts it. +.Sp +If you do not specify a \fImember\fR, all files in the archive +are extracted. +.PP +A number of modifiers (\fImod\fR) may immediately follow the \fIp\fR +keyletter, to specify variations on an operation's behavior: +.IP "\fBa\fR" 4 +.IX Item "a" +Add new files \fIafter\fR an existing member of the +archive. If you use the modifier \fBa\fR, the name of an existing archive +member must be present as the \fIrelpos\fR argument, before the +\&\fIarchive\fR specification. +.IP "\fBb\fR" 4 +.IX Item "b" +Add new files \fIbefore\fR an existing member of the +archive. If you use the modifier \fBb\fR, the name of an existing archive +member must be present as the \fIrelpos\fR argument, before the +\&\fIarchive\fR specification. (same as \fBi\fR). +.IP "\fBc\fR" 4 +.IX Item "c" +\&\fICreate\fR the archive. The specified \fIarchive\fR is always +created if it did not exist, when you request an update. But a warning is +issued unless you specify in advance that you expect to create it, by +using this modifier. +.IP "\fBf\fR" 4 +.IX Item "f" +Truncate names in the archive. \s-1GNU\s0 \fBar\fR will normally permit file +names of any length. This will cause it to create archives which are +not compatible with the native \fBar\fR program on some systems. If +this is a concern, the \fBf\fR modifier may be used to truncate file +names when putting them in the archive. +.IP "\fBi\fR" 4 +.IX Item "i" +Insert new files \fIbefore\fR an existing member of the +archive. If you use the modifier \fBi\fR, the name of an existing archive +member must be present as the \fIrelpos\fR argument, before the +\&\fIarchive\fR specification. (same as \fBb\fR). +.IP "\fBl\fR" 4 +.IX Item "l" +This modifier is accepted but not used. +.IP "\fBN\fR" 4 +.IX Item "N" +Uses the \fIcount\fR parameter. This is used if there are multiple +entries in the archive with the same name. Extract or delete instance +\&\fIcount\fR of the given name from the archive. +.IP "\fBo\fR" 4 +.IX Item "o" +Preserve the \fIoriginal\fR dates of members when extracting them. If +you do not specify this modifier, files extracted from the archive +are stamped with the time of extraction. +.IP "\fBP\fR" 4 +.IX Item "P" +Use the full path name when matching names in the archive. \s-1GNU\s0 +\&\fBar\fR can not create an archive with a full path name (such archives +are not \s-1POSIX\s0 complaint), but other archive creators can. This option +will cause \s-1GNU\s0 \fBar\fR to match file names using a complete path +name, which can be convenient when extracting a single file from an +archive created by another tool. +.IP "\fBs\fR" 4 +.IX Item "s" +Write an object-file index into the archive, or update an existing one, +even if no other change is made to the archive. You may use this modifier +flag either with any operation, or alone. Running \fBar s\fR on an +archive is equivalent to running \fBranlib\fR on it. +.IP "\fBS\fR" 4 +.IX Item "S" +Do not generate an archive symbol table. This can speed up building a +large library in several steps. The resulting archive can not be used +with the linker. In order to build a symbol table, you must omit the +\&\fBS\fR modifier on the last execution of \fBar\fR, or you must run +\&\fBranlib\fR on the archive. +.IP "\fBu\fR" 4 +.IX Item "u" +Normally, \fBar r\fR... inserts all files +listed into the archive. If you would like to insert \fIonly\fR those +of the files you list that are newer than existing members of the same +names, use this modifier. The \fBu\fR modifier is allowed only for the +operation \fBr\fR (replace). In particular, the combination \fBqu\fR is +not allowed, since checking the timestamps would lose any speed +advantage from the operation \fBq\fR. +.IP "\fBv\fR" 4 +.IX Item "v" +This modifier requests the \fIverbose\fR version of an operation. Many +operations display additional information, such as filenames processed, +when the modifier \fBv\fR is appended. +.IP "\fBV\fR" 4 +.IX Item "V" +This modifier shows the version number of \fBar\fR. +.PP +\&\fBar\fR ignores an initial option spelt \fB\-X32_64\fR, for +compatibility with \s-1AIX\s0. The behaviour produced by this option is the +default for \s-1GNU\s0 \fBar\fR. \fBar\fR does not support any of the other +\&\fB\-X\fR options; in particular, it does not support \fB\-X32\fR +which is the default for \s-1AIX\s0 \fBar\fR. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fInm\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/binutils.info b/binutils/doc/binutils.info new file mode 100644 index 000000000..d23604acd --- /dev/null +++ b/binutils/doc/binutils.info @@ -0,0 +1,4057 @@ +This is binutils.info, produced by makeinfo version 4.8 from +binutils.texi. + +START-INFO-DIR-ENTRY +* Binutils: (binutils). The GNU binary utilities. +* ar: (binutils)ar. Create, modify, and extract from archives +* nm: (binutils)nm. List symbols from object files +* objcopy: (binutils)objcopy. Copy and translate object files +* objdump: (binutils)objdump. Display information from object files +* ranlib: (binutils)ranlib. Generate index to archive contents +* readelf: (binutils)readelf. Display the contents of ELF format files. +* size: (binutils)size. List section sizes and total size +* strings: (binutils)strings. List printable strings from files +* strip: (binutils)strip. Discard symbols +* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols +* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt +* addr2line: (binutils)addr2line. Convert addresses to file and line +* nlmconv: (binutils)nlmconv. Converts object code into an NLM +* windres: (binutils)windres. Manipulate Windows resources +* windmc: (binutils)windmc. Generator for Windows message resources +* dlltool: (binutils)dlltool. Create files needed to build and use DLLs +END-INFO-DIR-ENTRY + + Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software +Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled "GNU +Free Documentation License". + + +File: binutils.info, Node: Top, Next: ar, Up: (dir) + +Introduction +************ + +This brief manual contains documentation for the GNU binary utilities +(GNU Binutils) version 2.17.90: + + This document is distributed under the terms of the GNU Free +Documentation License. A copy of the license is included in the +section entitled "GNU Free Documentation License". + +* Menu: + +* ar:: Create, modify, and extract from archives +* nm:: List symbols from object files +* objcopy:: Copy and translate object files +* objdump:: Display information from object files +* ranlib:: Generate index to archive contents +* readelf:: Display the contents of ELF format files. +* size:: List section sizes and total size +* strings:: List printable strings from files +* strip:: Discard symbols +* c++filt:: Filter to demangle encoded C++ symbols +* cxxfilt: c++filt. MS-DOS name for c++filt +* addr2line:: Convert addresses to file and line +* nlmconv:: Converts object code into an NLM +* windres:: Manipulate Windows resources +* windmc:: Generator for Windows message resources +* dlltool:: Create files needed to build and use DLLs +* Common Options:: Command-line options for all utilities +* Selecting The Target System:: How these utilities determine the target. +* Reporting Bugs:: Reporting Bugs +* GNU Free Documentation License:: GNU Free Documentation License +* Binutils Index:: Binutils Index + + +File: binutils.info, Node: ar, Next: nm, Prev: Top, Up: Top + +1 ar +**** + + ar [-]P[MOD [RELPOS] [COUNT]] ARCHIVE [MEMBER...] + ar -M [ '), and continues executing even after errors. If you +redirect standard input to a script file, no prompts are issued, and +`ar' abandons execution (with a nonzero exit code) on any error. + + The `ar' command language is _not_ designed to be equivalent to the +command-line options; in fact, it provides somewhat less control over +archives. The only purpose of the command language is to ease the +transition to GNU `ar' for developers who already have scripts written +for the MRI "librarian" program. + + The syntax for the `ar' command language is straightforward: + * commands are recognized in upper or lower case; for example, `LIST' + is the same as `list'. In the following descriptions, commands are + shown in upper case for clarity. + + * a single command may appear on each line; it is the first word on + the line. + + * empty lines are allowed, and have no effect. + + * comments are allowed; text after either of the characters `*' or + `;' is ignored. + + * Whenever you use a list of names as part of the argument to an `ar' + command, you can separate the individual names with either commas + or blanks. Commas are shown in the explanations below, for + clarity. + + * `+' is used as a line continuation character; if `+' appears at + the end of a line, the text on the following line is considered + part of the current command. + + Here are the commands you can use in `ar' scripts, or when using +`ar' interactively. Three of them have special significance: + + `OPEN' or `CREATE' specify a "current archive", which is a temporary +file required for most of the other commands. + + `SAVE' commits the changes so far specified by the script. Prior to +`SAVE', commands affect only the temporary copy of the current archive. + +`ADDLIB ARCHIVE' +`ADDLIB ARCHIVE (MODULE, MODULE, ... MODULE)' + Add all the contents of ARCHIVE (or, if specified, each named + MODULE from ARCHIVE) to the current archive. + + Requires prior use of `OPEN' or `CREATE'. + +`ADDMOD MEMBER, MEMBER, ... MEMBER' + Add each named MEMBER as a module in the current archive. + + Requires prior use of `OPEN' or `CREATE'. + +`CLEAR' + Discard the contents of the current archive, canceling the effect + of any operations since the last `SAVE'. May be executed (with no + effect) even if no current archive is specified. + +`CREATE ARCHIVE' + Creates an archive, and makes it the current archive (required for + many other commands). The new archive is created with a temporary + name; it is not actually saved as ARCHIVE until you use `SAVE'. + You can overwrite existing archives; similarly, the contents of any + existing file named ARCHIVE will not be destroyed until `SAVE'. + +`DELETE MODULE, MODULE, ... MODULE' + Delete each listed MODULE from the current archive; equivalent to + `ar -d ARCHIVE MODULE ... MODULE'. + + Requires prior use of `OPEN' or `CREATE'. + +`DIRECTORY ARCHIVE (MODULE, ... MODULE)' +`DIRECTORY ARCHIVE (MODULE, ... MODULE) OUTPUTFILE' + List each named MODULE present in ARCHIVE. The separate command + `VERBOSE' specifies the form of the output: when verbose output is + off, output is like that of `ar -t ARCHIVE MODULE...'. When + verbose output is on, the listing is like `ar -tv ARCHIVE + MODULE...'. + + Output normally goes to the standard output stream; however, if you + specify OUTPUTFILE as a final argument, `ar' directs the output to + that file. + +`END' + Exit from `ar', with a `0' exit code to indicate successful + completion. This command does not save the output file; if you + have changed the current archive since the last `SAVE' command, + those changes are lost. + +`EXTRACT MODULE, MODULE, ... MODULE' + Extract each named MODULE from the current archive, writing them + into the current directory as separate files. Equivalent to `ar -x + ARCHIVE MODULE...'. + + Requires prior use of `OPEN' or `CREATE'. + +`LIST' + Display full contents of the current archive, in "verbose" style + regardless of the state of `VERBOSE'. The effect is like `ar tv + ARCHIVE'. (This single command is a GNU `ar' enhancement, rather + than present for MRI compatibility.) + + Requires prior use of `OPEN' or `CREATE'. + +`OPEN ARCHIVE' + Opens an existing archive for use as the current archive (required + for many other commands). Any changes as the result of subsequent + commands will not actually affect ARCHIVE until you next use + `SAVE'. + +`REPLACE MODULE, MODULE, ... MODULE' + In the current archive, replace each existing MODULE (named in the + `REPLACE' arguments) from files in the current working directory. + To execute this command without errors, both the file, and the + module in the current archive, must exist. + + Requires prior use of `OPEN' or `CREATE'. + +`VERBOSE' + Toggle an internal flag governing the output from `DIRECTORY'. + When the flag is on, `DIRECTORY' output matches output from `ar + -tv '.... + +`SAVE' + Commit your changes to the current archive, and actually save it + as a file with the name specified in the last `CREATE' or `OPEN' + command. + + Requires prior use of `OPEN' or `CREATE'. + + + +File: binutils.info, Node: nm, Next: objcopy, Prev: ar, Up: Top + +2 nm +**** + + nm [`-a'|`--debug-syms'] [`-g'|`--extern-only'] + [`-B'] [`-C'|`--demangle'[=STYLE]] [`-D'|`--dynamic'] + [`-S'|`--print-size'] [`-s'|`--print-armap'] + [`-A'|`-o'|`--print-file-name'][`--special-syms'] + [`-n'|`-v'|`--numeric-sort'] [`-p'|`--no-sort'] + [`-r'|`--reverse-sort'] [`--size-sort'] [`-u'|`--undefined-only'] + [`-t' RADIX|`--radix='RADIX] [`-P'|`--portability'] + [`--target='BFDNAME] [`-f'FORMAT|`--format='FORMAT] + [`--defined-only'] [`-l'|`--line-numbers'] [`--no-demangle'] + [`-V'|`--version'] [`-X 32_64'] [`--help'] [OBJFILE...] + + GNU `nm' lists the symbols from object files OBJFILE.... If no +object files are listed as arguments, `nm' assumes the file `a.out'. + + For each symbol, `nm' shows: + + * The symbol value, in the radix selected by options (see below), or + hexadecimal by default. + + * The symbol type. At least the following types are used; others + are, as well, depending on the object file format. If lowercase, + the symbol is local; if uppercase, the symbol is global (external). + + `A' + The symbol's value is absolute, and will not be changed by + further linking. + + `B' + The symbol is in the uninitialized data section (known as + BSS). + + `C' + The symbol is common. Common symbols are uninitialized data. + When linking, multiple common symbols may appear with the + same name. If the symbol is defined anywhere, the common + symbols are treated as undefined references. For more + details on common symbols, see the discussion of -warn-common + in *Note Linker options: (ld.info)Options. + + `D' + The symbol is in the initialized data section. + + `G' + The symbol is in an initialized data section for small + objects. Some object file formats permit more efficient + access to small data objects, such as a global int variable + as opposed to a large global array. + + `I' + The symbol is an indirect reference to another symbol. This + is a GNU extension to the a.out object file format which is + rarely used. + + `N' + The symbol is a debugging symbol. + + `R' + The symbol is in a read only data section. + + `S' + The symbol is in an uninitialized data section for small + objects. + + `T' + The symbol is in the text (code) section. + + `U' + The symbol is undefined. + + `V' + The symbol is a weak object. When a weak defined symbol is + linked with a normal defined symbol, the normal defined + symbol is used with no error. When a weak undefined symbol + is linked and the symbol is not defined, the value of the + weak symbol becomes zero with no error. + + `W' + The symbol is a weak symbol that has not been specifically + tagged as a weak object symbol. When a weak defined symbol + is linked with a normal defined symbol, the normal defined + symbol is used with no error. When a weak undefined symbol + is linked and the symbol is not defined, the value of the + symbol is determined in a system-specific manner without + error. On some systems, uppercase indicates that a default + value has been specified. + + `-' + The symbol is a stabs symbol in an a.out object file. In + this case, the next values printed are the stabs other field, + the stabs desc field, and the stab type. Stabs symbols are + used to hold debugging information. For more information, + see *Note Stabs: (stabs.info)Top. + + `?' + The symbol type is unknown, or object file format specific. + + * The symbol name. + + The long and short forms of options, shown here as alternatives, are +equivalent. + +`-A' +`-o' +`--print-file-name' + Precede each symbol by the name of the input file (or archive + member) in which it was found, rather than identifying the input + file once only, before all of its symbols. + +`-a' +`--debug-syms' + Display all symbols, even debugger-only symbols; normally these + are not listed. + +`-B' + The same as `--format=bsd' (for compatibility with the MIPS `nm'). + +`-C' +`--demangle[=STYLE]' + Decode ("demangle") low-level symbol names into user-level names. + Besides removing any initial underscore prepended by the system, + this makes C++ function names readable. Different compilers have + different mangling styles. The optional demangling style argument + can be used to choose an appropriate demangling style for your + compiler. *Note c++filt::, for more information on demangling. + +`--no-demangle' + Do not demangle low-level symbol names. This is the default. + +`-D' +`--dynamic' + Display the dynamic symbols rather than the normal symbols. This + is only meaningful for dynamic objects, such as certain types of + shared libraries. + +`-f FORMAT' +`--format=FORMAT' + Use the output format FORMAT, which can be `bsd', `sysv', or + `posix'. The default is `bsd'. Only the first character of + FORMAT is significant; it can be either upper or lower case. + +`-g' +`--extern-only' + Display only external symbols. + +`-l' +`--line-numbers' + For each symbol, use debugging information to try to find a + filename and line number. For a defined symbol, look for the line + number of the address of the symbol. For an undefined symbol, + look for the line number of a relocation entry which refers to the + symbol. If line number information can be found, print it after + the other symbol information. + +`-n' +`-v' +`--numeric-sort' + Sort symbols numerically by their addresses, rather than + alphabetically by their names. + +`-p' +`--no-sort' + Do not bother to sort the symbols in any order; print them in the + order encountered. + +`-P' +`--portability' + Use the POSIX.2 standard output format instead of the default + format. Equivalent to `-f posix'. + +`-S' +`--print-size' + Print size, not the value, of defined symbols for the `bsd' output + format. + +`-s' +`--print-armap' + When listing symbols from archive members, include the index: a + mapping (stored in the archive by `ar' or `ranlib') of which + modules contain definitions for which names. + +`-r' +`--reverse-sort' + Reverse the order of the sort (whether numeric or alphabetic); let + the last come first. + +`--size-sort' + Sort symbols by size. The size is computed as the difference + between the value of the symbol and the value of the symbol with + the next higher value. If the `bsd' output format is used the + size of the symbol is printed, rather than the value, and `-S' + must be used in order both size and value to be printed. + +`--special-syms' + Display symbols which have a target-specific special meaning. + These symbols are usually used by the target for some special + processing and are not normally helpful when included included in + the normal symbol lists. For example for ARM targets this option + would skip the mapping symbols used to mark transitions between + ARM code, THUMB code and data. + +`-t RADIX' +`--radix=RADIX' + Use RADIX as the radix for printing the symbol values. It must be + `d' for decimal, `o' for octal, or `x' for hexadecimal. + +`--target=BFDNAME' + Specify an object code format other than your system's default + format. *Note Target Selection::, for more information. + +`-u' +`--undefined-only' + Display only undefined symbols (those external to each object + file). + +`--defined-only' + Display only defined symbols for each object file. + +`-V' +`--version' + Show the version number of `nm' and exit. + +`-X' + This option is ignored for compatibility with the AIX version of + `nm'. It takes one parameter which must be the string `32_64'. + The default mode of AIX `nm' corresponds to `-X 32', which is not + supported by GNU `nm'. + +`--help' + Show a summary of the options to `nm' and exit. + + +File: binutils.info, Node: objcopy, Next: objdump, Prev: nm, Up: Top + +3 objcopy +********* + + objcopy [`-F' BFDNAME|`--target='BFDNAME] + [`-I' BFDNAME|`--input-target='BFDNAME] + [`-O' BFDNAME|`--output-target='BFDNAME] + [`-B' BFDARCH|`--binary-architecture='BFDARCH] + [`-S'|`--strip-all'] + [`-g'|`--strip-debug'] + [`-K' SYMBOLNAME|`--keep-symbol='SYMBOLNAME] + [`-N' SYMBOLNAME|`--strip-symbol='SYMBOLNAME] + [`--strip-unneeded-symbol='SYMBOLNAME] + [`-G' SYMBOLNAME|`--keep-global-symbol='SYMBOLNAME] + [`--localize-hidden'] + [`-L' SYMBOLNAME|`--localize-symbol='SYMBOLNAME] + [`--globalize-symbol='SYMBOLNAME] + [`-W' SYMBOLNAME|`--weaken-symbol='SYMBOLNAME] + [`-w'|`--wildcard'] + [`-x'|`--discard-all'] + [`-X'|`--discard-locals'] + [`-b' BYTE|`--byte='BYTE] + [`-i' INTERLEAVE|`--interleave='INTERLEAVE] + [`-j' SECTIONNAME|`--only-section='SECTIONNAME] + [`-R' SECTIONNAME|`--remove-section='SECTIONNAME] + [`-p'|`--preserve-dates'] + [`--debugging'] + [`--gap-fill='VAL] + [`--pad-to='ADDRESS] + [`--set-start='VAL] + [`--adjust-start='INCR] + [`--change-addresses='INCR] + [`--change-section-address' SECTION{=,+,-}VAL] + [`--change-section-lma' SECTION{=,+,-}VAL] + [`--change-section-vma' SECTION{=,+,-}VAL] + [`--change-warnings'] [`--no-change-warnings'] + [`--set-section-flags' SECTION=FLAGS] + [`--add-section' SECTIONNAME=FILENAME] + [`--rename-section' OLDNAME=NEWNAME[,FLAGS]] + [`--change-leading-char'] [`--remove-leading-char'] + [`--reverse-bytes='NUM] + [`--srec-len='IVAL] [`--srec-forceS3'] + [`--redefine-sym' OLD=NEW] + [`--redefine-syms='FILENAME] + [`--weaken'] + [`--keep-symbols='FILENAME] + [`--strip-symbols='FILENAME] + [`--strip-unneeded-symbols='FILENAME] + [`--keep-global-symbols='FILENAME] + [`--localize-symbols='FILENAME] + [`--globalize-symbols='FILENAME] + [`--weaken-symbols='FILENAME] + [`--alt-machine-code='INDEX] + [`--prefix-symbols='STRING] + [`--prefix-sections='STRING] + [`--prefix-alloc-sections='STRING] + [`--add-gnu-debuglink='PATH-TO-FILE] + [`--keep-file-symbols'] + [`--only-keep-debug'] + [`--extract-symbol'] + [`--writable-text'] + [`--readonly-text'] + [`--pure'] + [`--impure'] + [`-v'|`--verbose'] + [`-V'|`--version'] + [`--help'] [`--info'] + INFILE [OUTFILE] + + The GNU `objcopy' utility copies the contents of an object file to +another. `objcopy' uses the GNU BFD Library to read and write the +object files. It can write the destination object file in a format +different from that of the source object file. The exact behavior of +`objcopy' is controlled by command-line options. Note that `objcopy' +should be able to copy a fully linked file between any two formats. +However, copying a relocatable object file between any two formats may +not work as expected. + + `objcopy' creates temporary files to do its translations and deletes +them afterward. `objcopy' uses BFD to do all its translation work; it +has access to all the formats described in BFD and thus is able to +recognize most formats without being told explicitly. *Note BFD: +(ld.info)BFD. + + `objcopy' can be used to generate S-records by using an output +target of `srec' (e.g., use `-O srec'). + + `objcopy' can be used to generate a raw binary file by using an +output target of `binary' (e.g., use `-O binary'). When `objcopy' +generates a raw binary file, it will essentially produce a memory dump +of the contents of the input object file. All symbols and relocation +information will be discarded. The memory dump will start at the load +address of the lowest section copied into the output file. + + When generating an S-record or a raw binary file, it may be helpful +to use `-S' to remove sections containing debugging information. In +some cases `-R' will be useful to remove sections which contain +information that is not needed by the binary file. + + Note--`objcopy' is not able to change the endianness of its input +files. If the input format has an endianness (some formats do not), +`objcopy' can only copy the inputs into file formats that have the same +endianness or which have no endianness (e.g., `srec'). (However, see +the `--reverse-bytes' option.) + +`INFILE' +`OUTFILE' + The input and output files, respectively. If you do not specify + OUTFILE, `objcopy' creates a temporary file and destructively + renames the result with the name of INFILE. + +`-I BFDNAME' +`--input-target=BFDNAME' + Consider the source file's object format to be BFDNAME, rather than + attempting to deduce it. *Note Target Selection::, for more + information. + +`-O BFDNAME' +`--output-target=BFDNAME' + Write the output file using the object format BFDNAME. *Note + Target Selection::, for more information. + +`-F BFDNAME' +`--target=BFDNAME' + Use BFDNAME as the object format for both the input and the output + file; i.e., simply transfer data from source to destination with no + translation. *Note Target Selection::, for more information. + +`-B BFDARCH' +`--binary-architecture=BFDARCH' + Useful when transforming a raw binary input file into an object + file. In this case the output architecture can be set to BFDARCH. + This option will be ignored if the input file has a known BFDARCH. + You can access this binary data inside a program by referencing + the special symbols that are created by the conversion process. + These symbols are called _binary_OBJFILE_start, + _binary_OBJFILE_end and _binary_OBJFILE_size. e.g. you can + transform a picture file into an object file and then access it in + your code using these symbols. + +`-j SECTIONNAME' +`--only-section=SECTIONNAME' + Copy only the named section from the input file to the output file. + This option may be given more than once. Note that using this + option inappropriately may make the output file unusable. + +`-R SECTIONNAME' +`--remove-section=SECTIONNAME' + Remove any section named SECTIONNAME from the output file. This + option may be given more than once. Note that using this option + inappropriately may make the output file unusable. + +`-S' +`--strip-all' + Do not copy relocation and symbol information from the source file. + +`-g' +`--strip-debug' + Do not copy debugging symbols or sections from the source file. + +`--strip-unneeded' + Strip all symbols that are not needed for relocation processing. + +`-K SYMBOLNAME' +`--keep-symbol=SYMBOLNAME' + When stripping symbols, keep symbol SYMBOLNAME even if it would + normally be stripped. This option may be given more than once. + +`-N SYMBOLNAME' +`--strip-symbol=SYMBOLNAME' + Do not copy symbol SYMBOLNAME from the source file. This option + may be given more than once. + +`--strip-unneeded-symbol=SYMBOLNAME' + Do not copy symbol SYMBOLNAME from the source file unless it is + needed by a relocation. This option may be given more than once. + +`-G SYMBOLNAME' +`--keep-global-symbol=SYMBOLNAME' + Keep only symbol SYMBOLNAME global. Make all other symbols local + to the file, so that they are not visible externally. This option + may be given more than once. + +`--localize-hidden' + In an ELF object, mark all symbols that have hidden or internal + visibility as local. This option applies on top of + symbol-specific localization options such as `-L'. + +`-L SYMBOLNAME' +`--localize-symbol=SYMBOLNAME' + Make symbol SYMBOLNAME local to the file, so that it is not + visible externally. This option may be given more than once. + +`-W SYMBOLNAME' +`--weaken-symbol=SYMBOLNAME' + Make symbol SYMBOLNAME weak. This option may be given more than + once. + +`--globalize-symbol=SYMBOLNAME' + Give symbol SYMBOLNAME global scoping so that it is visible + outside of the file in which it is defined. This option may be + given more than once. + +`-w' +`--wildcard' + Permit regular expressions in SYMBOLNAMEs used in other command + line options. The question mark (?), asterisk (*), backslash (\) + and square brackets ([]) operators can be used anywhere in the + symbol name. If the first character of the symbol name is the + exclamation point (!) then the sense of the switch is reversed for + that symbol. For example: + + -w -W !foo -W fo* + + would cause objcopy to weaken all symbols that start with "fo" + except for the symbol "foo". + +`-x' +`--discard-all' + Do not copy non-global symbols from the source file. + +`-X' +`--discard-locals' + Do not copy compiler-generated local symbols. (These usually + start with `L' or `.'.) + +`-b BYTE' +`--byte=BYTE' + Keep only every BYTEth byte of the input file (header data is not + affected). BYTE can be in the range from 0 to INTERLEAVE-1, where + INTERLEAVE is given by the `-i' or `--interleave' option, or the + default of 4. This option is useful for creating files to program + ROM. It is typically used with an `srec' output target. + +`-i INTERLEAVE' +`--interleave=INTERLEAVE' + Only copy one out of every INTERLEAVE bytes. Select which byte to + copy with the `-b' or `--byte' option. The default is 4. + `objcopy' ignores this option if you do not specify either `-b' or + `--byte'. + +`-p' +`--preserve-dates' + Set the access and modification dates of the output file to be the + same as those of the input file. + +`--debugging' + Convert debugging information, if possible. This is not the + default because only certain debugging formats are supported, and + the conversion process can be time consuming. + +`--gap-fill VAL' + Fill gaps between sections with VAL. This operation applies to + the _load address_ (LMA) of the sections. It is done by increasing + the size of the section with the lower address, and filling in the + extra space created with VAL. + +`--pad-to ADDRESS' + Pad the output file up to the load address ADDRESS. This is done + by increasing the size of the last section. The extra space is + filled in with the value specified by `--gap-fill' (default zero). + +`--set-start VAL' + Set the start address of the new file to VAL. Not all object file + formats support setting the start address. + +`--change-start INCR' +`--adjust-start INCR' + Change the start address by adding INCR. Not all object file + formats support setting the start address. + +`--change-addresses INCR' +`--adjust-vma INCR' + Change the VMA and LMA addresses of all sections, as well as the + start address, by adding INCR. Some object file formats do not + permit section addresses to be changed arbitrarily. Note that + this does not relocate the sections; if the program expects + sections to be loaded at a certain address, and this option is + used to change the sections such that they are loaded at a + different address, the program may fail. + +`--change-section-address SECTION{=,+,-}VAL' +`--adjust-section-vma SECTION{=,+,-}VAL' + Set or change both the VMA address and the LMA address of the named + SECTION. If `=' is used, the section address is set to VAL. + Otherwise, VAL is added to or subtracted from the section address. + See the comments under `--change-addresses', above. If SECTION + does not exist in the input file, a warning will be issued, unless + `--no-change-warnings' is used. + +`--change-section-lma SECTION{=,+,-}VAL' + Set or change the LMA address of the named SECTION. The LMA + address is the address where the section will be loaded into + memory at program load time. Normally this is the same as the VMA + address, which is the address of the section at program run time, + but on some systems, especially those where a program is held in + ROM, the two can be different. If `=' is used, the section + address is set to VAL. Otherwise, VAL is added to or subtracted + from the section address. See the comments under + `--change-addresses', above. If SECTION does not exist in the + input file, a warning will be issued, unless + `--no-change-warnings' is used. + +`--change-section-vma SECTION{=,+,-}VAL' + Set or change the VMA address of the named SECTION. The VMA + address is the address where the section will be located once the + program has started executing. Normally this is the same as the + LMA address, which is the address where the section will be loaded + into memory, but on some systems, especially those where a program + is held in ROM, the two can be different. If `=' is used, the + section address is set to VAL. Otherwise, VAL is added to or + subtracted from the section address. See the comments under + `--change-addresses', above. If SECTION does not exist in the + input file, a warning will be issued, unless + `--no-change-warnings' is used. + +`--change-warnings' +`--adjust-warnings' + If `--change-section-address' or `--change-section-lma' or + `--change-section-vma' is used, and the named section does not + exist, issue a warning. This is the default. + +`--no-change-warnings' +`--no-adjust-warnings' + Do not issue a warning if `--change-section-address' or + `--adjust-section-lma' or `--adjust-section-vma' is used, even if + the named section does not exist. + +`--set-section-flags SECTION=FLAGS' + Set the flags for the named section. The FLAGS argument is a + comma separated string of flag names. The recognized names are + `alloc', `contents', `load', `noload', `readonly', `code', `data', + `rom', `share', and `debug'. You can set the `contents' flag for + a section which does not have contents, but it is not meaningful + to clear the `contents' flag of a section which does have + contents-just remove the section instead. Not all flags are + meaningful for all object file formats. + +`--add-section SECTIONNAME=FILENAME' + Add a new section named SECTIONNAME while copying the file. The + contents of the new section are taken from the file FILENAME. The + size of the section will be the size of the file. This option only + works on file formats which can support sections with arbitrary + names. + +`--rename-section OLDNAME=NEWNAME[,FLAGS]' + Rename a section from OLDNAME to NEWNAME, optionally changing the + section's flags to FLAGS in the process. This has the advantage + over usng a linker script to perform the rename in that the output + stays as an object file and does not become a linked executable. + + This option is particularly helpful when the input format is + binary, since this will always create a section called .data. If + for example, you wanted instead to create a section called .rodata + containing binary data you could use the following command line to + achieve it: + + objcopy -I binary -O -B \ + --rename-section .data=.rodata,alloc,load,readonly,data,contents \ + + +`--change-leading-char' + Some object file formats use special characters at the start of + symbols. The most common such character is underscore, which + compilers often add before every symbol. This option tells + `objcopy' to change the leading character of every symbol when it + converts between object file formats. If the object file formats + use the same leading character, this option has no effect. + Otherwise, it will add a character, or remove a character, or + change a character, as appropriate. + +`--remove-leading-char' + If the first character of a global symbol is a special symbol + leading character used by the object file format, remove the + character. The most common symbol leading character is + underscore. This option will remove a leading underscore from all + global symbols. This can be useful if you want to link together + objects of different file formats with different conventions for + symbol names. This is different from `--change-leading-char' + because it always changes the symbol name when appropriate, + regardless of the object file format of the output file. + +`--reverse-bytes=NUM' + Reverse the bytes in a section with output contents. A section + length must be evenly divisible by the value given in order for + the swap to be able to take place. Reversing takes place before + the interleaving is performed. + + This option is used typically in generating ROM images for + problematic target systems. For example, on some target boards, + the 32-bit words fetched from 8-bit ROMs are re-assembled in + little-endian byte order regardless of the CPU byte order. + Depending on the programming model, the endianness of the ROM may + need to be modified. + + Consider a simple file with a section containing the following + eight bytes: `12345678'. + + Using `--reverse-bytes=2' for the above example, the bytes in the + output file would be ordered `21436587'. + + Using `--reverse-bytes=4' for the above example, the bytes in the + output file would be ordered `43218765'. + + By using `--reverse-bytes=2' for the above example, followed by + `--reverse-bytes=4' on the output file, the bytes in the second + output file would be ordered `34127856'. + +`--srec-len=IVAL' + Meaningful only for srec output. Set the maximum length of the + Srecords being produced to IVAL. This length covers both address, + data and crc fields. + +`--srec-forceS3' + Meaningful only for srec output. Avoid generation of S1/S2 + records, creating S3-only record format. + +`--redefine-sym OLD=NEW' + Change the name of a symbol OLD, to NEW. This can be useful when + one is trying link two things together for which you have no + source, and there are name collisions. + +`--redefine-syms=FILENAME' + Apply `--redefine-sym' to each symbol pair "OLD NEW" listed in the + file FILENAME. FILENAME is simply a flat file, with one symbol + pair per line. Line comments may be introduced by the hash + character. This option may be given more than once. + +`--weaken' + Change all global symbols in the file to be weak. This can be + useful when building an object which will be linked against other + objects using the `-R' option to the linker. This option is only + effective when using an object file format which supports weak + symbols. + +`--keep-symbols=FILENAME' + Apply `--keep-symbol' option to each symbol listed in the file + FILENAME. FILENAME is simply a flat file, with one symbol name + per line. Line comments may be introduced by the hash character. + This option may be given more than once. + +`--strip-symbols=FILENAME' + Apply `--strip-symbol' option to each symbol listed in the file + FILENAME. FILENAME is simply a flat file, with one symbol name + per line. Line comments may be introduced by the hash character. + This option may be given more than once. + +`--strip-unneeded-symbols=FILENAME' + Apply `--strip-unneeded-symbol' option to each symbol listed in + the file FILENAME. FILENAME is simply a flat file, with one + symbol name per line. Line comments may be introduced by the hash + character. This option may be given more than once. + +`--keep-global-symbols=FILENAME' + Apply `--keep-global-symbol' option to each symbol listed in the + file FILENAME. FILENAME is simply a flat file, with one symbol + name per line. Line comments may be introduced by the hash + character. This option may be given more than once. + +`--localize-symbols=FILENAME' + Apply `--localize-symbol' option to each symbol listed in the file + FILENAME. FILENAME is simply a flat file, with one symbol name + per line. Line comments may be introduced by the hash character. + This option may be given more than once. + +`--globalize-symbols=FILENAME' + Apply `--globalize-symbol' option to each symbol listed in the file + FILENAME. FILENAME is simply a flat file, with one symbol name + per line. Line comments may be introduced by the hash character. + This option may be given more than once. + +`--weaken-symbols=FILENAME' + Apply `--weaken-symbol' option to each symbol listed in the file + FILENAME. FILENAME is simply a flat file, with one symbol name + per line. Line comments may be introduced by the hash character. + This option may be given more than once. + +`--alt-machine-code=INDEX' + If the output architecture has alternate machine codes, use the + INDEXth code instead of the default one. This is useful in case a + machine is assigned an official code and the tool-chain adopts the + new code, but other applications still depend on the original code + being used. For ELF based architectures if the INDEX alternative + does not exist then the value is treated as an absolute number to + be stored in the e_machine field of the ELF header. + +`--writable-text' + Mark the output text as writable. This option isn't meaningful + for all object file formats. + +`--readonly-text' + Make the output text write protected. This option isn't + meaningful for all object file formats. + +`--pure' + Mark the output file as demand paged. This option isn't + meaningful for all object file formats. + +`--impure' + Mark the output file as impure. This option isn't meaningful for + all object file formats. + +`--prefix-symbols=STRING' + Prefix all symbols in the output file with STRING. + +`--prefix-sections=STRING' + Prefix all section names in the output file with STRING. + +`--prefix-alloc-sections=STRING' + Prefix all the names of all allocated sections in the output file + with STRING. + +`--add-gnu-debuglink=PATH-TO-FILE' + Creates a .gnu_debuglink section which contains a reference to + PATH-TO-FILE and adds it to the output file. + +`--keep-file-symbols' + When stripping a file, perhaps with `--strip-debug' or + `--strip-unneeded', retain any symbols specifying source file + names, which would otherwise get stripped. + +`--only-keep-debug' + Strip a file, removing contents of any sections that would not be + stripped by `--strip-debug' and leaving the debugging sections + intact. In ELF files, this preserves all note sections in the + output. + + The intention is that this option will be used in conjunction with + `--add-gnu-debuglink' to create a two part executable. One a + stripped binary which will occupy less space in RAM and in a + distribution and the second a debugging information file which is + only needed if debugging abilities are required. The suggested + procedure to create these files is as follows: + + 1. Link the executable as normal. Assuming that is is called + `foo' then... + + 2. Run `objcopy --only-keep-debug foo foo.dbg' to create a file + containing the debugging info. + + 3. Run `objcopy --strip-debug foo' to create a stripped + executable. + + 4. Run `objcopy --add-gnu-debuglink=foo.dbg foo' to add a link + to the debugging info into the stripped executable. + + Note - the choice of `.dbg' as an extension for the debug info + file is arbitrary. Also the `--only-keep-debug' step is optional. + You could instead do this: + + 1. Link the executable as normal. + + 2. Copy `foo' to `foo.full' + + 3. Run `objcopy --strip-debug foo' + + 4. Run `objcopy --add-gnu-debuglink=foo.full foo' + + i.e., the file pointed to by the `--add-gnu-debuglink' can be the + full executable. It does not have to be a file created by the + `--only-keep-debug' switch. + + Note - this switch is only intended for use on fully linked files. + It does not make sense to use it on object files where the + debugging information may be incomplete. Besides the + gnu_debuglink feature currently only supports the presence of one + filename containing debugging information, not multiple filenames + on a one-per-object-file basis. + +`--extract-symbol' + Keep the file's section flags and symbols but remove all section + data. Specifically, the option: + + * sets the virtual and load addresses of every section to zero; + + * removes the contents of all sections; + + * sets the size of every section to zero; and + + * sets the file's start address to zero. + + This option is used to build a `.sym' file for a VxWorks kernel. + It can also be a useful way of reducing the size of a + `--just-symbols' linker input file. + +`-V' +`--version' + Show the version number of `objcopy'. + +`-v' +`--verbose' + Verbose output: list all object files modified. In the case of + archives, `objcopy -V' lists all members of the archive. + +`--help' + Show a summary of the options to `objcopy'. + +`--info' + Display a list showing all architectures and object formats + available. + + +File: binutils.info, Node: objdump, Next: ranlib, Prev: objcopy, Up: Top + +4 objdump +********* + + objdump [`-a'|`--archive-headers'] + [`-b' BFDNAME|`--target=BFDNAME'] + [`-C'|`--demangle'[=STYLE] ] + [`-d'|`--disassemble'] + [`-D'|`--disassemble-all'] + [`-z'|`--disassemble-zeroes'] + [`-EB'|`-EL'|`--endian='{big | little }] + [`-f'|`--file-headers'] + [`--file-start-context'] + [`-g'|`--debugging'] + [`-e'|`--debugging-tags'] + [`-h'|`--section-headers'|`--headers'] + [`-i'|`--info'] + [`-j' SECTION|`--section='SECTION] + [`-l'|`--line-numbers'] + [`-S'|`--source'] + [`-m' MACHINE|`--architecture='MACHINE] + [`-M' OPTIONS|`--disassembler-options='OPTIONS] + [`-p'|`--private-headers'] + [`-r'|`--reloc'] + [`-R'|`--dynamic-reloc'] + [`-s'|`--full-contents'] + [`-W'|`--dwarf'] + [`-G'|`--stabs'] + [`-t'|`--syms'] + [`-T'|`--dynamic-syms'] + [`-x'|`--all-headers'] + [`-w'|`--wide'] + [`--start-address='ADDRESS] + [`--stop-address='ADDRESS] + [`--prefix-addresses'] + [`--[no-]show-raw-insn'] + [`--adjust-vma='OFFSET] + [`--special-syms'] + [`-V'|`--version'] + [`-H'|`--help'] + OBJFILE... + + `objdump' displays information about one or more object files. The +options control what particular information to display. This +information is mostly useful to programmers who are working on the +compilation tools, as opposed to programmers who just want their +program to compile and work. + + OBJFILE... are the object files to be examined. When you specify +archives, `objdump' shows information on each of the member object +files. + + The long and short forms of options, shown here as alternatives, are +equivalent. At least one option from the list +`-a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-r,-R,-s,-S,-t,-T,-V,-x' must be given. + +`-a' +`--archive-header' + If any of the OBJFILE files are archives, display the archive + header information (in a format similar to `ls -l'). Besides the + information you could list with `ar tv', `objdump -a' shows the + object file format of each archive member. + +`--adjust-vma=OFFSET' + When dumping information, first add OFFSET to all the section + addresses. This is useful if the section addresses do not + correspond to the symbol table, which can happen when putting + sections at particular addresses when using a format which can not + represent section addresses, such as a.out. + +`-b BFDNAME' +`--target=BFDNAME' + Specify that the object-code format for the object files is + BFDNAME. This option may not be necessary; OBJDUMP can + automatically recognize many formats. + + For example, + objdump -b oasys -m vax -h fu.o + displays summary information from the section headers (`-h') of + `fu.o', which is explicitly identified (`-m') as a VAX object file + in the format produced by Oasys compilers. You can list the + formats available with the `-i' option. *Note Target Selection::, + for more information. + +`-C' +`--demangle[=STYLE]' + Decode ("demangle") low-level symbol names into user-level names. + Besides removing any initial underscore prepended by the system, + this makes C++ function names readable. Different compilers have + different mangling styles. The optional demangling style argument + can be used to choose an appropriate demangling style for your + compiler. *Note c++filt::, for more information on demangling. + +`-g' +`--debugging' + Display debugging information. This attempts to parse debugging + information stored in the file and print it out using a C like + syntax. Only certain types of debugging information have been + implemented. Some other types are supported by `readelf -w'. + *Note readelf::. + +`-e' +`--debugging-tags' + Like `-g', but the information is generated in a format compatible + with ctags tool. + +`-d' +`--disassemble' + Display the assembler mnemonics for the machine instructions from + OBJFILE. This option only disassembles those sections which are + expected to contain instructions. + +`-D' +`--disassemble-all' + Like `-d', but disassemble the contents of all sections, not just + those expected to contain instructions. + +`--prefix-addresses' + When disassembling, print the complete address on each line. This + is the older disassembly format. + +`-EB' +`-EL' +`--endian={big|little}' + Specify the endianness of the object files. This only affects + disassembly. This can be useful when disassembling a file format + which does not describe endianness information, such as S-records. + +`-f' +`--file-headers' + Display summary information from the overall header of each of the + OBJFILE files. + +`--file-start-context' + Specify that when displaying interlisted source code/disassembly + (assumes `-S') from a file that has not yet been displayed, extend + the context to the start of the file. + +`-h' +`--section-headers' +`--headers' + Display summary information from the section headers of the object + file. + + File segments may be relocated to nonstandard addresses, for + example by using the `-Ttext', `-Tdata', or `-Tbss' options to + `ld'. However, some object file formats, such as a.out, do not + store the starting address of the file segments. In those + situations, although `ld' relocates the sections correctly, using + `objdump -h' to list the file section headers cannot show the + correct addresses. Instead, it shows the usual addresses, which + are implicit for the target. + +`-H' +`--help' + Print a summary of the options to `objdump' and exit. + +`-i' +`--info' + Display a list showing all architectures and object formats + available for specification with `-b' or `-m'. + +`-j NAME' +`--section=NAME' + Display information only for section NAME. + +`-l' +`--line-numbers' + Label the display (using debugging information) with the filename + and source line numbers corresponding to the object code or relocs + shown. Only useful with `-d', `-D', or `-r'. + +`-m MACHINE' +`--architecture=MACHINE' + Specify the architecture to use when disassembling object files. + This can be useful when disassembling object files which do not + describe architecture information, such as S-records. You can + list the available architectures with the `-i' option. + +`-M OPTIONS' +`--disassembler-options=OPTIONS' + Pass target specific information to the disassembler. Only + supported on some targets. If it is necessary to specify more + than one disassembler option then multiple `-M' options can be + used or can be placed together into a comma separated list. + + If the target is an ARM architecture then this switch can be used + to select which register name set is used during disassembler. + Specifying `-M reg-names-std' (the default) will select the + register names as used in ARM's instruction set documentation, but + with register 13 called 'sp', register 14 called 'lr' and register + 15 called 'pc'. Specifying `-M reg-names-apcs' will select the + name set used by the ARM Procedure Call Standard, whilst + specifying `-M reg-names-raw' will just use `r' followed by the + register number. + + There are also two variants on the APCS register naming scheme + enabled by `-M reg-names-atpcs' and `-M reg-names-special-atpcs' + which use the ARM/Thumb Procedure Call Standard naming + conventions. (Either with the normal register names or the + special register names). + + This option can also be used for ARM architectures to force the + disassembler to interpret all instructions as Thumb instructions by + using the switch `--disassembler-options=force-thumb'. This can be + useful when attempting to disassemble thumb code produced by other + compilers. + + For the x86, some of the options duplicate functions of the `-m' + switch, but allow finer grained control. Multiple selections from + the following may be specified as a comma separated string. + `x86-64', `i386' and `i8086' select disassembly for the given + architecture. `intel' and `att' select between intel syntax mode + and AT&T syntax mode. `addr64', `addr32', `addr16', `data32' and + `data16' specify the default address size and operand size. These + four options will be overridden if `x86-64', `i386' or `i8086' + appear later in the option string. Lastly, `suffix', when in AT&T + mode, instructs the disassembler to print a mnemonic suffix even + when the suffix could be inferred by the operands. + + For PPC, `booke', `booke32' and `booke64' select disassembly of + BookE instructions. `32' and `64' select PowerPC and PowerPC64 + disassembly, respectively. `e300' selects disassembly for the + e300 family. `440' selects disassembly for the PowerPC 440. + + For MIPS, this option controls the printing of instruction mnemonic + names and register names in disassembled instructions. Multiple + selections from the following may be specified as a comma separated + string, and invalid options are ignored: + + `no-aliases' + Print the 'raw' instruction mnemonic instead of some pseudo + instruction mnemonic. I.e., print 'daddu' or 'or' instead of + 'move', 'sll' instead of 'nop', etc. + + `gpr-names=ABI' + Print GPR (general-purpose register) names as appropriate for + the specified ABI. By default, GPR names are selected + according to the ABI of the binary being disassembled. + + `fpr-names=ABI' + Print FPR (floating-point register) names as appropriate for + the specified ABI. By default, FPR numbers are printed + rather than names. + + `cp0-names=ARCH' + Print CP0 (system control coprocessor; coprocessor 0) + register names as appropriate for the CPU or architecture + specified by ARCH. By default, CP0 register names are + selected according to the architecture and CPU of the binary + being disassembled. + + `hwr-names=ARCH' + Print HWR (hardware register, used by the `rdhwr' + instruction) names as appropriate for the CPU or architecture + specified by ARCH. By default, HWR names are selected + according to the architecture and CPU of the binary being + disassembled. + + `reg-names=ABI' + Print GPR and FPR names as appropriate for the selected ABI. + + `reg-names=ARCH' + Print CPU-specific register names (CP0 register and HWR names) + as appropriate for the selected CPU or architecture. + + For any of the options listed above, ABI or ARCH may be specified + as `numeric' to have numbers printed rather than names, for the + selected types of registers. You can list the available values of + ABI and ARCH using the `--help' option. + + For VAX, you can specify function entry addresses with `-M + entry:0xf00ba'. You can use this multiple times to properly + disassemble VAX binary files that don't contain symbol tables (like + ROM dumps). In these cases, the function entry mask would + otherwise be decoded as VAX instructions, which would probably + lead the rest of the function being wrongly disassembled. + +`-p' +`--private-headers' + Print information that is specific to the object file format. The + exact information printed depends upon the object file format. + For some object file formats, no additional information is printed. + +`-r' +`--reloc' + Print the relocation entries of the file. If used with `-d' or + `-D', the relocations are printed interspersed with the + disassembly. + +`-R' +`--dynamic-reloc' + Print the dynamic relocation entries of the file. This is only + meaningful for dynamic objects, such as certain types of shared + libraries. + +`-s' +`--full-contents' + Display the full contents of any sections requested. By default + all non-empty sections are displayed. + +`-S' +`--source' + Display source code intermixed with disassembly, if possible. + Implies `-d'. + +`--show-raw-insn' + When disassembling instructions, print the instruction in hex as + well as in symbolic form. This is the default except when + `--prefix-addresses' is used. + +`--no-show-raw-insn' + When disassembling instructions, do not print the instruction + bytes. This is the default when `--prefix-addresses' is used. + +`-W' +`--dwarf' + Displays the contents of the DWARF debug sections in the file, if + any are present. + +`-G' +`--stabs' + Display the full contents of any sections requested. Display the + contents of the .stab and .stab.index and .stab.excl sections from + an ELF file. This is only useful on systems (such as Solaris 2.0) + in which `.stab' debugging symbol-table entries are carried in an + ELF section. In most other file formats, debugging symbol-table + entries are interleaved with linkage symbols, and are visible in + the `--syms' output. For more information on stabs symbols, see + *Note Stabs: (stabs.info)Top. + +`--start-address=ADDRESS' + Start displaying data at the specified address. This affects the + output of the `-d', `-r' and `-s' options. + +`--stop-address=ADDRESS' + Stop displaying data at the specified address. This affects the + output of the `-d', `-r' and `-s' options. + +`-t' +`--syms' + Print the symbol table entries of the file. This is similar to + the information provided by the `nm' program. + +`-T' +`--dynamic-syms' + Print the dynamic symbol table entries of the file. This is only + meaningful for dynamic objects, such as certain types of shared + libraries. This is similar to the information provided by the `nm' + program when given the `-D' (`--dynamic') option. + +`--special-syms' + When displaying symbols include those which the target considers + to be special in some way and which would not normally be of + interest to the user. + +`-V' +`--version' + Print the version number of `objdump' and exit. + +`-x' +`--all-headers' + Display all available header information, including the symbol + table and relocation entries. Using `-x' is equivalent to + specifying all of `-a -f -h -p -r -t'. + +`-w' +`--wide' + Format some lines for output devices that have more than 80 + columns. Also do not truncate symbol names when they are + displayed. + +`-z' +`--disassemble-zeroes' + Normally the disassembly output will skip blocks of zeroes. This + option directs the disassembler to disassemble those blocks, just + like any other data. + + +File: binutils.info, Node: ranlib, Next: readelf, Prev: objdump, Up: Top + +5 ranlib +******** + + ranlib [`-vV'] ARCHIVE + + `ranlib' generates an index to the contents of an archive and stores +it in the archive. The index lists each symbol defined by a member of +an archive that is a relocatable object file. + + You may use `nm -s' or `nm --print-armap' to list this index. + + An archive with such an index speeds up linking to the library and +allows routines in the library to call each other without regard to +their placement in the archive. + + The GNU `ranlib' program is another form of GNU `ar'; running +`ranlib' is completely equivalent to executing `ar -s'. *Note ar::. + +`-v' +`-V' +`--version' + Show the version number of `ranlib'. + + +File: binutils.info, Node: size, Next: strings, Prev: readelf, Up: Top + +6 size +****** + + size [`-A'|`-B'|`--format='COMPATIBILITY] + [`--help'] + [`-d'|`-o'|`-x'|`--radix='NUMBER] + [`--common'] + [`-t'|`--totals'] + [`--target='BFDNAME] [`-V'|`--version'] + [OBJFILE...] + + The GNU `size' utility lists the section sizes--and the total +size--for each of the object or archive files OBJFILE in its argument +list. By default, one line of output is generated for each object file +or each module in an archive. + + OBJFILE... are the object files to be examined. If none are +specified, the file `a.out' will be used. + + The command line options have the following meanings: + +`-A' +`-B' +`--format=COMPATIBILITY' + Using one of these options, you can choose whether the output from + GNU `size' resembles output from System V `size' (using `-A', or + `--format=sysv'), or Berkeley `size' (using `-B', or + `--format=berkeley'). The default is the one-line format similar + to Berkeley's. + + Here is an example of the Berkeley (default) format of output from + `size': + $ size --format=Berkeley ranlib size + text data bss dec hex filename + 294880 81920 11592 388392 5ed28 ranlib + 294880 81920 11888 388688 5ee50 size + + This is the same data, but displayed closer to System V + conventions: + + $ size --format=SysV ranlib size + ranlib : + section size addr + .text 294880 8192 + .data 81920 303104 + .bss 11592 385024 + Total 388392 + + + size : + section size addr + .text 294880 8192 + .data 81920 303104 + .bss 11888 385024 + Total 388688 + +`--help' + Show a summary of acceptable arguments and options. + +`-d' +`-o' +`-x' +`--radix=NUMBER' + Using one of these options, you can control whether the size of + each section is given in decimal (`-d', or `--radix=10'); octal + (`-o', or `--radix=8'); or hexadecimal (`-x', or `--radix=16'). + In `--radix=NUMBER', only the three values (8, 10, 16) are + supported. The total size is always given in two radices; decimal + and hexadecimal for `-d' or `-x' output, or octal and hexadecimal + if you're using `-o'. + +`--common' + Print total size of common symbols in each file. When using + Berkeley format these are included in the bss size. + +`-t' +`--totals' + Show totals of all objects listed (Berkeley format listing mode + only). + +`--target=BFDNAME' + Specify that the object-code format for OBJFILE is BFDNAME. This + option may not be necessary; `size' can automatically recognize + many formats. *Note Target Selection::, for more information. + +`-V' +`--version' + Display the version number of `size'. + + +File: binutils.info, Node: strings, Next: strip, Prev: size, Up: Top + +7 strings +********* + + strings [`-afov'] [`-'MIN-LEN] + [`-n' MIN-LEN] [`--bytes='MIN-LEN] + [`-t' RADIX] [`--radix='RADIX] + [`-e' ENCODING] [`--encoding='ENCODING] + [`-'] [`--all'] [`--print-file-name'] + [`-T' BFDNAME] [`--target='BFDNAME] + [`--help'] [`--version'] FILE... + + For each FILE given, GNU `strings' prints the printable character +sequences that are at least 4 characters long (or the number given with +the options below) and are followed by an unprintable character. By +default, it only prints the strings from the initialized and loaded +sections of object files; for other types of files, it prints the +strings from the whole file. + + `strings' is mainly useful for determining the contents of non-text +files. + +`-a' +`--all' +`-' + Do not scan only the initialized and loaded sections of object + files; scan the whole files. + +`-f' +`--print-file-name' + Print the name of the file before each string. + +`--help' + Print a summary of the program usage on the standard output and + exit. + +`-MIN-LEN' +`-n MIN-LEN' +`--bytes=MIN-LEN' + Print sequences of characters that are at least MIN-LEN characters + long, instead of the default 4. + +`-o' + Like `-t o'. Some other versions of `strings' have `-o' act like + `-t d' instead. Since we can not be compatible with both ways, we + simply chose one. + +`-t RADIX' +`--radix=RADIX' + Print the offset within the file before each string. The single + character argument specifies the radix of the offset--`o' for + octal, `x' for hexadecimal, or `d' for decimal. + +`-e ENCODING' +`--encoding=ENCODING' + Select the character encoding of the strings that are to be found. + Possible values for ENCODING are: `s' = single-7-bit-byte + characters (ASCII, ISO 8859, etc., default), `S' = + single-8-bit-byte characters, `b' = 16-bit bigendian, `l' = 16-bit + littleendian, `B' = 32-bit bigendian, `L' = 32-bit littleendian. + Useful for finding wide character strings. + +`-T BFDNAME' +`--target=BFDNAME' + Specify an object code format other than your system's default + format. *Note Target Selection::, for more information. + +`-v' +`--version' + Print the program version number on the standard output and exit. + + +File: binutils.info, Node: strip, Next: c++filt, Prev: strings, Up: Top + +8 strip +******* + + strip [`-F' BFDNAME |`--target='BFDNAME] + [`-I' BFDNAME |`--input-target='BFDNAME] + [`-O' BFDNAME |`--output-target='BFDNAME] + [`-s'|`--strip-all'] + [`-S'|`-g'|`-d'|`--strip-debug'] + [`-K' SYMBOLNAME |`--keep-symbol='SYMBOLNAME] + [`-N' SYMBOLNAME |`--strip-symbol='SYMBOLNAME] + [`-w'|`--wildcard'] + [`-x'|`--discard-all'] [`-X' |`--discard-locals'] + [`-R' SECTIONNAME |`--remove-section='SECTIONNAME] + [`-o' FILE] [`-p'|`--preserve-dates'] + [`--keep-file-symbols'] + [`--only-keep-debug'] + [`-v' |`--verbose'] [`-V'|`--version'] + [`--help'] [`--info'] + OBJFILE... + + GNU `strip' discards all symbols from object files OBJFILE. The +list of object files may include archives. At least one object file +must be given. + + `strip' modifies the files named in its argument, rather than +writing modified copies under different names. + +`-F BFDNAME' +`--target=BFDNAME' + Treat the original OBJFILE as a file with the object code format + BFDNAME, and rewrite it in the same format. *Note Target + Selection::, for more information. + +`--help' + Show a summary of the options to `strip' and exit. + +`--info' + Display a list showing all architectures and object formats + available. + +`-I BFDNAME' +`--input-target=BFDNAME' + Treat the original OBJFILE as a file with the object code format + BFDNAME. *Note Target Selection::, for more information. + +`-O BFDNAME' +`--output-target=BFDNAME' + Replace OBJFILE with a file in the output format BFDNAME. *Note + Target Selection::, for more information. + +`-R SECTIONNAME' +`--remove-section=SECTIONNAME' + Remove any section named SECTIONNAME from the output file. This + option may be given more than once. Note that using this option + inappropriately may make the output file unusable. + +`-s' +`--strip-all' + Remove all symbols. + +`-g' +`-S' +`-d' +`--strip-debug' + Remove debugging symbols only. + +`--strip-unneeded' + Remove all symbols that are not needed for relocation processing. + +`-K SYMBOLNAME' +`--keep-symbol=SYMBOLNAME' + When stripping symbols, keep symbol SYMBOLNAME even if it would + normally be stripped. This option may be given more than once. + +`-N SYMBOLNAME' +`--strip-symbol=SYMBOLNAME' + Remove symbol SYMBOLNAME from the source file. This option may be + given more than once, and may be combined with strip options other + than `-K'. + +`-o FILE' + Put the stripped output in FILE, rather than replacing the + existing file. When this argument is used, only one OBJFILE + argument may be specified. + +`-p' +`--preserve-dates' + Preserve the access and modification dates of the file. + +`-w' +`--wildcard' + Permit regular expressions in SYMBOLNAMEs used in other command + line options. The question mark (?), asterisk (*), backslash (\) + and square brackets ([]) operators can be used anywhere in the + symbol name. If the first character of the symbol name is the + exclamation point (!) then the sense of the switch is reversed for + that symbol. For example: + + -w -K !foo -K fo* + + would cause strip to only keep symbols that start with the letters + "fo", but to discard the symbol "foo". + +`-x' +`--discard-all' + Remove non-global symbols. + +`-X' +`--discard-locals' + Remove compiler-generated local symbols. (These usually start + with `L' or `.'.) + +`--keep-file-symbols' + When stripping a file, perhaps with `--strip-debug' or + `--strip-unneeded', retain any symbols specifying source file + names, which would otherwise get stripped. + +`--only-keep-debug' + Strip a file, removing contents of any sections that would not be + stripped by `--strip-debug' and leaving the debugging sections + intact. In ELF files, this preserves all note sections in the + output. + + The intention is that this option will be used in conjunction with + `--add-gnu-debuglink' to create a two part executable. One a + stripped binary which will occupy less space in RAM and in a + distribution and the second a debugging information file which is + only needed if debugging abilities are required. The suggested + procedure to create these files is as follows: + + 1. Link the executable as normal. Assuming that is is called + `foo' then... + + 2. Run `objcopy --only-keep-debug foo foo.dbg' to create a file + containing the debugging info. + + 3. Run `objcopy --strip-debug foo' to create a stripped + executable. + + 4. Run `objcopy --add-gnu-debuglink=foo.dbg foo' to add a link + to the debugging info into the stripped executable. + + Note - the choice of `.dbg' as an extension for the debug info + file is arbitrary. Also the `--only-keep-debug' step is optional. + You could instead do this: + + 1. Link the executable as normal. + + 2. Copy `foo' to `foo.full' + + 3. Run `strip --strip-debug foo' + + 4. Run `objcopy --add-gnu-debuglink=foo.full foo' + + ie the file pointed to by the `--add-gnu-debuglink' can be the + full executable. It does not have to be a file created by the + `--only-keep-debug' switch. + + Note - this switch is only intended for use on fully linked files. + It does not make sense to use it on object files where the + debugging information may be incomplete. Besides the + gnu_debuglink feature currently only supports the presence of one + filename containing debugging information, not multiple filenames + on a one-per-object-file basis. + +`-V' +`--version' + Show the version number for `strip'. + +`-v' +`--verbose' + Verbose output: list all object files modified. In the case of + archives, `strip -v' lists all members of the archive. + + +File: binutils.info, Node: c++filt, Next: addr2line, Prev: strip, Up: Top + +9 c++filt +********* + + c++filt [`-_'|`--strip-underscores'] + [`-n'|`--no-strip-underscores'] + [`-p'|`--no-params'] + [`-t'|`--types'] + [`-i'|`--no-verbose'] + [`-s' FORMAT|`--format='FORMAT] + [`--help'] [`--version'] [SYMBOL...] + + The C++ and Java languages provide function overloading, which means +that you can write many functions with the same name, providing that +each function takes parameters of different types. In order to be able +to distinguish these similarly named functions C++ and Java encode them +into a low-level assembler name which uniquely identifies each +different version. This process is known as "mangling". The `c++filt' +(1) program does the inverse mapping: it decodes ("demangles") low-level +names into user-level names so that they can be read. + + Every alphanumeric word (consisting of letters, digits, underscores, +dollars, or periods) seen in the input is a potential mangled name. If +the name decodes into a C++ name, the C++ name replaces the low-level +name in the output, otherwise the original word is output. In this way +you can pass an entire assembler source file, containing mangled names, +through `c++filt' and see the same source file containing demangled +names. + + You can also use `c++filt' to decipher individual symbols by passing +them on the command line: + + c++filt SYMBOL + + If no SYMBOL arguments are given, `c++filt' reads symbol names from +the standard input instead. All the results are printed on the +standard output. The difference between reading names from the command +line versus reading names from the standard input is that command line +arguments are expected to be just mangled names and no checking is +performed to separate them from surrounding text. Thus for example: + + c++filt -n _Z1fv + + will work and demangle the name to "f()" whereas: + + c++filt -n _Z1fv, + + will not work. (Note the extra comma at the end of the mangled name +which makes it invalid). This command however will work: + + echo _Z1fv, | c++filt -n + + and will display "f()," ie the demangled name followed by a trailing +comma. This behaviour is because when the names are read from the +standard input it is expected that they might be part of an assembler +source file where there might be extra, extraneous characters trailing +after a mangled name. eg: + + .type _Z1fv, @function + +`-_' +`--strip-underscores' + On some systems, both the C and C++ compilers put an underscore in + front of every name. For example, the C name `foo' gets the + low-level name `_foo'. This option removes the initial + underscore. Whether `c++filt' removes the underscore by default + is target dependent. + +`-j' +`--java' + Prints demangled names using Java syntax. The default is to use + C++ syntax. + +`-n' +`--no-strip-underscores' + Do not remove the initial underscore. + +`-p' +`--no-params' + When demangling the name of a function, do not display the types of + the function's parameters. + +`-t' +`--types' + Attempt to demangle types as well as function names. This is + disabled by default since mangled types are normally only used + internally in the compiler, and they can be confused with + non-mangled names. eg a function called "a" treated as a mangled + type name would be demangled to "signed char". + +`-i' +`--no-verbose' + Do not include implementation details (if any) in the demangled + output. + +`-s FORMAT' +`--format=FORMAT' + `c++filt' can decode various methods of mangling, used by + different compilers. The argument to this option selects which + method it uses: + + `auto' + Automatic selection based on executable (the default method) + + `gnu' + the one used by the GNU C++ compiler (g++) + + `lucid' + the one used by the Lucid compiler (lcc) + + `arm' + the one specified by the C++ Annotated Reference Manual + + `hp' + the one used by the HP compiler (aCC) + + `edg' + the one used by the EDG compiler + + `gnu-v3' + the one used by the GNU C++ compiler (g++) with the V3 ABI. + + `java' + the one used by the GNU Java compiler (gcj) + + `gnat' + the one used by the GNU Ada compiler (GNAT). + +`--help' + Print a summary of the options to `c++filt' and exit. + +`--version' + Print the version number of `c++filt' and exit. + + _Warning:_ `c++filt' is a new utility, and the details of its user + interface are subject to change in future releases. In particular, + a command-line option may be required in the future to decode a + name passed as an argument on the command line; in other words, + + c++filt SYMBOL + + may in a future release become + + c++filt OPTION SYMBOL + + ---------- Footnotes ---------- + + (1) MS-DOS does not allow `+' characters in file names, so on MS-DOS +this program is named `CXXFILT'. + + +File: binutils.info, Node: addr2line, Next: nlmconv, Prev: c++filt, Up: Top + +10 addr2line +************ + + addr2line [`-b' BFDNAME|`--target='BFDNAME] + [`-C'|`--demangle'[=STYLE]] + [`-e' FILENAME|`--exe='FILENAME] + [`-f'|`--functions'] [`-s'|`--basename'] + [`-i'|`--inlines'] + [`-j'|`--section='NAME] + [`-H'|`--help'] [`-V'|`--version'] + [addr addr ...] + + `addr2line' translates addresses into file names and line numbers. +Given an address in an executable or an offset in a section of a +relocatable object, it uses the debugging information to figure out +which file name and line number are associated with it. + + The executable or relocatable object to use is specified with the +`-e' option. The default is the file `a.out'. The section in the +relocatable object to use is specified with the `-j' option. + + `addr2line' has two modes of operation. + + In the first, hexadecimal addresses are specified on the command +line, and `addr2line' displays the file name and line number for each +address. + + In the second, `addr2line' reads hexadecimal addresses from standard +input, and prints the file name and line number for each address on +standard output. In this mode, `addr2line' may be used in a pipe to +convert dynamically chosen addresses. + + The format of the output is `FILENAME:LINENO'. The file name and +line number for each address is printed on a separate line. If the +`-f' option is used, then each `FILENAME:LINENO' line is preceded by a +`FUNCTIONNAME' line which is the name of the function containing the +address. + + If the file name or function name can not be determined, `addr2line' +will print two question marks in their place. If the line number can +not be determined, `addr2line' will print 0. + + The long and short forms of options, shown here as alternatives, are +equivalent. + +`-b BFDNAME' +`--target=BFDNAME' + Specify that the object-code format for the object files is + BFDNAME. + +`-C' +`--demangle[=STYLE]' + Decode ("demangle") low-level symbol names into user-level names. + Besides removing any initial underscore prepended by the system, + this makes C++ function names readable. Different compilers have + different mangling styles. The optional demangling style argument + can be used to choose an appropriate demangling style for your + compiler. *Note c++filt::, for more information on demangling. + +`-e FILENAME' +`--exe=FILENAME' + Specify the name of the executable for which addresses should be + translated. The default file is `a.out'. + +`-f' +`--functions' + Display function names as well as file and line number information. + +`-s' +`--basenames' + Display only the base of each file name. + +`-i' +`--inlines' + If the address belongs to a function that was inlined, the source + information for all enclosing scopes back to the first non-inlined + function will also be printed. For example, if `main' inlines + `callee1' which inlines `callee2', and address is from `callee2', + the source information for `callee1' and `main' will also be + printed. + +`-j' +`--section' + Read offsets relative to the specified section instead of absolute + addresses. + + +File: binutils.info, Node: nlmconv, Next: windres, Prev: addr2line, Up: Top + +11 nlmconv +********** + +`nlmconv' converts a relocatable object file into a NetWare Loadable +Module. + + _Warning:_ `nlmconv' is not always built as part of the binary + utilities, since it is only useful for NLM targets. + + nlmconv [`-I' BFDNAME|`--input-target='BFDNAME] + [`-O' BFDNAME|`--output-target='BFDNAME] + [`-T' HEADERFILE|`--header-file='HEADERFILE] + [`-d'|`--debug'] [`-l' LINKER|`--linker='LINKER] + [`-h'|`--help'] [`-V'|`--version'] + INFILE OUTFILE + + `nlmconv' converts the relocatable `i386' object file INFILE into +the NetWare Loadable Module OUTFILE, optionally reading HEADERFILE for +NLM header information. For instructions on writing the NLM command +file language used in header files, see the `linkers' section, +`NLMLINK' in particular, of the `NLM Development and Tools Overview', +which is part of the NLM Software Developer's Kit ("NLM SDK"), +available from Novell, Inc. `nlmconv' uses the GNU Binary File +Descriptor library to read INFILE; see *Note BFD: (ld.info)BFD, for +more information. + + `nlmconv' can perform a link step. In other words, you can list +more than one object file for input if you list them in the definitions +file (rather than simply specifying one input file on the command line). +In this case, `nlmconv' calls the linker for you. + +`-I BFDNAME' +`--input-target=BFDNAME' + Object format of the input file. `nlmconv' can usually determine + the format of a given file (so no default is necessary). *Note + Target Selection::, for more information. + +`-O BFDNAME' +`--output-target=BFDNAME' + Object format of the output file. `nlmconv' infers the output + format based on the input format, e.g. for a `i386' input file the + output format is `nlm32-i386'. *Note Target Selection::, for more + information. + +`-T HEADERFILE' +`--header-file=HEADERFILE' + Reads HEADERFILE for NLM header information. For instructions on + writing the NLM command file language used in header files, see + see the `linkers' section, of the `NLM Development and Tools + Overview', which is part of the NLM Software Developer's Kit, + available from Novell, Inc. + +`-d' +`--debug' + Displays (on standard error) the linker command line used by + `nlmconv'. + +`-l LINKER' +`--linker=LINKER' + Use LINKER for any linking. LINKER can be an absolute or a + relative pathname. + +`-h' +`--help' + Prints a usage summary. + +`-V' +`--version' + Prints the version number for `nlmconv'. + + +File: binutils.info, Node: windmc, Next: dlltool, Prev: windres, Up: Top + +12 windmc +********* + +`windmc' may be used to generator Windows message resources. + + _Warning:_ `windmc' is not always built as part of the binary + utilities, since it is only useful for Windows targets. + + windmc [options] input-file + + `windmc' reads message definitions from an input file (.mc) and +translate them into a set of output files. The output files may be of +four kinds: + +`h' + A C header file containing the message definitions. + +`rc' + A resource file compilable by the `windres' tool. + +`bin' + One or more binary files containing the resource data for a + specific message language. + +`dbg' + A C include file that maps message id's to their symbolic name. + + The exact description of these different formats is available in +documentation from Microsoft. + + When `windmc' converts from the `mc' format to the `bin' format, +`rc', `h', and optional `dbg' it is acting like the Windows Message +Compiler. + +`-a' +`--ascii_in' + Specifies that the input file specified is ANSI. This is the + default behaviour. + +`-A' +`--ascii_out' + Specifies that messages in the output `bin' files should be in ANSI + format. + +`-b' +`--binprefix' + Specifies that `bin' filenames should have to be prefixed by the + basename of the source file. + +`-c' +`--customflag' + Sets the customer bit in all message id's. + +`-C CODEPAGE' +`--codepage_in CODEPAGE' + Sets the default codepage to be used to convert input file to + UTF16. The default is ocdepage 1252. + +`-d' +`--decimal_values' + Outputs the constants in the header file in decimal. Default is + using hexadecimal output. + +`-e EXT' +`--extension EXT' + The extension for the header file. The default is .h extension. + +`-F TARGET' +`--target TARGET' + Specify the BFD format to use for a bin file as output. This is a + BFD target name; you can use the `--help' option to see a list of + supported targets. Normally `windmc' will use the default format, + which is the first one listed by the `--help' option. *Note + Target Selection::. + +`-h PATH' +`--headerdir PATH' + The target directory of the generated header file. The default is + the current directory. + +`-H' +`--help' + Displays a list of command line options and then exits. + +`-m CHARACTERS' +`--maxlength CHARACTERS' + Instructs `windmc' to generate a warning if the length of any + message exceeds the number specified. + +`-n' +`--nullterminate' + Terminate message text in `bin' files by zero. By default they are + terminated by CR/LF. + +`-o' +`--hresult_use' + Not yet implemented. Instructs `windmc' to generate an OLE2 header + file, using HRESULT definitions. Status codes are used if the flag + is not specified. + +`-O CODEPAGE' +`--codepage_out CODEPAGE' + Sets the default codepage to be used to output text files. The + default is ocdepage 1252. + +`-r PATH' +`--rcdir PATH' + The target directory for the generated `rc' script and the + generated `bin' files that the resource compiler script includes. + The default is the current directory. + +`-u' +`--unicode_in' + Specifies that the input file is UTF16. + +`-U' +`--unicode_out' + Specifies that messages in the output `bin' file should be in UTF16 + format. This is the default behaviour. + +`-v' + +`--verbose' + Enable verbose mode. This tells you what the preprocessor is if + you didn't specify one. + +`-V' + +`--version' + Prints the version number for `windres'. + +`-x PATH' +`--xdgb PATH' + The path of the `dbg' C include file that maps message id's to the + symbolic name. No such file is generated without specifying the + switch. + + +File: binutils.info, Node: windres, Next: windmc, Prev: nlmconv, Up: Top + +13 windres +********** + +`windres' may be used to manipulate Windows resources. + + _Warning:_ `windres' is not always built as part of the binary + utilities, since it is only useful for Windows targets. + + windres [options] [input-file] [output-file] + + `windres' reads resources from an input file and copies them into an +output file. Either file may be in one of three formats: + +`rc' + A text format read by the Resource Compiler. + +`res' + A binary format generated by the Resource Compiler. + +`coff' + A COFF object or executable. + + The exact description of these different formats is available in +documentation from Microsoft. + + When `windres' converts from the `rc' format to the `res' format, it +is acting like the Windows Resource Compiler. When `windres' converts +from the `res' format to the `coff' format, it is acting like the +Windows `CVTRES' program. + + When `windres' generates an `rc' file, the output is similar but not +identical to the format expected for the input. When an input `rc' +file refers to an external filename, an output `rc' file will instead +include the file contents. + + If the input or output format is not specified, `windres' will guess +based on the file name, or, for the input file, the file contents. A +file with an extension of `.rc' will be treated as an `rc' file, a file +with an extension of `.res' will be treated as a `res' file, and a file +with an extension of `.o' or `.exe' will be treated as a `coff' file. + + If no output file is specified, `windres' will print the resources +in `rc' format to standard output. + + The normal use is for you to write an `rc' file, use `windres' to +convert it to a COFF object file, and then link the COFF file into your +application. This will make the resources described in the `rc' file +available to Windows. + +`-i FILENAME' +`--input FILENAME' + The name of the input file. If this option is not used, then + `windres' will use the first non-option argument as the input file + name. If there are no non-option arguments, then `windres' will + read from standard input. `windres' can not read a COFF file from + standard input. + +`-o FILENAME' +`--output FILENAME' + The name of the output file. If this option is not used, then + `windres' will use the first non-option argument, after any used + for the input file name, as the output file name. If there is no + non-option argument, then `windres' will write to standard output. + `windres' can not write a COFF file to standard output. Note, for + compatibility with `rc' the option `-fo' is also accepted, but its + use is not recommended. + +`-J FORMAT' +`--input-format FORMAT' + The input format to read. FORMAT may be `res', `rc', or `coff'. + If no input format is specified, `windres' will guess, as + described above. + +`-O FORMAT' +`--output-format FORMAT' + The output format to generate. FORMAT may be `res', `rc', or + `coff'. If no output format is specified, `windres' will guess, + as described above. + +`-F TARGET' +`--target TARGET' + Specify the BFD format to use for a COFF file as input or output. + This is a BFD target name; you can use the `--help' option to see + a list of supported targets. Normally `windres' will use the + default format, which is the first one listed by the `--help' + option. *Note Target Selection::. + +`--preprocessor PROGRAM' + When `windres' reads an `rc' file, it runs it through the C + preprocessor first. This option may be used to specify the + preprocessor to use, including any leading arguments. The default + preprocessor argument is `gcc -E -xc-header -DRC_INVOKED'. + +`-I DIRECTORY' +`--include-dir DIRECTORY' + Specify an include directory to use when reading an `rc' file. + `windres' will pass this to the preprocessor as an `-I' option. + `windres' will also search this directory when looking for files + named in the `rc' file. If the argument passed to this command + matches any of the supported FORMATS (as described in the `-J' + option), it will issue a deprecation warning, and behave just like + the `-J' option. New programs should not use this behaviour. If a + directory happens to match a FORMAT, simple prefix it with `./' to + disable the backward compatibility. + +`-D TARGET' +`--define SYM[=VAL]' + Specify a `-D' option to pass to the preprocessor when reading an + `rc' file. + +`-U TARGET' +`--undefine SYM' + Specify a `-U' option to pass to the preprocessor when reading an + `rc' file. + +`-r' + Ignored for compatibility with rc. + +`-v' + Enable verbose mode. This tells you what the preprocessor is if + you didn't specify one. + +`-c VAL' + +`--codepage VAL' + Specify the default codepage to use when reading an `rc' file. + VAL should be a hexadecimal prefixed by `0x' or decimal codepage + code. The valid range is from zero up to 0xffff, but the validity + of the codepage is host and configuration dependent. + +`-l VAL' + +`--language VAL' + Specify the default language to use when reading an `rc' file. + VAL should be a hexadecimal language code. The low eight bits are + the language, and the high eight bits are the sublanguage. + +`--use-temp-file' + Use a temporary file to instead of using popen to read the output + of the preprocessor. Use this option if the popen implementation + is buggy on the host (eg., certain non-English language versions + of Windows 95 and Windows 98 are known to have buggy popen where + the output will instead go the console). + +`--no-use-temp-file' + Use popen, not a temporary file, to read the output of the + preprocessor. This is the default behaviour. + +`-h' + +`--help' + Prints a usage summary. + +`-V' + +`--version' + Prints the version number for `windres'. + +`--yydebug' + If `windres' is compiled with `YYDEBUG' defined as `1', this will + turn on parser debugging. + + +File: binutils.info, Node: dlltool, Next: Common Options, Prev: windmc, Up: Top + +14 dlltool +********** + +`dlltool' is used to create the files needed to create dynamic link +libraries (DLLs) on systems which understand PE format image files such +as Windows. A DLL contains an export table which contains information +that the runtime loader needs to resolve references from a referencing +program. + + The export table is generated by this program by reading in a `.def' +file or scanning the `.a' and `.o' files which will be in the DLL. A +`.o' file can contain information in special `.drectve' sections with +export information. + + _Note:_ `dlltool' is not always built as part of the binary + utilities, since it is only useful for those targets which support + DLLs. + + dlltool [`-d'|`--input-def' DEF-FILE-NAME] + [`-b'|`--base-file' BASE-FILE-NAME] + [`-e'|`--output-exp' EXPORTS-FILE-NAME] + [`-z'|`--output-def' DEF-FILE-NAME] + [`-l'|`--output-lib' LIBRARY-FILE-NAME] + [`--export-all-symbols'] [`--no-export-all-symbols'] + [`--exclude-symbols' LIST] + [`--no-default-excludes'] + [`-S'|`--as' PATH-TO-ASSEMBLER] [`-f'|`--as-flags' OPTIONS] + [`-D'|`--dllname' NAME] [`-m'|`--machine' MACHINE] + [`-a'|`--add-indirect'] + [`-U'|`--add-underscore'] [`--add-stdcall-underscore'] + [`-k'|`--kill-at'] [`-A'|`--add-stdcall-alias'] + [`-p'|`--ext-prefix-alias' PREFIX] + [`-x'|`--no-idata4'] [`-c'|`--no-idata5'] [`-i'|`--interwork'] + [`-n'|`--nodelete'] [`-t'|`--temp-prefix' PREFIX] + [`-v'|`--verbose'] + [`-h'|`--help'] [`-V'|`--version'] + [object-file ...] + + `dlltool' reads its inputs, which can come from the `-d' and `-b' +options as well as object files specified on the command line. It then +processes these inputs and if the `-e' option has been specified it +creates a exports file. If the `-l' option has been specified it +creates a library file and if the `-z' option has been specified it +creates a def file. Any or all of the `-e', `-l' and `-z' options can +be present in one invocation of dlltool. + + When creating a DLL, along with the source for the DLL, it is +necessary to have three other files. `dlltool' can help with the +creation of these files. + + The first file is a `.def' file which specifies which functions are +exported from the DLL, which functions the DLL imports, and so on. This +is a text file and can be created by hand, or `dlltool' can be used to +create it using the `-z' option. In this case `dlltool' will scan the +object files specified on its command line looking for those functions +which have been specially marked as being exported and put entries for +them in the `.def' file it creates. + + In order to mark a function as being exported from a DLL, it needs to +have an `-export:' entry in the `.drectve' section of +the object file. This can be done in C by using the asm() operator: + + asm (".section .drectve"); + asm (".ascii \"-export:my_func\""); + + int my_func (void) { ... } + + The second file needed for DLL creation is an exports file. This +file is linked with the object files that make up the body of the DLL +and it handles the interface between the DLL and the outside world. +This is a binary file and it can be created by giving the `-e' option to +`dlltool' when it is creating or reading in a `.def' file. + + The third file needed for DLL creation is the library file that +programs will link with in order to access the functions in the DLL. +This file can be created by giving the `-l' option to dlltool when it +is creating or reading in a `.def' file. + + `dlltool' builds the library file by hand, but it builds the exports +file by creating temporary files containing assembler statements and +then assembling these. The `-S' command line option can be used to +specify the path to the assembler that dlltool will use, and the `-f' +option can be used to pass specific flags to that assembler. The `-n' +can be used to prevent dlltool from deleting these temporary assembler +files when it is done, and if `-n' is specified twice then this will +prevent dlltool from deleting the temporary object files it used to +build the library. + + Here is an example of creating a DLL from a source file `dll.c' and +also creating a program (from an object file called `program.o') that +uses that DLL: + + gcc -c dll.c + dlltool -e exports.o -l dll.lib dll.o + gcc dll.o exports.o -o dll.dll + gcc program.o dll.lib -o program + + The command line options have the following meanings: + +`-d FILENAME' +`--input-def FILENAME' + Specifies the name of a `.def' file to be read in and processed. + +`-b FILENAME' +`--base-file FILENAME' + Specifies the name of a base file to be read in and processed. The + contents of this file will be added to the relocation section in + the exports file generated by dlltool. + +`-e FILENAME' +`--output-exp FILENAME' + Specifies the name of the export file to be created by dlltool. + +`-z FILENAME' +`--output-def FILENAME' + Specifies the name of the `.def' file to be created by dlltool. + +`-l FILENAME' +`--output-lib FILENAME' + Specifies the name of the library file to be created by dlltool. + +`--export-all-symbols' + Treat all global and weak defined symbols found in the input object + files as symbols to be exported. There is a small list of symbols + which are not exported by default; see the `--no-default-excludes' + option. You may add to the list of symbols to not export by using + the `--exclude-symbols' option. + +`--no-export-all-symbols' + Only export symbols explicitly listed in an input `.def' file or in + `.drectve' sections in the input object files. This is the default + behaviour. The `.drectve' sections are created by `dllexport' + attributes in the source code. + +`--exclude-symbols LIST' + Do not export the symbols in LIST. This is a list of symbol names + separated by comma or colon characters. The symbol names should + not contain a leading underscore. This is only meaningful when + `--export-all-symbols' is used. + +`--no-default-excludes' + When `--export-all-symbols' is used, it will by default avoid + exporting certain special symbols. The current list of symbols to + avoid exporting is `DllMain@12', `DllEntryPoint@0', `impure_ptr'. + You may use the `--no-default-excludes' option to go ahead and + export these special symbols. This is only meaningful when + `--export-all-symbols' is used. + +`-S PATH' +`--as PATH' + Specifies the path, including the filename, of the assembler to be + used to create the exports file. + +`-f OPTIONS' +`--as-flags OPTIONS' + Specifies any specific command line options to be passed to the + assembler when building the exports file. This option will work + even if the `-S' option is not used. This option only takes one + argument, and if it occurs more than once on the command line, + then later occurrences will override earlier occurrences. So if + it is necessary to pass multiple options to the assembler they + should be enclosed in double quotes. + +`-D NAME' +`--dll-name NAME' + Specifies the name to be stored in the `.def' file as the name of + the DLL when the `-e' option is used. If this option is not + present, then the filename given to the `-e' option will be used + as the name of the DLL. + +`-m MACHINE' +`-machine MACHINE' + Specifies the type of machine for which the library file should be + built. `dlltool' has a built in default type, depending upon how + it was created, but this option can be used to override that. + This is normally only useful when creating DLLs for an ARM + processor, when the contents of the DLL are actually encode using + Thumb instructions. + +`-a' +`--add-indirect' + Specifies that when `dlltool' is creating the exports file it + should add a section which allows the exported functions to be + referenced without using the import library. Whatever the hell + that means! + +`-U' +`--add-underscore' + Specifies that when `dlltool' is creating the exports file it + should prepend an underscore to the names of _all_ exported + symbols. + +`--add-stdcall-underscore' + Specifies that when `dlltool' is creating the exports file it + should prepend an underscore to the names of exported _stdcall_ + functions. Variable names and non-stdcall function names are not + modified. This option is useful when creating GNU-compatible + import libs for third party DLLs that were built with MS-Windows + tools. + +`-k' +`--kill-at' + Specifies that when `dlltool' is creating the exports file it + should not append the string `@ '. These numbers are + called ordinal numbers and they represent another way of accessing + the function in a DLL, other than by name. + +`-A' +`--add-stdcall-alias' + Specifies that when `dlltool' is creating the exports file it + should add aliases for stdcall symbols without `@ ' in + addition to the symbols with `@ '. + +`-p' +`--ext-prefix-alias PREFIX' + Causes `dlltool' to create external aliases for all DLL imports + with the specified prefix. The aliases are created for both + external and import symbols with no leading underscore. + +`-x' +`--no-idata4' + Specifies that when `dlltool' is creating the exports and library + files it should omit the `.idata4' section. This is for + compatibility with certain operating systems. + +`-c' +`--no-idata5' + Specifies that when `dlltool' is creating the exports and library + files it should omit the `.idata5' section. This is for + compatibility with certain operating systems. + +`-i' +`--interwork' + Specifies that `dlltool' should mark the objects in the library + file and exports file that it produces as supporting interworking + between ARM and Thumb code. + +`-n' +`--nodelete' + Makes `dlltool' preserve the temporary assembler files it used to + create the exports file. If this option is repeated then dlltool + will also preserve the temporary object files it uses to create + the library file. + +`-t PREFIX' +`--temp-prefix PREFIX' + Makes `dlltool' use PREFIX when constructing the names of + temporary assembler and object files. By default, the temp file + prefix is generated from the pid. + +`-v' +`--verbose' + Make dlltool describe what it is doing. + +`-h' +`--help' + Displays a list of command line options and then exits. + +`-V' +`--version' + Displays dlltool's version number and then exits. + + +* Menu: + +* def file format:: The format of the dlltool `.def' file + + +File: binutils.info, Node: def file format, Up: dlltool + +14.1 The format of the `dlltool' `.def' file +============================================ + +A `.def' file contains any number of the following commands: + +`NAME' NAME `[ ,' BASE `]' + The result is going to be named NAME`.exe'. + +`LIBRARY' NAME `[ ,' BASE `]' + The result is going to be named NAME`.dll'. + +`EXPORTS ( ( (' NAME1 `[ = ' NAME2 `] ) | ( ' NAME1 `=' MODULE-NAME `.' EXTERNAL-NAME `) )' + +`[' INTEGER `] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *' + Declares NAME1 as an exported symbol from the DLL, with optional + ordinal number INTEGER, or declares NAME1 as an alias (forward) of + the function EXTERNAL-NAME in the DLL MODULE-NAME. + +`IMPORTS ( (' INTERNAL-NAME `=' MODULE-NAME `.' INTEGER `) | [' INTERNAL-NAME `= ]' MODULE-NAME `.' EXTERNAL-NAME `) ) *' + Declares that EXTERNAL-NAME or the exported function whose ordinal + number is INTEGER is to be imported from the file MODULE-NAME. If + INTERNAL-NAME is specified then this is the name that the imported + function will be referred to in the body of the DLL. + +`DESCRIPTION' STRING + Puts STRING into the output `.exp' file in the `.rdata' section. + +`STACKSIZE' NUMBER-RESERVE `[, ' NUMBER-COMMIT `]' + +`HEAPSIZE' NUMBER-RESERVE `[, ' NUMBER-COMMIT `]' + Generates `--stack' or `--heap' NUMBER-RESERVE,NUMBER-COMMIT in + the output `.drectve' section. The linker will see this and act + upon it. + +`CODE' ATTR `+' + +`DATA' ATTR `+' + +`SECTIONS (' SECTION-NAME ATTR` + ) *' + Generates `--attr' SECTION-NAME ATTR in the output `.drectve' + section, where ATTR is one of `READ', `WRITE', `EXECUTE' or + `SHARED'. The linker will see this and act upon it. + + + +File: binutils.info, Node: readelf, Next: size, Prev: ranlib, Up: Top + +15 readelf +********** + + readelf [`-a'|`--all'] + [`-h'|`--file-header'] + [`-l'|`--program-headers'|`--segments'] + [`-S'|`--section-headers'|`--sections'] + [`-g'|`--section-groups'] + [`-t'|`--section-details'] + [`-e'|`--headers'] + [`-s'|`--syms'|`--symbols'] + [`-n'|`--notes'] + [`-r'|`--relocs'] + [`-u'|`--unwind'] + [`-d'|`--dynamic'] + [`-V'|`--version-info'] + [`-A'|`--arch-specific'] + [`-D'|`--use-dynamic'] + [`-x' |`--hex-dump='] + [`-w[liaprmfFsoR]'| + `--debug-dump'[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] + [`-I'|`-histogram'] + [`-v'|`--version'] + [`-W'|`--wide'] + [`-H'|`--help'] + ELFFILE... + + `readelf' displays information about one or more ELF format object +files. The options control what particular information to display. + + ELFFILE... are the object files to be examined. 32-bit and 64-bit +ELF files are supported, as are archives containing ELF files. + + This program performs a similar function to `objdump' but it goes +into more detail and it exists independently of the BFD library, so if +there is a bug in BFD then readelf will not be affected. + + The long and short forms of options, shown here as alternatives, are +equivalent. At least one option besides `-v' or `-H' must be given. + +`-a' +`--all' + Equivalent to specifying `--file-header', `--program-headers', + `--sections', `--symbols', `--relocs', `--dynamic', `--notes' and + `--version-info'. + +`-h' +`--file-header' + Displays the information contained in the ELF header at the start + of the file. + +`-l' +`--program-headers' +`--segments' + Displays the information contained in the file's segment headers, + if it has any. + +`-S' +`--sections' +`--section-headers' + Displays the information contained in the file's section headers, + if it has any. + +`-g' +`--section-groups' + Displays the information contained in the file's section groups, + if it has any. + +`-t' +`--section-details' + Displays the detailed section information. Implies `-S'. + +`-s' +`--symbols' +`--syms' + Displays the entries in symbol table section of the file, if it + has one. + +`-e' +`--headers' + Display all the headers in the file. Equivalent to `-h -l -S'. + +`-n' +`--notes' + Displays the contents of the NOTE segments and/or sections, if any. + +`-r' +`--relocs' + Displays the contents of the file's relocation section, if it has + one. + +`-u' +`--unwind' + Displays the contents of the file's unwind section, if it has one. + Only the unwind sections for IA64 ELF files are currently + supported. + +`-d' +`--dynamic' + Displays the contents of the file's dynamic section, if it has one. + +`-V' +`--version-info' + Displays the contents of the version sections in the file, it they + exist. + +`-A' +`--arch-specific' + Displays architecture-specific information in the file, if there + is any. + +`-D' +`--use-dynamic' + When displaying symbols, this option makes `readelf' use the + symbol table in the file's dynamic section, rather than the one in + the symbols section. + +`-x ' +`--hex-dump=' + Displays the contents of the indicated section as a hexadecimal + dump. A number identifies a particular section by index in the + section table; any other string identifies all sections with that + name in the object file. + +`-w[liaprmfFsoR]' +`--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]' + Displays the contents of the debug sections in the file, if any are + present. If one of the optional letters or words follows the + switch then only data found in those specific sections will be + dumped. + +`-I' +`--histogram' + Display a histogram of bucket list lengths when displaying the + contents of the symbol tables. + +`-v' +`--version' + Display the version number of readelf. + +`-W' +`--wide' + Don't break output lines to fit into 80 columns. By default + `readelf' breaks section header and segment listing lines for + 64-bit ELF files, so that they fit into 80 columns. This option + causes `readelf' to print each section header resp. each segment + one a single line, which is far more readable on terminals wider + than 80 columns. + +`-H' +`--help' + Display the command line options understood by `readelf'. + + + +File: binutils.info, Node: Common Options, Next: Selecting The Target System, Prev: dlltool, Up: Top + +16 Common Options +***************** + +The following command-line options are supported by all of the programs +described in this manual. + +`@FILE' + Read command-line options from FILE. The options read are + inserted in place of the original @FILE option. If FILE does not + exist, or cannot be read, then the option will be treated + literally, and not removed. + + Options in FILE are separated by whitespace. A whitespace + character may be included in an option by surrounding the entire + option in either single or double quotes. Any character + (including a backslash) may be included by prefixing the character + to be included with a backslash. The FILE may itself contain + additional @FILE options; any such options will be processed + recursively. + +`--help' + Display the command-line options supported by the program. + +`--version' + Display the version number of the program. + + + +File: binutils.info, Node: Selecting The Target System, Next: Reporting Bugs, Prev: Common Options, Up: Top + +17 Selecting the Target System +****************************** + +You can specify two aspects of the target system to the GNU binary file +utilities, each in several ways: + + * the target + + * the architecture + + In the following summaries, the lists of ways to specify values are +in order of decreasing precedence. The ways listed first override those +listed later. + + The commands to list valid values only list the values for which the +programs you are running were configured. If they were configured with +`--enable-targets=all', the commands list most of the available values, +but a few are left out; not all targets can be configured in at once +because some of them can only be configured "native" (on hosts with the +same type as the target system). + +* Menu: + +* Target Selection:: +* Architecture Selection:: + + +File: binutils.info, Node: Target Selection, Next: Architecture Selection, Up: Selecting The Target System + +17.1 Target Selection +===================== + +A "target" is an object file format. A given target may be supported +for multiple architectures (*note Architecture Selection::). A target +selection may also have variations for different operating systems or +architectures. + + The command to list valid target values is `objdump -i' (the first +column of output contains the relevant information). + + Some sample values are: `a.out-hp300bsd', `ecoff-littlemips', +`a.out-sunos-big'. + + You can also specify a target using a configuration triplet. This is +the same sort of name that is passed to `configure' to specify a +target. When you use a configuration triplet as an argument, it must be +fully canonicalized. You can see the canonical version of a triplet by +running the shell script `config.sub' which is included with the +sources. + + Some sample configuration triplets are: `m68k-hp-bsd', +`mips-dec-ultrix', `sparc-sun-sunos'. + +`objdump' Target +---------------- + +Ways to specify: + + 1. command line option: `-b' or `--target' + + 2. environment variable `GNUTARGET' + + 3. deduced from the input file + +`objcopy' and `strip' Input Target +---------------------------------- + +Ways to specify: + + 1. command line options: `-I' or `--input-target', or `-F' or + `--target' + + 2. environment variable `GNUTARGET' + + 3. deduced from the input file + +`objcopy' and `strip' Output Target +----------------------------------- + +Ways to specify: + + 1. command line options: `-O' or `--output-target', or `-F' or + `--target' + + 2. the input target (see "`objcopy' and `strip' Input Target" above) + + 3. environment variable `GNUTARGET' + + 4. deduced from the input file + +`nm', `size', and `strings' Target +---------------------------------- + +Ways to specify: + + 1. command line option: `--target' + + 2. environment variable `GNUTARGET' + + 3. deduced from the input file + + +File: binutils.info, Node: Architecture Selection, Prev: Target Selection, Up: Selecting The Target System + +17.2 Architecture Selection +=========================== + +An "architecture" is a type of CPU on which an object file is to run. +Its name may contain a colon, separating the name of the processor +family from the name of the particular CPU. + + The command to list valid architecture values is `objdump -i' (the +second column contains the relevant information). + + Sample values: `m68k:68020', `mips:3000', `sparc'. + +`objdump' Architecture +---------------------- + +Ways to specify: + + 1. command line option: `-m' or `--architecture' + + 2. deduced from the input file + +`objcopy', `nm', `size', `strings' Architecture +----------------------------------------------- + +Ways to specify: + + 1. deduced from the input file + + +File: binutils.info, Node: Reporting Bugs, Next: GNU Free Documentation License, Prev: Selecting The Target System, Up: Top + +18 Reporting Bugs +***************** + +Your bug reports play an essential role in making the binary utilities +reliable. + + Reporting a bug may help you by bringing a solution to your problem, +or it may not. But in any case the principal function of a bug report +is to help the entire community by making the next version of the binary +utilities work better. Bug reports are your contribution to their +maintenance. + + In order for a bug report to serve its purpose, you must include the +information that enables us to fix the bug. + +* Menu: + +* Bug Criteria:: Have you found a bug? +* Bug Reporting:: How to report bugs + + +File: binutils.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs + +18.1 Have You Found a Bug? +========================== + +If you are not sure whether you have found a bug, here are some +guidelines: + + * If a binary utility gets a fatal signal, for any input whatever, + that is a bug. Reliable utilities never crash. + + * If a binary utility produces an error message for valid input, + that is a bug. + + * If you are an experienced user of binary utilities, your + suggestions for improvement are welcome in any case. + + +File: binutils.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs + +18.2 How to Report Bugs +======================= + +A number of companies and individuals offer support for GNU products. +If you obtained the binary utilities from a support organization, we +recommend you contact that organization first. + + You can find contact information for many support companies and +individuals in the file `etc/SERVICE' in the GNU Emacs distribution. + + In any event, we also recommend that you send bug reports for the +binary utilities to `http://www.sourceware.org/bugzilla/'. + + The fundamental principle of reporting bugs usefully is this: +*report all the facts*. If you are not sure whether to state a fact or +leave it out, state it! + + Often people omit facts because they think they know what causes the +problem and assume that some details do not matter. Thus, you might +assume that the name of a file you use in an example does not matter. +Well, probably it does not, but one cannot be sure. Perhaps the bug is +a stray memory reference which happens to fetch from the location where +that pathname is stored in memory; perhaps, if the pathname were +different, the contents of that location would fool the utility into +doing the right thing despite the bug. Play it safe and give a +specific, complete example. That is the easiest thing for you to do, +and the most helpful. + + Keep in mind that the purpose of a bug report is to enable us to fix +the bug if it is new to us. Therefore, always write your bug reports +on the assumption that the bug has not been reported previously. + + Sometimes people give a few sketchy facts and ask, "Does this ring a +bell?" This cannot help us fix a bug, so it is basically useless. We +respond by asking for enough details to enable us to investigate. You +might as well expedite matters by sending them to begin with. + + To enable us to fix the bug, you should include all these things: + + * The version of the utility. Each utility announces it if you + start it with the `--version' argument. + + Without this, we will not know whether there is any point in + looking for the bug in the current version of the binary utilities. + + * Any patches you may have applied to the source, including any + patches made to the `BFD' library. + + * The type of machine you are using, and the operating system name + and version number. + + * What compiler (and its version) was used to compile the + utilities--e.g. "`gcc-2.7'". + + * The command arguments you gave the utility to observe the bug. To + guarantee you will not omit something important, list them all. A + copy of the Makefile (or the output from make) is sufficient. + + If we were to try to guess the arguments, we would probably guess + wrong and then we might not encounter the bug. + + * A complete input file, or set of input files, that will reproduce + the bug. If the utility is reading an object file or files, then + it is generally most helpful to send the actual object files. + + If the source files were produced exclusively using GNU programs + (e.g., `gcc', `gas', and/or the GNU `ld'), then it may be OK to + send the source files rather than the object files. In this case, + be sure to say exactly what version of `gcc', or whatever, was + used to produce the object files. Also say how `gcc', or + whatever, was configured. + + * A description of what behavior you observe that you believe is + incorrect. For example, "It gets a fatal signal." + + Of course, if the bug is that the utility gets a fatal signal, + then we will certainly notice it. But if the bug is incorrect + output, we might not notice unless it is glaringly wrong. You + might as well not give us a chance to make a mistake. + + Even if the problem you experience is a fatal signal, you should + still say so explicitly. Suppose something strange is going on, + such as your copy of the utility is out of sync, or you have + encountered a bug in the C library on your system. (This has + happened!) Your copy might crash and ours would not. If you told + us to expect a crash, then when ours fails to crash, we would know + that the bug was not happening for us. If you had not told us to + expect a crash, then we would not be able to draw any conclusion + from our observations. + + * If you wish to suggest changes to the source, send us context + diffs, as generated by `diff' with the `-u', `-c', or `-p' option. + Always send diffs from the old file to the new file. If you wish + to discuss something in the `ld' source, refer to it by context, + not by line number. + + The line numbers in our development sources will not match those + in your sources. Your line numbers would convey no useful + information to us. + + Here are some things that are not necessary: + + * A description of the envelope of the bug. + + Often people who encounter a bug spend a lot of time investigating + which changes to the input file will make the bug go away and which + changes will not affect it. + + This is often time consuming and not very useful, because the way + we will find the bug is by running a single example under the + debugger with breakpoints, not by pure deduction from a series of + examples. We recommend that you save your time for something else. + + Of course, if you can find a simpler example to report _instead_ + of the original one, that is a convenience for us. Errors in the + output will be easier to spot, running under the debugger will take + less time, and so on. + + However, simplification is not vital; if you do not want to do + this, report the bug anyway and send us the entire test case you + used. + + * A patch for the bug. + + A patch for the bug does help us if it is a good one. But do not + omit the necessary information, such as the test case, on the + assumption that a patch is all we need. We might see problems + with your patch and decide to fix the problem another way, or we + might not understand it at all. + + Sometimes with programs as complicated as the binary utilities it + is very hard to construct an example that will make the program + follow a certain path through the code. If you do not send us the + example, we will not be able to construct one, so we will not be + able to verify that the bug is fixed. + + And if we cannot understand what bug you are trying to fix, or why + your patch should be an improvement, we will not install it. A + test case will help us to understand. + + * A guess about what the bug is or what it depends on. + + Such guesses are usually wrong. Even we cannot guess right about + such things without first using the debugger to find the facts. + + +File: binutils.info, Node: GNU Free Documentation License, Next: Binutils Index, Prev: Reporting Bugs, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.1, March 2000 + + Copyright (C) 2000, 2003 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + written document "free" in the sense of freedom: to assure everyone + the effective freedom to copy and redistribute it, with or without + modifying it, either commercially or noncommercially. Secondarily, + this License preserves for the author and publisher a way to get + credit for their work, while not being considered responsible for + modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work that contains a + notice placed by the copyright holder saying it can be distributed + under the terms of this License. The "Document", below, refers to + any such manual or work. Any member of the public is a licensee, + and is addressed as "you." + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter + section of the Document that deals exclusively with the + relationship of the publishers or authors of the Document to the + Document's overall subject (or to related matters) and contains + nothing that could fall directly within that overall subject. + (For example, if the Document is in part a textbook of + mathematics, a Secondary Section may not explain any mathematics.) + The relationship could be a matter of historical connection with + the subject or with related matters, or of legal, commercial, + philosophical, ethical or political position regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, whose contents can be viewed and edited directly + and straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup has been designed + to thwart or discourage subsequent modification by readers is not + Transparent. A copy that is not "Transparent" is called "Opaque." + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML designed for human modification. + Opaque formats include PostScript, PDF, proprietary formats that + can be read and edited only by proprietary word processors, SGML + or XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies of the Document numbering more than + 100, and the Document's license notice requires Cover Texts, you + must enclose the copies in covers that carry, clearly and legibly, + all these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a publicly-accessible + computer-network location containing a complete Transparent copy + of the Document, free of added material, which the general + network-using public has access to download anonymously at no + charge using public-standard network protocols. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that version + gives permission. + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in the + Modified Version, together with at least five of the principal + authors of the Document (all of its principal authors, if it + has less than five). + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + D. Preserve all the copyright notices of the Document. + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified Version + under the terms of this License, in the form shown in the + Addendum below. + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + H. Include an unaltered copy of this License. + I. Preserve the section entitled "History", and its title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. + If there is no section entitled "History" in the Document, + create one stating the title, year, authors, and publisher of + the Document as given on its Title Page, then add an item + describing the Modified Version as stated in the previous + sentence. + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + K. In any section entitled "Acknowledgements" or "Dedications", + preserve the section's title, and preserve in the section all the + substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. + M. Delete any section entitled "Endorsements." Such a section + may not be included in the Modified Version. + N. Do not retitle any existing section as "Endorsements" or to + conflict in title with any Invariant Section. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties-for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition + of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections entitled + "History" in the various original documents, forming one section + entitled "History"; likewise combine any sections entitled + "Acknowledgements", and any sections entitled "Dedications." You + must delete all sections entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, does not as a whole count as a + Modified Version of the Document, provided no compilation + copyright is claimed for the compilation. Such a compilation is + called an "aggregate", and this License does not apply to the + other self-contained works thus compiled with the Document, on + account of their being thus compiled, if they are not themselves + derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one + quarter of the entire aggregate, the Document's Cover Texts may be + placed on covers that surround only the Document within the + aggregate. Otherwise they must appear on covers around the whole + aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License provided that you also include the + original English version of this License. In case of a + disagreement between the translation and the original English + version of this License, the original English version will prevail. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + http://www.gnu.org/copyleft/. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + A copy of the license is included in the section entitled "GNU + Free Documentation License." + + If you have no Invariant Sections, write "with no Invariant Sections" +instead of saying which ones are invariant. If you have no Front-Cover +Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being +LIST"; likewise for Back-Cover Texts. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: binutils.info, Node: Binutils Index, Prev: GNU Free Documentation License, Up: Top + +Binutils Index +************** + +[index] +* Menu: + +* .stab: objdump. (line 324) +* addr2line: addr2line. (line 6) +* address to file name and line number: addr2line. (line 6) +* all header information, object file: objdump. (line 364) +* ar: ar. (line 6) +* ar compatibility: ar. (line 40) +* architecture: objdump. (line 176) +* architectures available: objdump. (line 161) +* archive contents: ranlib. (line 6) +* archive headers: objdump. (line 60) +* archives: ar. (line 6) +* base files: dlltool. (line 108) +* bug criteria: Bug Criteria. (line 6) +* bug reports: Bug Reporting. (line 6) +* bugs: Reporting Bugs. (line 6) +* bugs, reporting: Bug Reporting. (line 6) +* c++filt: c++filt. (line 6) +* changing object addresses: objcopy. (line 275) +* changing section address: objcopy. (line 285) +* changing section LMA: objcopy. (line 293) +* changing section VMA: objcopy. (line 306) +* changing start address: objcopy. (line 270) +* collections of files: ar. (line 6) +* compatibility, ar: ar. (line 40) +* contents of archive: ar cmdline. (line 88) +* crash: Bug Criteria. (line 9) +* creating archives: ar cmdline. (line 127) +* cxxfilt: c++filt. (line 14) +* dates in archive: ar cmdline. (line 154) +* debug symbols: objdump. (line 319) +* debugging symbols: nm. (line 116) +* deleting from archive: ar cmdline. (line 26) +* demangling C++ symbols: c++filt. (line 6) +* demangling in nm: nm. (line 124) +* demangling in objdump <1>: addr2line. (line 55) +* demangling in objdump: objdump. (line 88) +* disassembling object code: objdump. (line 110) +* disassembly architecture: objdump. (line 176) +* disassembly endianness: objdump. (line 126) +* disassembly, with source: objdump. (line 305) +* discarding symbols: strip. (line 6) +* DLL: dlltool. (line 6) +* dlltool: dlltool. (line 6) +* DWARF: objdump. (line 319) +* dynamic relocation entries, in object file: objdump. (line 294) +* dynamic symbol table entries, printing: objdump. (line 348) +* dynamic symbols: nm. (line 136) +* ELF dynamic section information: readelf. (line 102) +* ELF file header information: readelf. (line 51) +* ELF file information: readelf. (line 6) +* ELF notes: readelf. (line 87) +* ELF object file format: objdump. (line 324) +* ELF program header information: readelf. (line 57) +* ELF reloc information: readelf. (line 91) +* ELF section group information: readelf. (line 68) +* ELF section information: readelf. (line 63) +* ELF segment information: readelf. (line 57) +* ELF symbol table information: readelf. (line 78) +* ELF version sections informations: readelf. (line 106) +* endianness: objdump. (line 126) +* error on valid input: Bug Criteria. (line 12) +* external symbols: nm. (line 148) +* extract from archive: ar cmdline. (line 103) +* fatal signal: Bug Criteria. (line 9) +* file name: nm. (line 110) +* header information, all: objdump. (line 364) +* input .def file: dlltool. (line 104) +* input file name: nm. (line 110) +* libraries: ar. (line 25) +* listings strings: strings. (line 6) +* machine instructions: objdump. (line 110) +* moving in archive: ar cmdline. (line 34) +* MRI compatibility, ar: ar scripts. (line 8) +* name duplication in archive: ar cmdline. (line 97) +* name length: ar. (line 18) +* nm: nm. (line 6) +* nm compatibility: nm. (line 120) +* nm format: nm. (line 120) +* not writing archive index: ar cmdline. (line 173) +* objdump: objdump. (line 6) +* object code format <1>: addr2line. (line 50) +* object code format <2>: strings. (line 66) +* object code format <3>: size. (line 84) +* object code format <4>: objdump. (line 74) +* object code format: nm. (line 212) +* object file header: objdump. (line 132) +* object file information: objdump. (line 6) +* object file sections: objdump. (line 300) +* object formats available: objdump. (line 161) +* operations on archive: ar cmdline. (line 22) +* printing from archive: ar cmdline. (line 46) +* printing strings: strings. (line 6) +* quick append to archive: ar cmdline. (line 54) +* radix for section sizes: size. (line 66) +* ranlib: ranlib. (line 6) +* readelf: readelf. (line 6) +* relative placement in archive: ar cmdline. (line 115) +* relocation entries, in object file: objdump. (line 288) +* removing symbols: strip. (line 6) +* repeated names in archive: ar cmdline. (line 97) +* replacement in archive: ar cmdline. (line 70) +* reporting bugs: Reporting Bugs. (line 6) +* scripts, ar: ar scripts. (line 8) +* section addresses in objdump: objdump. (line 66) +* section headers: objdump. (line 143) +* section information: objdump. (line 166) +* section sizes: size. (line 6) +* sections, full contents: objdump. (line 300) +* size: size. (line 6) +* size display format: size. (line 27) +* size number format: size. (line 66) +* sorting symbols: nm. (line 167) +* source code context: objdump. (line 136) +* source disassembly: objdump. (line 305) +* source file name: nm. (line 110) +* source filenames for object files: objdump. (line 170) +* stab: objdump. (line 324) +* start-address: objdump. (line 334) +* stop-address: objdump. (line 338) +* strings: strings. (line 6) +* strings, printing: strings. (line 6) +* strip: strip. (line 6) +* symbol index <1>: ranlib. (line 6) +* symbol index: ar. (line 28) +* symbol index, listing: nm. (line 182) +* symbol line numbers: nm. (line 152) +* symbol table entries, printing: objdump. (line 343) +* symbols: nm. (line 6) +* symbols, discarding: strip. (line 6) +* undefined symbols: nm. (line 217) +* Unix compatibility, ar: ar cmdline. (line 8) +* unwind information: readelf. (line 96) +* updating an archive: ar cmdline. (line 180) +* version: Top. (line 6) +* VMA in objdump: objdump. (line 66) +* wide output, printing: objdump. (line 370) +* writing archive index: ar cmdline. (line 167) + + + +Tag Table: +Node: Top1785 +Node: ar3412 +Node: ar cmdline5590 +Node: ar scripts13733 +Node: nm19421 +Node: objcopy27616 +Node: objdump53142 +Node: ranlib68108 +Node: size68863 +Node: strings71868 +Node: strip74246 +Node: c++filt80196 +Ref: c++filt-Footnote-185120 +Node: addr2line85226 +Node: nlmconv88497 +Node: windmc91103 +Node: windres94824 +Node: dlltool100851 +Node: def file format111688 +Node: readelf113426 +Node: Common Options118133 +Node: Selecting The Target System119173 +Node: Target Selection120105 +Node: Architecture Selection122087 +Node: Reporting Bugs122915 +Node: Bug Criteria123694 +Node: Bug Reporting124247 +Node: GNU Free Documentation License131117 +Node: Binutils Index150858 + +End Tag Table diff --git a/binutils/doc/cxxfilt.man b/binutils/doc/cxxfilt.man new file mode 100644 index 000000000..21f478343 --- /dev/null +++ b/binutils/doc/cxxfilt.man @@ -0,0 +1,345 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "C++FILT 1" +.TH C++FILT 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +cxxfilt \- Demangle C++ and Java symbols. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +c++filt [\fB\-_\fR|\fB\-\-strip\-underscores\fR] + [\fB\-n\fR|\fB\-\-no\-strip\-underscores\fR] + [\fB\-p\fR|\fB\-\-no\-params\fR] + [\fB\-t\fR|\fB\-\-types\fR] + [\fB\-i\fR|\fB\-\-no\-verbose\fR] + [\fB\-s\fR \fIformat\fR|\fB\-\-format=\fR\fIformat\fR] + [\fB\-\-help\fR] [\fB\-\-version\fR] [\fIsymbol\fR...] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \*(C+ and Java languages provide function overloading, which means +that you can write many functions with the same name, providing that +each function takes parameters of different types. In order to be +able to distinguish these similarly named functions \*(C+ and Java +encode them into a low-level assembler name which uniquely identifies +each different version. This process is known as \fImangling\fR. The +\&\fBc++filt\fR +[1] +program does the inverse mapping: it decodes (\fIdemangles\fR) low-level +names into user-level names so that they can be read. +.PP +Every alphanumeric word (consisting of letters, digits, underscores, +dollars, or periods) seen in the input is a potential mangled name. +If the name decodes into a \*(C+ name, the \*(C+ name replaces the +low-level name in the output, otherwise the original word is output. +In this way you can pass an entire assembler source file, containing +mangled names, through \fBc++filt\fR and see the same source file +containing demangled names. +.PP +You can also use \fBc++filt\fR to decipher individual symbols by +passing them on the command line: +.PP +.Vb 1 +\& c++filt +.Ve +.PP +If no \fIsymbol\fR arguments are given, \fBc++filt\fR reads symbol +names from the standard input instead. All the results are printed on +the standard output. The difference between reading names from the +command line versus reading names from the standard input is that +command line arguments are expected to be just mangled names and no +checking is performed to separate them from surrounding text. Thus +for example: +.PP +.Vb 1 +\& c++filt \-n _Z1fv +.Ve +.PP +will work and demangle the name to \*(L"f()\*(R" whereas: +.PP +.Vb 1 +\& c++filt \-n _Z1fv, +.Ve +.PP +will not work. (Note the extra comma at the end of the mangled +name which makes it invalid). This command however will work: +.PP +.Vb 1 +\& echo _Z1fv, | c++filt \-n +.Ve +.PP +and will display \*(L"f(),\*(R" ie the demangled name followed by a +trailing comma. This behaviour is because when the names are read +from the standard input it is expected that they might be part of an +assembler source file where there might be extra, extraneous +characters trailing after a mangled name. eg: +.PP +.Vb 1 +\& .type _Z1fv, @function +.Ve +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-_\fR" 4 +.IX Item "-_" +.PD 0 +.IP "\fB\-\-strip\-underscores\fR" 4 +.IX Item "--strip-underscores" +.PD +On some systems, both the C and \*(C+ compilers put an underscore in front +of every name. For example, the C name \f(CW\*(C`foo\*(C'\fR gets the low-level +name \f(CW\*(C`_foo\*(C'\fR. This option removes the initial underscore. Whether +\&\fBc++filt\fR removes the underscore by default is target dependent. +.IP "\fB\-j\fR" 4 +.IX Item "-j" +.PD 0 +.IP "\fB\-\-java\fR" 4 +.IX Item "--java" +.PD +Prints demangled names using Java syntax. The default is to use \*(C+ +syntax. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +.PD 0 +.IP "\fB\-\-no\-strip\-underscores\fR" 4 +.IX Item "--no-strip-underscores" +.PD +Do not remove the initial underscore. +.IP "\fB\-p\fR" 4 +.IX Item "-p" +.PD 0 +.IP "\fB\-\-no\-params\fR" 4 +.IX Item "--no-params" +.PD +When demangling the name of a function, do not display the types of +the function's parameters. +.IP "\fB\-t\fR" 4 +.IX Item "-t" +.PD 0 +.IP "\fB\-\-types\fR" 4 +.IX Item "--types" +.PD +Attempt to demangle types as well as function names. This is disabled +by default since mangled types are normally only used internally in +the compiler, and they can be confused with non-mangled names. eg +a function called \*(L"a\*(R" treated as a mangled type name would be +demangled to \*(L"signed char\*(R". +.IP "\fB\-i\fR" 4 +.IX Item "-i" +.PD 0 +.IP "\fB\-\-no\-verbose\fR" 4 +.IX Item "--no-verbose" +.PD +Do not include implementation details (if any) in the demangled +output. +.IP "\fB\-s\fR \fIformat\fR" 4 +.IX Item "-s format" +.PD 0 +.IP "\fB\-\-format=\fR\fIformat\fR" 4 +.IX Item "--format=format" +.PD +\&\fBc++filt\fR can decode various methods of mangling, used by +different compilers. The argument to this option selects which +method it uses: +.RS 4 +.ie n .IP """auto""" 4 +.el .IP "\f(CWauto\fR" 4 +.IX Item "auto" +Automatic selection based on executable (the default method) +.ie n .IP """gnu""" 4 +.el .IP "\f(CWgnu\fR" 4 +.IX Item "gnu" +the one used by the \s-1GNU\s0 \*(C+ compiler (g++) +.ie n .IP """lucid""" 4 +.el .IP "\f(CWlucid\fR" 4 +.IX Item "lucid" +the one used by the Lucid compiler (lcc) +.ie n .IP """arm""" 4 +.el .IP "\f(CWarm\fR" 4 +.IX Item "arm" +the one specified by the \*(C+ Annotated Reference Manual +.ie n .IP """hp""" 4 +.el .IP "\f(CWhp\fR" 4 +.IX Item "hp" +the one used by the \s-1HP\s0 compiler (aCC) +.ie n .IP """edg""" 4 +.el .IP "\f(CWedg\fR" 4 +.IX Item "edg" +the one used by the \s-1EDG\s0 compiler +.ie n .IP """gnu\-v3""" 4 +.el .IP "\f(CWgnu\-v3\fR" 4 +.IX Item "gnu-v3" +the one used by the \s-1GNU\s0 \*(C+ compiler (g++) with the V3 \s-1ABI\s0. +.ie n .IP """java""" 4 +.el .IP "\f(CWjava\fR" 4 +.IX Item "java" +the one used by the \s-1GNU\s0 Java compiler (gcj) +.ie n .IP """gnat""" 4 +.el .IP "\f(CWgnat\fR" 4 +.IX Item "gnat" +the one used by the \s-1GNU\s0 Ada compiler (\s-1GNAT\s0). +.RE +.RS 4 +.RE +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +Print a summary of the options to \fBc++filt\fR and exit. +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +Print the version number of \fBc++filt\fR and exit. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "FOOTNOTES" +.IX Header "FOOTNOTES" +.IP "1." 4 +MS-DOS does not allow \f(CW\*(C`+\*(C'\fR characters in file names, so on +MS-DOS this program is named \fB\s-1CXXFILT\s0\fR. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/dlltool.1 b/binutils/doc/dlltool.1 new file mode 100644 index 000000000..ebe04b199 --- /dev/null +++ b/binutils/doc/dlltool.1 @@ -0,0 +1,478 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "DLLTOOL 1" +.TH DLLTOOL 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +dlltool \- Create files needed to build and use DLLs. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +dlltool [\fB\-d\fR|\fB\-\-input\-def\fR \fIdef-file-name\fR] + [\fB\-b\fR|\fB\-\-base\-file\fR \fIbase-file-name\fR] + [\fB\-e\fR|\fB\-\-output\-exp\fR \fIexports-file-name\fR] + [\fB\-z\fR|\fB\-\-output\-def\fR \fIdef-file-name\fR] + [\fB\-l\fR|\fB\-\-output\-lib\fR \fIlibrary-file-name\fR] + [\fB\-\-export\-all\-symbols\fR] [\fB\-\-no\-export\-all\-symbols\fR] + [\fB\-\-exclude\-symbols\fR \fIlist\fR] + [\fB\-\-no\-default\-excludes\fR] + [\fB\-S\fR|\fB\-\-as\fR \fIpath-to-assembler\fR] [\fB\-f\fR|\fB\-\-as\-flags\fR \fIoptions\fR] + [\fB\-D\fR|\fB\-\-dllname\fR \fIname\fR] [\fB\-m\fR|\fB\-\-machine\fR \fImachine\fR] + [\fB\-a\fR|\fB\-\-add\-indirect\fR] + [\fB\-U\fR|\fB\-\-add\-underscore\fR] [\fB\-\-add\-stdcall\-underscore\fR] + [\fB\-k\fR|\fB\-\-kill\-at\fR] [\fB\-A\fR|\fB\-\-add\-stdcall\-alias\fR] + [\fB\-p\fR|\fB\-\-ext\-prefix\-alias\fR \fIprefix\fR] + [\fB\-x\fR|\fB\-\-no\-idata4\fR] [\fB\-c\fR|\fB\-\-no\-idata5\fR] [\fB\-i\fR|\fB\-\-interwork\fR] + [\fB\-n\fR|\fB\-\-nodelete\fR] [\fB\-t\fR|\fB\-\-temp\-prefix\fR \fIprefix\fR] + [\fB\-v\fR|\fB\-\-verbose\fR] + [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] + [object\-file ...] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBdlltool\fR reads its inputs, which can come from the \fB\-d\fR and +\&\fB\-b\fR options as well as object files specified on the command +line. It then processes these inputs and if the \fB\-e\fR option has +been specified it creates a exports file. If the \fB\-l\fR option +has been specified it creates a library file and if the \fB\-z\fR option +has been specified it creates a def file. Any or all of the \fB\-e\fR, +\&\fB\-l\fR and \fB\-z\fR options can be present in one invocation of +dlltool. +.PP +When creating a \s-1DLL\s0, along with the source for the \s-1DLL\s0, it is necessary +to have three other files. \fBdlltool\fR can help with the creation of +these files. +.PP +The first file is a \fI.def\fR file which specifies which functions are +exported from the \s-1DLL\s0, which functions the \s-1DLL\s0 imports, and so on. This +is a text file and can be created by hand, or \fBdlltool\fR can be used +to create it using the \fB\-z\fR option. In this case \fBdlltool\fR +will scan the object files specified on its command line looking for +those functions which have been specially marked as being exported and +put entries for them in the \fI.def\fR file it creates. +.PP +In order to mark a function as being exported from a \s-1DLL\s0, it needs to +have an \fB\-export:\fR entry in the \fB.drectve\fR +section of the object file. This can be done in C by using the +\&\fIasm()\fR operator: +.PP +.Vb 2 +\& asm (".section .drectve"); +\& asm (".ascii \e"\-export:my_func\e""); +.Ve +.PP +.Vb 1 +\& int my_func (void) { ... } +.Ve +.PP +The second file needed for \s-1DLL\s0 creation is an exports file. This file +is linked with the object files that make up the body of the \s-1DLL\s0 and it +handles the interface between the \s-1DLL\s0 and the outside world. This is a +binary file and it can be created by giving the \fB\-e\fR option to +\&\fBdlltool\fR when it is creating or reading in a \fI.def\fR file. +.PP +The third file needed for \s-1DLL\s0 creation is the library file that programs +will link with in order to access the functions in the \s-1DLL\s0. This file +can be created by giving the \fB\-l\fR option to dlltool when it +is creating or reading in a \fI.def\fR file. +.PP +\&\fBdlltool\fR builds the library file by hand, but it builds the +exports file by creating temporary files containing assembler statements +and then assembling these. The \fB\-S\fR command line option can be +used to specify the path to the assembler that dlltool will use, +and the \fB\-f\fR option can be used to pass specific flags to that +assembler. The \fB\-n\fR can be used to prevent dlltool from deleting +these temporary assembler files when it is done, and if \fB\-n\fR is +specified twice then this will prevent dlltool from deleting the +temporary object files it used to build the library. +.PP +Here is an example of creating a \s-1DLL\s0 from a source file \fBdll.c\fR and +also creating a program (from an object file called \fBprogram.o\fR) +that uses that \s-1DLL:\s0 +.PP +.Vb 4 +\& gcc \-c dll.c +\& dlltool \-e exports.o \-l dll.lib dll.o +\& gcc dll.o exports.o \-o dll.dll +\& gcc program.o dll.lib \-o program +.Ve +.SH "OPTIONS" +.IX Header "OPTIONS" +The command line options have the following meanings: +.IP "\fB\-d\fR \fIfilename\fR" 4 +.IX Item "-d filename" +.PD 0 +.IP "\fB\-\-input\-def\fR \fIfilename\fR" 4 +.IX Item "--input-def filename" +.PD +Specifies the name of a \fI.def\fR file to be read in and processed. +.IP "\fB\-b\fR \fIfilename\fR" 4 +.IX Item "-b filename" +.PD 0 +.IP "\fB\-\-base\-file\fR \fIfilename\fR" 4 +.IX Item "--base-file filename" +.PD +Specifies the name of a base file to be read in and processed. The +contents of this file will be added to the relocation section in the +exports file generated by dlltool. +.IP "\fB\-e\fR \fIfilename\fR" 4 +.IX Item "-e filename" +.PD 0 +.IP "\fB\-\-output\-exp\fR \fIfilename\fR" 4 +.IX Item "--output-exp filename" +.PD +Specifies the name of the export file to be created by dlltool. +.IP "\fB\-z\fR \fIfilename\fR" 4 +.IX Item "-z filename" +.PD 0 +.IP "\fB\-\-output\-def\fR \fIfilename\fR" 4 +.IX Item "--output-def filename" +.PD +Specifies the name of the \fI.def\fR file to be created by dlltool. +.IP "\fB\-l\fR \fIfilename\fR" 4 +.IX Item "-l filename" +.PD 0 +.IP "\fB\-\-output\-lib\fR \fIfilename\fR" 4 +.IX Item "--output-lib filename" +.PD +Specifies the name of the library file to be created by dlltool. +.IP "\fB\-\-export\-all\-symbols\fR" 4 +.IX Item "--export-all-symbols" +Treat all global and weak defined symbols found in the input object +files as symbols to be exported. There is a small list of symbols which +are not exported by default; see the \fB\-\-no\-default\-excludes\fR +option. You may add to the list of symbols to not export by using the +\&\fB\-\-exclude\-symbols\fR option. +.IP "\fB\-\-no\-export\-all\-symbols\fR" 4 +.IX Item "--no-export-all-symbols" +Only export symbols explicitly listed in an input \fI.def\fR file or in +\&\fB.drectve\fR sections in the input object files. This is the default +behaviour. The \fB.drectve\fR sections are created by \fBdllexport\fR +attributes in the source code. +.IP "\fB\-\-exclude\-symbols\fR \fIlist\fR" 4 +.IX Item "--exclude-symbols list" +Do not export the symbols in \fIlist\fR. This is a list of symbol names +separated by comma or colon characters. The symbol names should not +contain a leading underscore. This is only meaningful when +\&\fB\-\-export\-all\-symbols\fR is used. +.IP "\fB\-\-no\-default\-excludes\fR" 4 +.IX Item "--no-default-excludes" +When \fB\-\-export\-all\-symbols\fR is used, it will by default avoid +exporting certain special symbols. The current list of symbols to avoid +exporting is \fBDllMain@12\fR, \fBDllEntryPoint@0\fR, +\&\fBimpure_ptr\fR. You may use the \fB\-\-no\-default\-excludes\fR option +to go ahead and export these special symbols. This is only meaningful +when \fB\-\-export\-all\-symbols\fR is used. +.IP "\fB\-S\fR \fIpath\fR" 4 +.IX Item "-S path" +.PD 0 +.IP "\fB\-\-as\fR \fIpath\fR" 4 +.IX Item "--as path" +.PD +Specifies the path, including the filename, of the assembler to be used +to create the exports file. +.IP "\fB\-f\fR \fIoptions\fR" 4 +.IX Item "-f options" +.PD 0 +.IP "\fB\-\-as\-flags\fR \fIoptions\fR" 4 +.IX Item "--as-flags options" +.PD +Specifies any specific command line options to be passed to the +assembler when building the exports file. This option will work even if +the \fB\-S\fR option is not used. This option only takes one argument, +and if it occurs more than once on the command line, then later +occurrences will override earlier occurrences. So if it is necessary to +pass multiple options to the assembler they should be enclosed in +double quotes. +.IP "\fB\-D\fR \fIname\fR" 4 +.IX Item "-D name" +.PD 0 +.IP "\fB\-\-dll\-name\fR \fIname\fR" 4 +.IX Item "--dll-name name" +.PD +Specifies the name to be stored in the \fI.def\fR file as the name of +the \s-1DLL\s0 when the \fB\-e\fR option is used. If this option is not +present, then the filename given to the \fB\-e\fR option will be +used as the name of the \s-1DLL\s0. +.IP "\fB\-m\fR \fImachine\fR" 4 +.IX Item "-m machine" +.PD 0 +.IP "\fB\-machine\fR \fImachine\fR" 4 +.IX Item "-machine machine" +.PD +Specifies the type of machine for which the library file should be +built. \fBdlltool\fR has a built in default type, depending upon how +it was created, but this option can be used to override that. This is +normally only useful when creating DLLs for an \s-1ARM\s0 processor, when the +contents of the \s-1DLL\s0 are actually encode using Thumb instructions. +.IP "\fB\-a\fR" 4 +.IX Item "-a" +.PD 0 +.IP "\fB\-\-add\-indirect\fR" 4 +.IX Item "--add-indirect" +.PD +Specifies that when \fBdlltool\fR is creating the exports file it +should add a section which allows the exported functions to be +referenced without using the import library. Whatever the hell that +means! +.IP "\fB\-U\fR" 4 +.IX Item "-U" +.PD 0 +.IP "\fB\-\-add\-underscore\fR" 4 +.IX Item "--add-underscore" +.PD +Specifies that when \fBdlltool\fR is creating the exports file it +should prepend an underscore to the names of \fIall\fR exported symbols. +.IP "\fB\-\-add\-stdcall\-underscore\fR" 4 +.IX Item "--add-stdcall-underscore" +Specifies that when \fBdlltool\fR is creating the exports file it +should prepend an underscore to the names of exported \fIstdcall\fR +functions. Variable names and non-stdcall function names are not modified. +This option is useful when creating GNU-compatible import libs for third +party DLLs that were built with MS-Windows tools. +.IP "\fB\-k\fR" 4 +.IX Item "-k" +.PD 0 +.IP "\fB\-\-kill\-at\fR" 4 +.IX Item "--kill-at" +.PD +Specifies that when \fBdlltool\fR is creating the exports file it +should not append the string \fB@ \fR. These numbers are +called ordinal numbers and they represent another way of accessing the +function in a \s-1DLL\s0, other than by name. +.IP "\fB\-A\fR" 4 +.IX Item "-A" +.PD 0 +.IP "\fB\-\-add\-stdcall\-alias\fR" 4 +.IX Item "--add-stdcall-alias" +.PD +Specifies that when \fBdlltool\fR is creating the exports file it +should add aliases for stdcall symbols without \fB@ \fR +in addition to the symbols with \fB@ \fR. +.IP "\fB\-p\fR" 4 +.IX Item "-p" +.PD 0 +.IP "\fB\-\-ext\-prefix\-alias\fR \fIprefix\fR" 4 +.IX Item "--ext-prefix-alias prefix" +.PD +Causes \fBdlltool\fR to create external aliases for all \s-1DLL\s0 +imports with the specified prefix. The aliases are created for both +external and import symbols with no leading underscore. +.IP "\fB\-x\fR" 4 +.IX Item "-x" +.PD 0 +.IP "\fB\-\-no\-idata4\fR" 4 +.IX Item "--no-idata4" +.PD +Specifies that when \fBdlltool\fR is creating the exports and library +files it should omit the \f(CW\*(C`.idata4\*(C'\fR section. This is for compatibility +with certain operating systems. +.IP "\fB\-c\fR" 4 +.IX Item "-c" +.PD 0 +.IP "\fB\-\-no\-idata5\fR" 4 +.IX Item "--no-idata5" +.PD +Specifies that when \fBdlltool\fR is creating the exports and library +files it should omit the \f(CW\*(C`.idata5\*(C'\fR section. This is for compatibility +with certain operating systems. +.IP "\fB\-i\fR" 4 +.IX Item "-i" +.PD 0 +.IP "\fB\-\-interwork\fR" 4 +.IX Item "--interwork" +.PD +Specifies that \fBdlltool\fR should mark the objects in the library +file and exports file that it produces as supporting interworking +between \s-1ARM\s0 and Thumb code. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +.PD 0 +.IP "\fB\-\-nodelete\fR" 4 +.IX Item "--nodelete" +.PD +Makes \fBdlltool\fR preserve the temporary assembler files it used to +create the exports file. If this option is repeated then dlltool will +also preserve the temporary object files it uses to create the library +file. +.IP "\fB\-t\fR \fIprefix\fR" 4 +.IX Item "-t prefix" +.PD 0 +.IP "\fB\-\-temp\-prefix\fR \fIprefix\fR" 4 +.IX Item "--temp-prefix prefix" +.PD +Makes \fBdlltool\fR use \fIprefix\fR when constructing the names of +temporary assembler and object files. By default, the temp file prefix +is generated from the pid. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-\-verbose\fR" 4 +.IX Item "--verbose" +.PD +Make dlltool describe what it is doing. +.IP "\fB\-h\fR" 4 +.IX Item "-h" +.PD 0 +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +.PD +Displays a list of command line options and then exits. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Displays dlltool's version number and then exits. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +The Info pages for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/nlmconv.1 b/binutils/doc/nlmconv.1 new file mode 100644 index 000000000..b95e362c3 --- /dev/null +++ b/binutils/doc/nlmconv.1 @@ -0,0 +1,243 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "NLMCONV 1" +.TH NLMCONV 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +nlmconv \- converts object code into an NLM. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +nlmconv [\fB\-I\fR \fIbfdname\fR|\fB\-\-input\-target=\fR\fIbfdname\fR] + [\fB\-O\fR \fIbfdname\fR|\fB\-\-output\-target=\fR\fIbfdname\fR] + [\fB\-T\fR \fIheaderfile\fR|\fB\-\-header\-file=\fR\fIheaderfile\fR] + [\fB\-d\fR|\fB\-\-debug\fR] [\fB\-l\fR \fIlinker\fR|\fB\-\-linker=\fR\fIlinker\fR] + [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] + \fIinfile\fR \fIoutfile\fR +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBnlmconv\fR converts the relocatable \fBi386\fR object file +\&\fIinfile\fR into the NetWare Loadable Module \fIoutfile\fR, optionally +reading \fIheaderfile\fR for \s-1NLM\s0 header information. For instructions +on writing the \s-1NLM\s0 command file language used in header files, see the +\&\fBlinkers\fR section, \fB\s-1NLMLINK\s0\fR in particular, of the \fI\s-1NLM\s0 +Development and Tools Overview\fR, which is part of the \s-1NLM\s0 Software +Developer's Kit (\*(L"\s-1NLM\s0 \s-1SDK\s0\*(R"), available from Novell, Inc. +\&\fBnlmconv\fR uses the \s-1GNU\s0 Binary File Descriptor library to read +\&\fIinfile\fR; +.PP +\&\fBnlmconv\fR can perform a link step. In other words, you can list +more than one object file for input if you list them in the definitions +file (rather than simply specifying one input file on the command line). +In this case, \fBnlmconv\fR calls the linker for you. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-I\fR \fIbfdname\fR" 4 +.IX Item "-I bfdname" +.PD 0 +.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4 +.IX Item "--input-target=bfdname" +.PD +Object format of the input file. \fBnlmconv\fR can usually determine +the format of a given file (so no default is necessary). +.IP "\fB\-O\fR \fIbfdname\fR" 4 +.IX Item "-O bfdname" +.PD 0 +.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4 +.IX Item "--output-target=bfdname" +.PD +Object format of the output file. \fBnlmconv\fR infers the output +format based on the input format, e.g. for a \fBi386\fR input file the +output format is \fBnlm32\-i386\fR. +.IP "\fB\-T\fR \fIheaderfile\fR" 4 +.IX Item "-T headerfile" +.PD 0 +.IP "\fB\-\-header\-file=\fR\fIheaderfile\fR" 4 +.IX Item "--header-file=headerfile" +.PD +Reads \fIheaderfile\fR for \s-1NLM\s0 header information. For instructions on +writing the \s-1NLM\s0 command file language used in header files, see see the +\&\fBlinkers\fR section, of the \fI\s-1NLM\s0 Development and Tools +Overview\fR, which is part of the \s-1NLM\s0 Software Developer's Kit, available +from Novell, Inc. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +.PD 0 +.IP "\fB\-\-debug\fR" 4 +.IX Item "--debug" +.PD +Displays (on standard error) the linker command line used by \fBnlmconv\fR. +.IP "\fB\-l\fR \fIlinker\fR" 4 +.IX Item "-l linker" +.PD 0 +.IP "\fB\-\-linker=\fR\fIlinker\fR" 4 +.IX Item "--linker=linker" +.PD +Use \fIlinker\fR for any linking. \fIlinker\fR can be an absolute or a +relative pathname. +.IP "\fB\-h\fR" 4 +.IX Item "-h" +.PD 0 +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +.PD +Prints a usage summary. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Prints the version number for \fBnlmconv\fR. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/nm.1 b/binutils/doc/nm.1 new file mode 100644 index 000000000..9875c6a86 --- /dev/null +++ b/binutils/doc/nm.1 @@ -0,0 +1,449 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "NM 1" +.TH NM 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +nm \- list symbols from object files +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +nm [\fB\-a\fR|\fB\-\-debug\-syms\fR] [\fB\-g\fR|\fB\-\-extern\-only\fR] + [\fB\-B\fR] [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR]] [\fB\-D\fR|\fB\-\-dynamic\fR] + [\fB\-S\fR|\fB\-\-print\-size\fR] [\fB\-s\fR|\fB\-\-print\-armap\fR] + [\fB\-A\fR|\fB\-o\fR|\fB\-\-print\-file\-name\fR][\fB\-\-special\-syms\fR] + [\fB\-n\fR|\fB\-v\fR|\fB\-\-numeric\-sort\fR] [\fB\-p\fR|\fB\-\-no\-sort\fR] + [\fB\-r\fR|\fB\-\-reverse\-sort\fR] [\fB\-\-size\-sort\fR] [\fB\-u\fR|\fB\-\-undefined\-only\fR] + [\fB\-t\fR \fIradix\fR|\fB\-\-radix=\fR\fIradix\fR] [\fB\-P\fR|\fB\-\-portability\fR] + [\fB\-\-target=\fR\fIbfdname\fR] [\fB\-f\fR\fIformat\fR|\fB\-\-format=\fR\fIformat\fR] + [\fB\-\-defined\-only\fR] [\fB\-l\fR|\fB\-\-line\-numbers\fR] [\fB\-\-no\-demangle\fR] + [\fB\-V\fR|\fB\-\-version\fR] [\fB\-X 32_64\fR] [\fB\-\-help\fR] [\fIobjfile\fR...] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1GNU\s0 \fBnm\fR lists the symbols from object files \fIobjfile\fR.... +If no object files are listed as arguments, \fBnm\fR assumes the file +\&\fIa.out\fR. +.PP +For each symbol, \fBnm\fR shows: +.IP "\(bu" 4 +The symbol value, in the radix selected by options (see below), or +hexadecimal by default. +.IP "\(bu" 4 +The symbol type. At least the following types are used; others are, as +well, depending on the object file format. If lowercase, the symbol is +local; if uppercase, the symbol is global (external). +.RS 4 +.ie n .IP """A""" 4 +.el .IP "\f(CWA\fR" 4 +.IX Item "A" +The symbol's value is absolute, and will not be changed by further +linking. +.ie n .IP """B""" 4 +.el .IP "\f(CWB\fR" 4 +.IX Item "B" +The symbol is in the uninitialized data section (known as \s-1BSS\s0). +.ie n .IP """C""" 4 +.el .IP "\f(CWC\fR" 4 +.IX Item "C" +The symbol is common. Common symbols are uninitialized data. When +linking, multiple common symbols may appear with the same name. If the +symbol is defined anywhere, the common symbols are treated as undefined +references. +.ie n .IP """D""" 4 +.el .IP "\f(CWD\fR" 4 +.IX Item "D" +The symbol is in the initialized data section. +.ie n .IP """G""" 4 +.el .IP "\f(CWG\fR" 4 +.IX Item "G" +The symbol is in an initialized data section for small objects. Some +object file formats permit more efficient access to small data objects, +such as a global int variable as opposed to a large global array. +.ie n .IP """I""" 4 +.el .IP "\f(CWI\fR" 4 +.IX Item "I" +The symbol is an indirect reference to another symbol. This is a \s-1GNU\s0 +extension to the a.out object file format which is rarely used. +.ie n .IP """N""" 4 +.el .IP "\f(CWN\fR" 4 +.IX Item "N" +The symbol is a debugging symbol. +.ie n .IP """R""" 4 +.el .IP "\f(CWR\fR" 4 +.IX Item "R" +The symbol is in a read only data section. +.ie n .IP """S""" 4 +.el .IP "\f(CWS\fR" 4 +.IX Item "S" +The symbol is in an uninitialized data section for small objects. +.ie n .IP """T""" 4 +.el .IP "\f(CWT\fR" 4 +.IX Item "T" +The symbol is in the text (code) section. +.ie n .IP """U""" 4 +.el .IP "\f(CWU\fR" 4 +.IX Item "U" +The symbol is undefined. +.ie n .IP """V""" 4 +.el .IP "\f(CWV\fR" 4 +.IX Item "V" +The symbol is a weak object. When a weak defined symbol is linked with +a normal defined symbol, the normal defined symbol is used with no error. +When a weak undefined symbol is linked and the symbol is not defined, +the value of the weak symbol becomes zero with no error. +.ie n .IP """W""" 4 +.el .IP "\f(CWW\fR" 4 +.IX Item "W" +The symbol is a weak symbol that has not been specifically tagged as a +weak object symbol. When a weak defined symbol is linked with a normal +defined symbol, the normal defined symbol is used with no error. +When a weak undefined symbol is linked and the symbol is not defined, +the value of the symbol is determined in a system-specific manner without +error. On some systems, uppercase indicates that a default value has been +specified. +.ie n .IP """\-""" 4 +.el .IP "\f(CW\-\fR" 4 +.IX Item "-" +The symbol is a stabs symbol in an a.out object file. In this case, the +next values printed are the stabs other field, the stabs desc field, and +the stab type. Stabs symbols are used to hold debugging information. +.ie n .IP """?""" 4 +.el .IP "\f(CW?\fR" 4 +.IX Item "?" +The symbol type is unknown, or object file format specific. +.RE +.RS 4 +.RE +.IP "\(bu" 4 +The symbol name. +.SH "OPTIONS" +.IX Header "OPTIONS" +The long and short forms of options, shown here as alternatives, are +equivalent. +.IP "\fB\-A\fR" 4 +.IX Item "-A" +.PD 0 +.IP "\fB\-o\fR" 4 +.IX Item "-o" +.IP "\fB\-\-print\-file\-name\fR" 4 +.IX Item "--print-file-name" +.PD +Precede each symbol by the name of the input file (or archive member) +in which it was found, rather than identifying the input file once only, +before all of its symbols. +.IP "\fB\-a\fR" 4 +.IX Item "-a" +.PD 0 +.IP "\fB\-\-debug\-syms\fR" 4 +.IX Item "--debug-syms" +.PD +Display all symbols, even debugger-only symbols; normally these are not +listed. +.IP "\fB\-B\fR" 4 +.IX Item "-B" +The same as \fB\-\-format=bsd\fR (for compatibility with the \s-1MIPS\s0 \fBnm\fR). +.IP "\fB\-C\fR" 4 +.IX Item "-C" +.PD 0 +.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4 +.IX Item "--demangle[=style]" +.PD +Decode (\fIdemangle\fR) low-level symbol names into user-level names. +Besides removing any initial underscore prepended by the system, this +makes \*(C+ function names readable. Different compilers have different +mangling styles. The optional demangling style argument can be used to +choose an appropriate demangling style for your compiler. +.IP "\fB\-\-no\-demangle\fR" 4 +.IX Item "--no-demangle" +Do not demangle low-level symbol names. This is the default. +.IP "\fB\-D\fR" 4 +.IX Item "-D" +.PD 0 +.IP "\fB\-\-dynamic\fR" 4 +.IX Item "--dynamic" +.PD +Display the dynamic symbols rather than the normal symbols. This is +only meaningful for dynamic objects, such as certain types of shared +libraries. +.IP "\fB\-f\fR \fIformat\fR" 4 +.IX Item "-f format" +.PD 0 +.IP "\fB\-\-format=\fR\fIformat\fR" 4 +.IX Item "--format=format" +.PD +Use the output format \fIformat\fR, which can be \f(CW\*(C`bsd\*(C'\fR, +\&\f(CW\*(C`sysv\*(C'\fR, or \f(CW\*(C`posix\*(C'\fR. The default is \f(CW\*(C`bsd\*(C'\fR. +Only the first character of \fIformat\fR is significant; it can be +either upper or lower case. +.IP "\fB\-g\fR" 4 +.IX Item "-g" +.PD 0 +.IP "\fB\-\-extern\-only\fR" 4 +.IX Item "--extern-only" +.PD +Display only external symbols. +.IP "\fB\-l\fR" 4 +.IX Item "-l" +.PD 0 +.IP "\fB\-\-line\-numbers\fR" 4 +.IX Item "--line-numbers" +.PD +For each symbol, use debugging information to try to find a filename and +line number. For a defined symbol, look for the line number of the +address of the symbol. For an undefined symbol, look for the line +number of a relocation entry which refers to the symbol. If line number +information can be found, print it after the other symbol information. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +.PD 0 +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.IP "\fB\-\-numeric\-sort\fR" 4 +.IX Item "--numeric-sort" +.PD +Sort symbols numerically by their addresses, rather than alphabetically +by their names. +.IP "\fB\-p\fR" 4 +.IX Item "-p" +.PD 0 +.IP "\fB\-\-no\-sort\fR" 4 +.IX Item "--no-sort" +.PD +Do not bother to sort the symbols in any order; print them in the order +encountered. +.IP "\fB\-P\fR" 4 +.IX Item "-P" +.PD 0 +.IP "\fB\-\-portability\fR" 4 +.IX Item "--portability" +.PD +Use the \s-1POSIX\s0.2 standard output format instead of the default format. +Equivalent to \fB\-f posix\fR. +.IP "\fB\-S\fR" 4 +.IX Item "-S" +.PD 0 +.IP "\fB\-\-print\-size\fR" 4 +.IX Item "--print-size" +.PD +Print size, not the value, of defined symbols for the \f(CW\*(C`bsd\*(C'\fR output format. +.IP "\fB\-s\fR" 4 +.IX Item "-s" +.PD 0 +.IP "\fB\-\-print\-armap\fR" 4 +.IX Item "--print-armap" +.PD +When listing symbols from archive members, include the index: a mapping +(stored in the archive by \fBar\fR or \fBranlib\fR) of which modules +contain definitions for which names. +.IP "\fB\-r\fR" 4 +.IX Item "-r" +.PD 0 +.IP "\fB\-\-reverse\-sort\fR" 4 +.IX Item "--reverse-sort" +.PD +Reverse the order of the sort (whether numeric or alphabetic); let the +last come first. +.IP "\fB\-\-size\-sort\fR" 4 +.IX Item "--size-sort" +Sort symbols by size. The size is computed as the difference between +the value of the symbol and the value of the symbol with the next higher +value. If the \f(CW\*(C`bsd\*(C'\fR output format is used the size of the symbol +is printed, rather than the value, and \fB\-S\fR must be used in order +both size and value to be printed. +.IP "\fB\-\-special\-syms\fR" 4 +.IX Item "--special-syms" +Display symbols which have a target-specific special meaning. These +symbols are usually used by the target for some special processing and +are not normally helpful when included included in the normal symbol +lists. For example for \s-1ARM\s0 targets this option would skip the mapping +symbols used to mark transitions between \s-1ARM\s0 code, \s-1THUMB\s0 code and +data. +.IP "\fB\-t\fR \fIradix\fR" 4 +.IX Item "-t radix" +.PD 0 +.IP "\fB\-\-radix=\fR\fIradix\fR" 4 +.IX Item "--radix=radix" +.PD +Use \fIradix\fR as the radix for printing the symbol values. It must be +\&\fBd\fR for decimal, \fBo\fR for octal, or \fBx\fR for hexadecimal. +.IP "\fB\-\-target=\fR\fIbfdname\fR" 4 +.IX Item "--target=bfdname" +Specify an object code format other than your system's default format. +.IP "\fB\-u\fR" 4 +.IX Item "-u" +.PD 0 +.IP "\fB\-\-undefined\-only\fR" 4 +.IX Item "--undefined-only" +.PD +Display only undefined symbols (those external to each object file). +.IP "\fB\-\-defined\-only\fR" 4 +.IX Item "--defined-only" +Display only defined symbols for each object file. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Show the version number of \fBnm\fR and exit. +.IP "\fB\-X\fR" 4 +.IX Item "-X" +This option is ignored for compatibility with the \s-1AIX\s0 version of +\&\fBnm\fR. It takes one parameter which must be the string +\&\fB32_64\fR. The default mode of \s-1AIX\s0 \fBnm\fR corresponds +to \fB\-X 32\fR, which is not supported by \s-1GNU\s0 \fBnm\fR. +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +Show a summary of the options to \fBnm\fR and exit. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/objcopy.1 b/binutils/doc/objcopy.1 new file mode 100644 index 000000000..438d52480 --- /dev/null +++ b/binutils/doc/objcopy.1 @@ -0,0 +1,857 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OBJCOPY 1" +.TH OBJCOPY 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +objcopy \- copy and translate object files +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +objcopy [\fB\-F\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR] + [\fB\-I\fR \fIbfdname\fR|\fB\-\-input\-target=\fR\fIbfdname\fR] + [\fB\-O\fR \fIbfdname\fR|\fB\-\-output\-target=\fR\fIbfdname\fR] + [\fB\-B\fR \fIbfdarch\fR|\fB\-\-binary\-architecture=\fR\fIbfdarch\fR] + [\fB\-S\fR|\fB\-\-strip\-all\fR] + [\fB\-g\fR|\fB\-\-strip\-debug\fR] + [\fB\-K\fR \fIsymbolname\fR|\fB\-\-keep\-symbol=\fR\fIsymbolname\fR] + [\fB\-N\fR \fIsymbolname\fR|\fB\-\-strip\-symbol=\fR\fIsymbolname\fR] + [\fB\-\-strip\-unneeded\-symbol=\fR\fIsymbolname\fR] + [\fB\-G\fR \fIsymbolname\fR|\fB\-\-keep\-global\-symbol=\fR\fIsymbolname\fR] + [\fB\-\-localize\-hidden\fR] + [\fB\-L\fR \fIsymbolname\fR|\fB\-\-localize\-symbol=\fR\fIsymbolname\fR] + [\fB\-\-globalize\-symbol=\fR\fIsymbolname\fR] + [\fB\-W\fR \fIsymbolname\fR|\fB\-\-weaken\-symbol=\fR\fIsymbolname\fR] + [\fB\-w\fR|\fB\-\-wildcard\fR] + [\fB\-x\fR|\fB\-\-discard\-all\fR] + [\fB\-X\fR|\fB\-\-discard\-locals\fR] + [\fB\-b\fR \fIbyte\fR|\fB\-\-byte=\fR\fIbyte\fR] + [\fB\-i\fR \fIinterleave\fR|\fB\-\-interleave=\fR\fIinterleave\fR] + [\fB\-j\fR \fIsectionname\fR|\fB\-\-only\-section=\fR\fIsectionname\fR] + [\fB\-R\fR \fIsectionname\fR|\fB\-\-remove\-section=\fR\fIsectionname\fR] + [\fB\-p\fR|\fB\-\-preserve\-dates\fR] + [\fB\-\-debugging\fR] + [\fB\-\-gap\-fill=\fR\fIval\fR] + [\fB\-\-pad\-to=\fR\fIaddress\fR] + [\fB\-\-set\-start=\fR\fIval\fR] + [\fB\-\-adjust\-start=\fR\fIincr\fR] + [\fB\-\-change\-addresses=\fR\fIincr\fR] + [\fB\-\-change\-section\-address\fR \fIsection\fR{=,+,\-}\fIval\fR] + [\fB\-\-change\-section\-lma\fR \fIsection\fR{=,+,\-}\fIval\fR] + [\fB\-\-change\-section\-vma\fR \fIsection\fR{=,+,\-}\fIval\fR] + [\fB\-\-change\-warnings\fR] [\fB\-\-no\-change\-warnings\fR] + [\fB\-\-set\-section\-flags\fR \fIsection\fR=\fIflags\fR] + [\fB\-\-add\-section\fR \fIsectionname\fR=\fIfilename\fR] + [\fB\-\-rename\-section\fR \fIoldname\fR=\fInewname\fR[,\fIflags\fR]] + [\fB\-\-change\-leading\-char\fR] [\fB\-\-remove\-leading\-char\fR] + [\fB\-\-reverse\-bytes=\fR\fInum\fR] + [\fB\-\-srec\-len=\fR\fIival\fR] [\fB\-\-srec\-forceS3\fR] + [\fB\-\-redefine\-sym\fR \fIold\fR=\fInew\fR] + [\fB\-\-redefine\-syms=\fR\fIfilename\fR] + [\fB\-\-weaken\fR] + [\fB\-\-keep\-symbols=\fR\fIfilename\fR] + [\fB\-\-strip\-symbols=\fR\fIfilename\fR] + [\fB\-\-strip\-unneeded\-symbols=\fR\fIfilename\fR] + [\fB\-\-keep\-global\-symbols=\fR\fIfilename\fR] + [\fB\-\-localize\-symbols=\fR\fIfilename\fR] + [\fB\-\-globalize\-symbols=\fR\fIfilename\fR] + [\fB\-\-weaken\-symbols=\fR\fIfilename\fR] + [\fB\-\-alt\-machine\-code=\fR\fIindex\fR] + [\fB\-\-prefix\-symbols=\fR\fIstring\fR] + [\fB\-\-prefix\-sections=\fR\fIstring\fR] + [\fB\-\-prefix\-alloc\-sections=\fR\fIstring\fR] + [\fB\-\-add\-gnu\-debuglink=\fR\fIpath-to-file\fR] + [\fB\-\-keep\-file\-symbols\fR] + [\fB\-\-only\-keep\-debug\fR] + [\fB\-\-extract\-symbol\fR] + [\fB\-\-writable\-text\fR] + [\fB\-\-readonly\-text\fR] + [\fB\-\-pure\fR] + [\fB\-\-impure\fR] + [\fB\-v\fR|\fB\-\-verbose\fR] + [\fB\-V\fR|\fB\-\-version\fR] + [\fB\-\-help\fR] [\fB\-\-info\fR] + \fIinfile\fR [\fIoutfile\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1GNU\s0 \fBobjcopy\fR utility copies the contents of an object +file to another. \fBobjcopy\fR uses the \s-1GNU\s0 \s-1BFD\s0 Library to +read and write the object files. It can write the destination object +file in a format different from that of the source object file. The +exact behavior of \fBobjcopy\fR is controlled by command-line options. +Note that \fBobjcopy\fR should be able to copy a fully linked file +between any two formats. However, copying a relocatable object file +between any two formats may not work as expected. +.PP +\&\fBobjcopy\fR creates temporary files to do its translations and +deletes them afterward. \fBobjcopy\fR uses \s-1BFD\s0 to do all its +translation work; it has access to all the formats described in \s-1BFD\s0 +and thus is able to recognize most formats without being told +explicitly. +.PP +\&\fBobjcopy\fR can be used to generate S\-records by using an output +target of \fBsrec\fR (e.g., use \fB\-O srec\fR). +.PP +\&\fBobjcopy\fR can be used to generate a raw binary file by using an +output target of \fBbinary\fR (e.g., use \fB\-O binary\fR). When +\&\fBobjcopy\fR generates a raw binary file, it will essentially produce +a memory dump of the contents of the input object file. All symbols and +relocation information will be discarded. The memory dump will start at +the load address of the lowest section copied into the output file. +.PP +When generating an S\-record or a raw binary file, it may be helpful to +use \fB\-S\fR to remove sections containing debugging information. In +some cases \fB\-R\fR will be useful to remove sections which contain +information that is not needed by the binary file. +.PP +Note\-\-\-\fBobjcopy\fR is not able to change the endianness of its input +files. If the input format has an endianness (some formats do not), +\&\fBobjcopy\fR can only copy the inputs into file formats that have the +same endianness or which have no endianness (e.g., \fBsrec\fR). +(However, see the \fB\-\-reverse\-bytes\fR option.) +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fIinfile\fR" 4 +.IX Item "infile" +.PD 0 +.IP "\fIoutfile\fR" 4 +.IX Item "outfile" +.PD +The input and output files, respectively. +If you do not specify \fIoutfile\fR, \fBobjcopy\fR creates a +temporary file and destructively renames the result with +the name of \fIinfile\fR. +.IP "\fB\-I\fR \fIbfdname\fR" 4 +.IX Item "-I bfdname" +.PD 0 +.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4 +.IX Item "--input-target=bfdname" +.PD +Consider the source file's object format to be \fIbfdname\fR, rather than +attempting to deduce it. +.IP "\fB\-O\fR \fIbfdname\fR" 4 +.IX Item "-O bfdname" +.PD 0 +.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4 +.IX Item "--output-target=bfdname" +.PD +Write the output file using the object format \fIbfdname\fR. +.IP "\fB\-F\fR \fIbfdname\fR" 4 +.IX Item "-F bfdname" +.PD 0 +.IP "\fB\-\-target=\fR\fIbfdname\fR" 4 +.IX Item "--target=bfdname" +.PD +Use \fIbfdname\fR as the object format for both the input and the output +file; i.e., simply transfer data from source to destination with no +translation. +.IP "\fB\-B\fR \fIbfdarch\fR" 4 +.IX Item "-B bfdarch" +.PD 0 +.IP "\fB\-\-binary\-architecture=\fR\fIbfdarch\fR" 4 +.IX Item "--binary-architecture=bfdarch" +.PD +Useful when transforming a raw binary input file into an object file. +In this case the output architecture can be set to \fIbfdarch\fR. This +option will be ignored if the input file has a known \fIbfdarch\fR. You +can access this binary data inside a program by referencing the special +symbols that are created by the conversion process. These symbols are +called _binary_\fIobjfile\fR_start, _binary_\fIobjfile\fR_end and +_binary_\fIobjfile\fR_size. e.g. you can transform a picture file into +an object file and then access it in your code using these symbols. +.IP "\fB\-j\fR \fIsectionname\fR" 4 +.IX Item "-j sectionname" +.PD 0 +.IP "\fB\-\-only\-section=\fR\fIsectionname\fR" 4 +.IX Item "--only-section=sectionname" +.PD +Copy only the named section from the input file to the output file. +This option may be given more than once. Note that using this option +inappropriately may make the output file unusable. +.IP "\fB\-R\fR \fIsectionname\fR" 4 +.IX Item "-R sectionname" +.PD 0 +.IP "\fB\-\-remove\-section=\fR\fIsectionname\fR" 4 +.IX Item "--remove-section=sectionname" +.PD +Remove any section named \fIsectionname\fR from the output file. This +option may be given more than once. Note that using this option +inappropriately may make the output file unusable. +.IP "\fB\-S\fR" 4 +.IX Item "-S" +.PD 0 +.IP "\fB\-\-strip\-all\fR" 4 +.IX Item "--strip-all" +.PD +Do not copy relocation and symbol information from the source file. +.IP "\fB\-g\fR" 4 +.IX Item "-g" +.PD 0 +.IP "\fB\-\-strip\-debug\fR" 4 +.IX Item "--strip-debug" +.PD +Do not copy debugging symbols or sections from the source file. +.IP "\fB\-\-strip\-unneeded\fR" 4 +.IX Item "--strip-unneeded" +Strip all symbols that are not needed for relocation processing. +.IP "\fB\-K\fR \fIsymbolname\fR" 4 +.IX Item "-K symbolname" +.PD 0 +.IP "\fB\-\-keep\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--keep-symbol=symbolname" +.PD +When stripping symbols, keep symbol \fIsymbolname\fR even if it would +normally be stripped. This option may be given more than once. +.IP "\fB\-N\fR \fIsymbolname\fR" 4 +.IX Item "-N symbolname" +.PD 0 +.IP "\fB\-\-strip\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--strip-symbol=symbolname" +.PD +Do not copy symbol \fIsymbolname\fR from the source file. This option +may be given more than once. +.IP "\fB\-\-strip\-unneeded\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--strip-unneeded-symbol=symbolname" +Do not copy symbol \fIsymbolname\fR from the source file unless it is needed +by a relocation. This option may be given more than once. +.IP "\fB\-G\fR \fIsymbolname\fR" 4 +.IX Item "-G symbolname" +.PD 0 +.IP "\fB\-\-keep\-global\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--keep-global-symbol=symbolname" +.PD +Keep only symbol \fIsymbolname\fR global. Make all other symbols local +to the file, so that they are not visible externally. This option may +be given more than once. +.IP "\fB\-\-localize\-hidden\fR" 4 +.IX Item "--localize-hidden" +In an \s-1ELF\s0 object, mark all symbols that have hidden or internal visibility +as local. This option applies on top of symbol-specific localization options +such as \fB\-L\fR. +.IP "\fB\-L\fR \fIsymbolname\fR" 4 +.IX Item "-L symbolname" +.PD 0 +.IP "\fB\-\-localize\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--localize-symbol=symbolname" +.PD +Make symbol \fIsymbolname\fR local to the file, so that it is not +visible externally. This option may be given more than once. +.IP "\fB\-W\fR \fIsymbolname\fR" 4 +.IX Item "-W symbolname" +.PD 0 +.IP "\fB\-\-weaken\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--weaken-symbol=symbolname" +.PD +Make symbol \fIsymbolname\fR weak. This option may be given more than once. +.IP "\fB\-\-globalize\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--globalize-symbol=symbolname" +Give symbol \fIsymbolname\fR global scoping so that it is visible +outside of the file in which it is defined. This option may be given +more than once. +.IP "\fB\-w\fR" 4 +.IX Item "-w" +.PD 0 +.IP "\fB\-\-wildcard\fR" 4 +.IX Item "--wildcard" +.PD +Permit regular expressions in \fIsymbolname\fRs used in other command +line options. The question mark (?), asterisk (*), backslash (\e) and +square brackets ([]) operators can be used anywhere in the symbol +name. If the first character of the symbol name is the exclamation +point (!) then the sense of the switch is reversed for that symbol. +For example: +.Sp +.Vb 1 +\& \-w \-W !foo \-W fo* +.Ve +.Sp +would cause objcopy to weaken all symbols that start with \*(L"fo\*(R" +except for the symbol \*(L"foo\*(R". +.IP "\fB\-x\fR" 4 +.IX Item "-x" +.PD 0 +.IP "\fB\-\-discard\-all\fR" 4 +.IX Item "--discard-all" +.PD +Do not copy non-global symbols from the source file. +.IP "\fB\-X\fR" 4 +.IX Item "-X" +.PD 0 +.IP "\fB\-\-discard\-locals\fR" 4 +.IX Item "--discard-locals" +.PD +Do not copy compiler-generated local symbols. +(These usually start with \fBL\fR or \fB.\fR.) +.IP "\fB\-b\fR \fIbyte\fR" 4 +.IX Item "-b byte" +.PD 0 +.IP "\fB\-\-byte=\fR\fIbyte\fR" 4 +.IX Item "--byte=byte" +.PD +Keep only every \fIbyte\fRth byte of the input file (header data is not +affected). \fIbyte\fR can be in the range from 0 to \fIinterleave\fR\-1, +where \fIinterleave\fR is given by the \fB\-i\fR or \fB\-\-interleave\fR +option, or the default of 4. This option is useful for creating files +to program \s-1ROM\s0. It is typically used with an \f(CW\*(C`srec\*(C'\fR output +target. +.IP "\fB\-i\fR \fIinterleave\fR" 4 +.IX Item "-i interleave" +.PD 0 +.IP "\fB\-\-interleave=\fR\fIinterleave\fR" 4 +.IX Item "--interleave=interleave" +.PD +Only copy one out of every \fIinterleave\fR bytes. Select which byte to +copy with the \fB\-b\fR or \fB\-\-byte\fR option. The default is 4. +\&\fBobjcopy\fR ignores this option if you do not specify either \fB\-b\fR or +\&\fB\-\-byte\fR. +.IP "\fB\-p\fR" 4 +.IX Item "-p" +.PD 0 +.IP "\fB\-\-preserve\-dates\fR" 4 +.IX Item "--preserve-dates" +.PD +Set the access and modification dates of the output file to be the same +as those of the input file. +.IP "\fB\-\-debugging\fR" 4 +.IX Item "--debugging" +Convert debugging information, if possible. This is not the default +because only certain debugging formats are supported, and the +conversion process can be time consuming. +.IP "\fB\-\-gap\-fill\fR \fIval\fR" 4 +.IX Item "--gap-fill val" +Fill gaps between sections with \fIval\fR. This operation applies to +the \fIload address\fR (\s-1LMA\s0) of the sections. It is done by increasing +the size of the section with the lower address, and filling in the extra +space created with \fIval\fR. +.IP "\fB\-\-pad\-to\fR \fIaddress\fR" 4 +.IX Item "--pad-to address" +Pad the output file up to the load address \fIaddress\fR. This is +done by increasing the size of the last section. The extra space is +filled in with the value specified by \fB\-\-gap\-fill\fR (default zero). +.IP "\fB\-\-set\-start\fR \fIval\fR" 4 +.IX Item "--set-start val" +Set the start address of the new file to \fIval\fR. Not all object file +formats support setting the start address. +.IP "\fB\-\-change\-start\fR \fIincr\fR" 4 +.IX Item "--change-start incr" +.PD 0 +.IP "\fB\-\-adjust\-start\fR \fIincr\fR" 4 +.IX Item "--adjust-start incr" +.PD +Change the start address by adding \fIincr\fR. Not all object file +formats support setting the start address. +.IP "\fB\-\-change\-addresses\fR \fIincr\fR" 4 +.IX Item "--change-addresses incr" +.PD 0 +.IP "\fB\-\-adjust\-vma\fR \fIincr\fR" 4 +.IX Item "--adjust-vma incr" +.PD +Change the \s-1VMA\s0 and \s-1LMA\s0 addresses of all sections, as well as the start +address, by adding \fIincr\fR. Some object file formats do not permit +section addresses to be changed arbitrarily. Note that this does not +relocate the sections; if the program expects sections to be loaded at a +certain address, and this option is used to change the sections such +that they are loaded at a different address, the program may fail. +.IP "\fB\-\-change\-section\-address\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4 +.IX Item "--change-section-address section{=,+,-}val" +.PD 0 +.IP "\fB\-\-adjust\-section\-vma\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4 +.IX Item "--adjust-section-vma section{=,+,-}val" +.PD +Set or change both the \s-1VMA\s0 address and the \s-1LMA\s0 address of the named +\&\fIsection\fR. If \fB=\fR is used, the section address is set to +\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the +section address. See the comments under \fB\-\-change\-addresses\fR, +above. If \fIsection\fR does not exist in the input file, a warning will +be issued, unless \fB\-\-no\-change\-warnings\fR is used. +.IP "\fB\-\-change\-section\-lma\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4 +.IX Item "--change-section-lma section{=,+,-}val" +Set or change the \s-1LMA\s0 address of the named \fIsection\fR. The \s-1LMA\s0 +address is the address where the section will be loaded into memory at +program load time. Normally this is the same as the \s-1VMA\s0 address, which +is the address of the section at program run time, but on some systems, +especially those where a program is held in \s-1ROM\s0, the two can be +different. If \fB=\fR is used, the section address is set to +\&\fIval\fR. Otherwise, \fIval\fR is added to or subtracted from the +section address. See the comments under \fB\-\-change\-addresses\fR, +above. If \fIsection\fR does not exist in the input file, a warning +will be issued, unless \fB\-\-no\-change\-warnings\fR is used. +.IP "\fB\-\-change\-section\-vma\fR \fIsection\fR\fB{=,+,\-}\fR\fIval\fR" 4 +.IX Item "--change-section-vma section{=,+,-}val" +Set or change the \s-1VMA\s0 address of the named \fIsection\fR. The \s-1VMA\s0 +address is the address where the section will be located once the +program has started executing. Normally this is the same as the \s-1LMA\s0 +address, which is the address where the section will be loaded into +memory, but on some systems, especially those where a program is held in +\&\s-1ROM\s0, the two can be different. If \fB=\fR is used, the section address +is set to \fIval\fR. Otherwise, \fIval\fR is added to or subtracted +from the section address. See the comments under +\&\fB\-\-change\-addresses\fR, above. If \fIsection\fR does not exist in +the input file, a warning will be issued, unless +\&\fB\-\-no\-change\-warnings\fR is used. +.IP "\fB\-\-change\-warnings\fR" 4 +.IX Item "--change-warnings" +.PD 0 +.IP "\fB\-\-adjust\-warnings\fR" 4 +.IX Item "--adjust-warnings" +.PD +If \fB\-\-change\-section\-address\fR or \fB\-\-change\-section\-lma\fR or +\&\fB\-\-change\-section\-vma\fR is used, and the named section does not +exist, issue a warning. This is the default. +.IP "\fB\-\-no\-change\-warnings\fR" 4 +.IX Item "--no-change-warnings" +.PD 0 +.IP "\fB\-\-no\-adjust\-warnings\fR" 4 +.IX Item "--no-adjust-warnings" +.PD +Do not issue a warning if \fB\-\-change\-section\-address\fR or +\&\fB\-\-adjust\-section\-lma\fR or \fB\-\-adjust\-section\-vma\fR is used, even +if the named section does not exist. +.IP "\fB\-\-set\-section\-flags\fR \fIsection\fR\fB=\fR\fIflags\fR" 4 +.IX Item "--set-section-flags section=flags" +Set the flags for the named section. The \fIflags\fR argument is a +comma separated string of flag names. The recognized names are +\&\fBalloc\fR, \fBcontents\fR, \fBload\fR, \fBnoload\fR, +\&\fBreadonly\fR, \fBcode\fR, \fBdata\fR, \fBrom\fR, \fBshare\fR, and +\&\fBdebug\fR. You can set the \fBcontents\fR flag for a section which +does not have contents, but it is not meaningful to clear the +\&\fBcontents\fR flag of a section which does have contents\*(--just remove +the section instead. Not all flags are meaningful for all object file +formats. +.IP "\fB\-\-add\-section\fR \fIsectionname\fR\fB=\fR\fIfilename\fR" 4 +.IX Item "--add-section sectionname=filename" +Add a new section named \fIsectionname\fR while copying the file. The +contents of the new section are taken from the file \fIfilename\fR. The +size of the section will be the size of the file. This option only +works on file formats which can support sections with arbitrary names. +.IP "\fB\-\-rename\-section\fR \fIoldname\fR\fB=\fR\fInewname\fR\fB[,\fR\fIflags\fR\fB]\fR" 4 +.IX Item "--rename-section oldname=newname[,flags]" +Rename a section from \fIoldname\fR to \fInewname\fR, optionally +changing the section's flags to \fIflags\fR in the process. This has +the advantage over usng a linker script to perform the rename in that +the output stays as an object file and does not become a linked +executable. +.Sp +This option is particularly helpful when the input format is binary, +since this will always create a section called .data. If for example, +you wanted instead to create a section called .rodata containing binary +data you could use the following command line to achieve it: +.Sp +.Vb 3 +\& objcopy \-I binary \-O \-B \e +\& \-\-rename\-section .data=.rodata,alloc,load,readonly,data,contents \e +\& +.Ve +.IP "\fB\-\-change\-leading\-char\fR" 4 +.IX Item "--change-leading-char" +Some object file formats use special characters at the start of +symbols. The most common such character is underscore, which compilers +often add before every symbol. This option tells \fBobjcopy\fR to +change the leading character of every symbol when it converts between +object file formats. If the object file formats use the same leading +character, this option has no effect. Otherwise, it will add a +character, or remove a character, or change a character, as +appropriate. +.IP "\fB\-\-remove\-leading\-char\fR" 4 +.IX Item "--remove-leading-char" +If the first character of a global symbol is a special symbol leading +character used by the object file format, remove the character. The +most common symbol leading character is underscore. This option will +remove a leading underscore from all global symbols. This can be useful +if you want to link together objects of different file formats with +different conventions for symbol names. This is different from +\&\fB\-\-change\-leading\-char\fR because it always changes the symbol name +when appropriate, regardless of the object file format of the output +file. +.IP "\fB\-\-reverse\-bytes=\fR\fInum\fR" 4 +.IX Item "--reverse-bytes=num" +Reverse the bytes in a section with output contents. A section length must +be evenly divisible by the value given in order for the swap to be able to +take place. Reversing takes place before the interleaving is performed. +.Sp +This option is used typically in generating \s-1ROM\s0 images for problematic +target systems. For example, on some target boards, the 32\-bit words +fetched from 8\-bit ROMs are re-assembled in little-endian byte order +regardless of the \s-1CPU\s0 byte order. Depending on the programming model, the +endianness of the \s-1ROM\s0 may need to be modified. +.Sp +Consider a simple file with a section containing the following eight +bytes: \f(CW12345678\fR. +.Sp +Using \fB\-\-reverse\-bytes=2\fR for the above example, the bytes in the +output file would be ordered \f(CW21436587\fR. +.Sp +Using \fB\-\-reverse\-bytes=4\fR for the above example, the bytes in the +output file would be ordered \f(CW43218765\fR. +.Sp +By using \fB\-\-reverse\-bytes=2\fR for the above example, followed by +\&\fB\-\-reverse\-bytes=4\fR on the output file, the bytes in the second +output file would be ordered \f(CW34127856\fR. +.IP "\fB\-\-srec\-len=\fR\fIival\fR" 4 +.IX Item "--srec-len=ival" +Meaningful only for srec output. Set the maximum length of the Srecords +being produced to \fIival\fR. This length covers both address, data and +crc fields. +.IP "\fB\-\-srec\-forceS3\fR" 4 +.IX Item "--srec-forceS3" +Meaningful only for srec output. Avoid generation of S1/S2 records, +creating S3\-only record format. +.IP "\fB\-\-redefine\-sym\fR \fIold\fR\fB=\fR\fInew\fR" 4 +.IX Item "--redefine-sym old=new" +Change the name of a symbol \fIold\fR, to \fInew\fR. This can be useful +when one is trying link two things together for which you have no +source, and there are name collisions. +.IP "\fB\-\-redefine\-syms=\fR\fIfilename\fR" 4 +.IX Item "--redefine-syms=filename" +Apply \fB\-\-redefine\-sym\fR to each symbol pair "\fIold\fR \fInew\fR" +listed in the file \fIfilename\fR. \fIfilename\fR is simply a flat file, +with one symbol pair per line. Line comments may be introduced by the hash +character. This option may be given more than once. +.IP "\fB\-\-weaken\fR" 4 +.IX Item "--weaken" +Change all global symbols in the file to be weak. This can be useful +when building an object which will be linked against other objects using +the \fB\-R\fR option to the linker. This option is only effective when +using an object file format which supports weak symbols. +.IP "\fB\-\-keep\-symbols=\fR\fIfilename\fR" 4 +.IX Item "--keep-symbols=filename" +Apply \fB\-\-keep\-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.IP "\fB\-\-strip\-symbols=\fR\fIfilename\fR" 4 +.IX Item "--strip-symbols=filename" +Apply \fB\-\-strip\-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.IP "\fB\-\-strip\-unneeded\-symbols=\fR\fIfilename\fR" 4 +.IX Item "--strip-unneeded-symbols=filename" +Apply \fB\-\-strip\-unneeded\-symbol\fR option to each symbol listed in +the file \fIfilename\fR. \fIfilename\fR is simply a flat file, with one +symbol name per line. Line comments may be introduced by the hash +character. This option may be given more than once. +.IP "\fB\-\-keep\-global\-symbols=\fR\fIfilename\fR" 4 +.IX Item "--keep-global-symbols=filename" +Apply \fB\-\-keep\-global\-symbol\fR option to each symbol listed in the +file \fIfilename\fR. \fIfilename\fR is simply a flat file, with one +symbol name per line. Line comments may be introduced by the hash +character. This option may be given more than once. +.IP "\fB\-\-localize\-symbols=\fR\fIfilename\fR" 4 +.IX Item "--localize-symbols=filename" +Apply \fB\-\-localize\-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.IP "\fB\-\-globalize\-symbols=\fR\fIfilename\fR" 4 +.IX Item "--globalize-symbols=filename" +Apply \fB\-\-globalize\-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.IP "\fB\-\-weaken\-symbols=\fR\fIfilename\fR" 4 +.IX Item "--weaken-symbols=filename" +Apply \fB\-\-weaken\-symbol\fR option to each symbol listed in the file +\&\fIfilename\fR. \fIfilename\fR is simply a flat file, with one symbol +name per line. Line comments may be introduced by the hash character. +This option may be given more than once. +.IP "\fB\-\-alt\-machine\-code=\fR\fIindex\fR" 4 +.IX Item "--alt-machine-code=index" +If the output architecture has alternate machine codes, use the +\&\fIindex\fRth code instead of the default one. This is useful in case +a machine is assigned an official code and the tool-chain adopts the +new code, but other applications still depend on the original code +being used. For \s-1ELF\s0 based architectures if the \fIindex\fR +alternative does not exist then the value is treated as an absolute +number to be stored in the e_machine field of the \s-1ELF\s0 header. +.IP "\fB\-\-writable\-text\fR" 4 +.IX Item "--writable-text" +Mark the output text as writable. This option isn't meaningful for all +object file formats. +.IP "\fB\-\-readonly\-text\fR" 4 +.IX Item "--readonly-text" +Make the output text write protected. This option isn't meaningful for all +object file formats. +.IP "\fB\-\-pure\fR" 4 +.IX Item "--pure" +Mark the output file as demand paged. This option isn't meaningful for all +object file formats. +.IP "\fB\-\-impure\fR" 4 +.IX Item "--impure" +Mark the output file as impure. This option isn't meaningful for all +object file formats. +.IP "\fB\-\-prefix\-symbols=\fR\fIstring\fR" 4 +.IX Item "--prefix-symbols=string" +Prefix all symbols in the output file with \fIstring\fR. +.IP "\fB\-\-prefix\-sections=\fR\fIstring\fR" 4 +.IX Item "--prefix-sections=string" +Prefix all section names in the output file with \fIstring\fR. +.IP "\fB\-\-prefix\-alloc\-sections=\fR\fIstring\fR" 4 +.IX Item "--prefix-alloc-sections=string" +Prefix all the names of all allocated sections in the output file with +\&\fIstring\fR. +.IP "\fB\-\-add\-gnu\-debuglink=\fR\fIpath-to-file\fR" 4 +.IX Item "--add-gnu-debuglink=path-to-file" +Creates a .gnu_debuglink section which contains a reference to \fIpath-to-file\fR +and adds it to the output file. +.IP "\fB\-\-keep\-file\-symbols\fR" 4 +.IX Item "--keep-file-symbols" +When stripping a file, perhaps with \fB\-\-strip\-debug\fR or +\&\fB\-\-strip\-unneeded\fR, retain any symbols specifying source file names, +which would otherwise get stripped. +.IP "\fB\-\-only\-keep\-debug\fR" 4 +.IX Item "--only-keep-debug" +Strip a file, removing contents of any sections that would not be +stripped by \fB\-\-strip\-debug\fR and leaving the debugging sections +intact. In \s-1ELF\s0 files, this preserves all note sections in the output. +.Sp +The intention is that this option will be used in conjunction with +\&\fB\-\-add\-gnu\-debuglink\fR to create a two part executable. One a +stripped binary which will occupy less space in \s-1RAM\s0 and in a +distribution and the second a debugging information file which is only +needed if debugging abilities are required. The suggested procedure +to create these files is as follows: +.RS 4 +.IP "1." 4 +.IX Item "1." +\&\f(CW\*(C`foo\*(C'\fR then... +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +create a file containing the debugging info. +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +stripped executable. +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +to add a link to the debugging info into the stripped executable. +.RE +.RS 4 +.Sp +Note \- the choice of \f(CW\*(C`.dbg\*(C'\fR as an extension for the debug info +file is arbitrary. Also the \f(CW\*(C`\-\-only\-keep\-debug\*(C'\fR step is +optional. You could instead do this: +.IP "1." 4 +.IX Item "1." +.PD 0 +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +.RE +.RS 4 +.PD +.Sp +i.e., the file pointed to by the \fB\-\-add\-gnu\-debuglink\fR can be the +full executable. It does not have to be a file created by the +\&\fB\-\-only\-keep\-debug\fR switch. +.Sp +Note \- this switch is only intended for use on fully linked files. It +does not make sense to use it on object files where the debugging +information may be incomplete. Besides the gnu_debuglink feature +currently only supports the presence of one filename containing +debugging information, not multiple filenames on a one-per-object-file +basis. +.RE +.IP "\fB\-\-extract\-symbol\fR" 4 +.IX Item "--extract-symbol" +Keep the file's section flags and symbols but remove all section data. +Specifically, the option: +.RS 4 +.IP "*" 4 +.IX Item "*" +.PD 0 +.IP "*" 4 +.IX Item "*" +.IP "*" 4 +.IX Item "*" +.IP "*" 4 +.IX Item "*" +.RE +.RS 4 +.PD +.Sp +This option is used to build a \fI.sym\fR file for a VxWorks kernel. +It can also be a useful way of reducing the size of a \fB\-\-just\-symbols\fR +linker input file. +.RE +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Show the version number of \fBobjcopy\fR. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-\-verbose\fR" 4 +.IX Item "--verbose" +.PD +Verbose output: list all object files modified. In the case of +archives, \fBobjcopy \-V\fR lists all members of the archive. +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +Show a summary of the options to \fBobjcopy\fR. +.IP "\fB\-\-info\fR" 4 +.IX Item "--info" +Display a list showing all architectures and object formats available. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIld\fR\|(1), \fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/objdump.1 b/binutils/doc/objdump.1 new file mode 100644 index 000000000..2d576b2df --- /dev/null +++ b/binutils/doc/objdump.1 @@ -0,0 +1,635 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "OBJDUMP 1" +.TH OBJDUMP 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +objdump \- display information from object files. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +objdump [\fB\-a\fR|\fB\-\-archive\-headers\fR] + [\fB\-b\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR] + [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR] ] + [\fB\-d\fR|\fB\-\-disassemble\fR] + [\fB\-D\fR|\fB\-\-disassemble\-all\fR] + [\fB\-z\fR|\fB\-\-disassemble\-zeroes\fR] + [\fB\-EB\fR|\fB\-EL\fR|\fB\-\-endian=\fR{big | little }] + [\fB\-f\fR|\fB\-\-file\-headers\fR] + [\fB\-\-file\-start\-context\fR] + [\fB\-g\fR|\fB\-\-debugging\fR] + [\fB\-e\fR|\fB\-\-debugging\-tags\fR] + [\fB\-h\fR|\fB\-\-section\-headers\fR|\fB\-\-headers\fR] + [\fB\-i\fR|\fB\-\-info\fR] + [\fB\-j\fR \fIsection\fR|\fB\-\-section=\fR\fIsection\fR] + [\fB\-l\fR|\fB\-\-line\-numbers\fR] + [\fB\-S\fR|\fB\-\-source\fR] + [\fB\-m\fR \fImachine\fR|\fB\-\-architecture=\fR\fImachine\fR] + [\fB\-M\fR \fIoptions\fR|\fB\-\-disassembler\-options=\fR\fIoptions\fR] + [\fB\-p\fR|\fB\-\-private\-headers\fR] + [\fB\-r\fR|\fB\-\-reloc\fR] + [\fB\-R\fR|\fB\-\-dynamic\-reloc\fR] + [\fB\-s\fR|\fB\-\-full\-contents\fR] + [\fB\-W\fR|\fB\-\-dwarf\fR] + [\fB\-G\fR|\fB\-\-stabs\fR] + [\fB\-t\fR|\fB\-\-syms\fR] + [\fB\-T\fR|\fB\-\-dynamic\-syms\fR] + [\fB\-x\fR|\fB\-\-all\-headers\fR] + [\fB\-w\fR|\fB\-\-wide\fR] + [\fB\-\-start\-address=\fR\fIaddress\fR] + [\fB\-\-stop\-address=\fR\fIaddress\fR] + [\fB\-\-prefix\-addresses\fR] + [\fB\-\-[no\-]show\-raw\-insn\fR] + [\fB\-\-adjust\-vma=\fR\fIoffset\fR] + [\fB\-\-special\-syms\fR] + [\fB\-V\fR|\fB\-\-version\fR] + [\fB\-H\fR|\fB\-\-help\fR] + \fIobjfile\fR... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBobjdump\fR displays information about one or more object files. +The options control what particular information to display. This +information is mostly useful to programmers who are working on the +compilation tools, as opposed to programmers who just want their +program to compile and work. +.PP +\&\fIobjfile\fR... are the object files to be examined. When you +specify archives, \fBobjdump\fR shows information on each of the member +object files. +.SH "OPTIONS" +.IX Header "OPTIONS" +The long and short forms of options, shown here as alternatives, are +equivalent. At least one option from the list +\&\fB\-a,\-d,\-D,\-e,\-f,\-g,\-G,\-h,\-H,\-p,\-r,\-R,\-s,\-S,\-t,\-T,\-V,\-x\fR must be given. +.IP "\fB\-a\fR" 4 +.IX Item "-a" +.PD 0 +.IP "\fB\-\-archive\-header\fR" 4 +.IX Item "--archive-header" +.PD +If any of the \fIobjfile\fR files are archives, display the archive +header information (in a format similar to \fBls \-l\fR). Besides the +information you could list with \fBar tv\fR, \fBobjdump \-a\fR shows +the object file format of each archive member. +.IP "\fB\-\-adjust\-vma=\fR\fIoffset\fR" 4 +.IX Item "--adjust-vma=offset" +When dumping information, first add \fIoffset\fR to all the section +addresses. This is useful if the section addresses do not correspond to +the symbol table, which can happen when putting sections at particular +addresses when using a format which can not represent section addresses, +such as a.out. +.IP "\fB\-b\fR \fIbfdname\fR" 4 +.IX Item "-b bfdname" +.PD 0 +.IP "\fB\-\-target=\fR\fIbfdname\fR" 4 +.IX Item "--target=bfdname" +.PD +Specify that the object-code format for the object files is +\&\fIbfdname\fR. This option may not be necessary; \fIobjdump\fR can +automatically recognize many formats. +.Sp +For example, +.Sp +.Vb 1 +\& objdump \-b oasys \-m vax \-h fu.o +.Ve +.Sp +displays summary information from the section headers (\fB\-h\fR) of +\&\fIfu.o\fR, which is explicitly identified (\fB\-m\fR) as a \s-1VAX\s0 object +file in the format produced by Oasys compilers. You can list the +formats available with the \fB\-i\fR option. +.IP "\fB\-C\fR" 4 +.IX Item "-C" +.PD 0 +.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4 +.IX Item "--demangle[=style]" +.PD +Decode (\fIdemangle\fR) low-level symbol names into user-level names. +Besides removing any initial underscore prepended by the system, this +makes \*(C+ function names readable. Different compilers have different +mangling styles. The optional demangling style argument can be used to +choose an appropriate demangling style for your compiler. +.IP "\fB\-g\fR" 4 +.IX Item "-g" +.PD 0 +.IP "\fB\-\-debugging\fR" 4 +.IX Item "--debugging" +.PD +Display debugging information. This attempts to parse debugging +information stored in the file and print it out using a C like syntax. +Only certain types of debugging information have been implemented. +Some other types are supported by \fBreadelf \-w\fR. +.IP "\fB\-e\fR" 4 +.IX Item "-e" +.PD 0 +.IP "\fB\-\-debugging\-tags\fR" 4 +.IX Item "--debugging-tags" +.PD +Like \fB\-g\fR, but the information is generated in a format compatible +with ctags tool. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +.PD 0 +.IP "\fB\-\-disassemble\fR" 4 +.IX Item "--disassemble" +.PD +Display the assembler mnemonics for the machine instructions from +\&\fIobjfile\fR. This option only disassembles those sections which are +expected to contain instructions. +.IP "\fB\-D\fR" 4 +.IX Item "-D" +.PD 0 +.IP "\fB\-\-disassemble\-all\fR" 4 +.IX Item "--disassemble-all" +.PD +Like \fB\-d\fR, but disassemble the contents of all sections, not just +those expected to contain instructions. +.IP "\fB\-\-prefix\-addresses\fR" 4 +.IX Item "--prefix-addresses" +When disassembling, print the complete address on each line. This is +the older disassembly format. +.IP "\fB\-EB\fR" 4 +.IX Item "-EB" +.PD 0 +.IP "\fB\-EL\fR" 4 +.IX Item "-EL" +.IP "\fB\-\-endian={big|little}\fR" 4 +.IX Item "--endian={big|little}" +.PD +Specify the endianness of the object files. This only affects +disassembly. This can be useful when disassembling a file format which +does not describe endianness information, such as S\-records. +.IP "\fB\-f\fR" 4 +.IX Item "-f" +.PD 0 +.IP "\fB\-\-file\-headers\fR" 4 +.IX Item "--file-headers" +.PD +Display summary information from the overall header of +each of the \fIobjfile\fR files. +.IP "\fB\-\-file\-start\-context\fR" 4 +.IX Item "--file-start-context" +Specify that when displaying interlisted source code/disassembly +(assumes \fB\-S\fR) from a file that has not yet been displayed, extend the +context to the start of the file. +.IP "\fB\-h\fR" 4 +.IX Item "-h" +.PD 0 +.IP "\fB\-\-section\-headers\fR" 4 +.IX Item "--section-headers" +.IP "\fB\-\-headers\fR" 4 +.IX Item "--headers" +.PD +Display summary information from the section headers of the +object file. +.Sp +File segments may be relocated to nonstandard addresses, for example by +using the \fB\-Ttext\fR, \fB\-Tdata\fR, or \fB\-Tbss\fR options to +\&\fBld\fR. However, some object file formats, such as a.out, do not +store the starting address of the file segments. In those situations, +although \fBld\fR relocates the sections correctly, using \fBobjdump +\&\-h\fR to list the file section headers cannot show the correct addresses. +Instead, it shows the usual addresses, which are implicit for the +target. +.IP "\fB\-H\fR" 4 +.IX Item "-H" +.PD 0 +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +.PD +Print a summary of the options to \fBobjdump\fR and exit. +.IP "\fB\-i\fR" 4 +.IX Item "-i" +.PD 0 +.IP "\fB\-\-info\fR" 4 +.IX Item "--info" +.PD +Display a list showing all architectures and object formats available +for specification with \fB\-b\fR or \fB\-m\fR. +.IP "\fB\-j\fR \fIname\fR" 4 +.IX Item "-j name" +.PD 0 +.IP "\fB\-\-section=\fR\fIname\fR" 4 +.IX Item "--section=name" +.PD +Display information only for section \fIname\fR. +.IP "\fB\-l\fR" 4 +.IX Item "-l" +.PD 0 +.IP "\fB\-\-line\-numbers\fR" 4 +.IX Item "--line-numbers" +.PD +Label the display (using debugging information) with the filename and +source line numbers corresponding to the object code or relocs shown. +Only useful with \fB\-d\fR, \fB\-D\fR, or \fB\-r\fR. +.IP "\fB\-m\fR \fImachine\fR" 4 +.IX Item "-m machine" +.PD 0 +.IP "\fB\-\-architecture=\fR\fImachine\fR" 4 +.IX Item "--architecture=machine" +.PD +Specify the architecture to use when disassembling object files. This +can be useful when disassembling object files which do not describe +architecture information, such as S\-records. You can list the available +architectures with the \fB\-i\fR option. +.IP "\fB\-M\fR \fIoptions\fR" 4 +.IX Item "-M options" +.PD 0 +.IP "\fB\-\-disassembler\-options=\fR\fIoptions\fR" 4 +.IX Item "--disassembler-options=options" +.PD +Pass target specific information to the disassembler. Only supported on +some targets. If it is necessary to specify more than one +disassembler option then multiple \fB\-M\fR options can be used or +can be placed together into a comma separated list. +.Sp +If the target is an \s-1ARM\s0 architecture then this switch can be used to +select which register name set is used during disassembler. Specifying +\&\fB\-M reg-names-std\fR (the default) will select the register names as +used in \s-1ARM\s0's instruction set documentation, but with register 13 called +\&'sp', register 14 called 'lr' and register 15 called 'pc'. Specifying +\&\fB\-M reg-names-apcs\fR will select the name set used by the \s-1ARM\s0 +Procedure Call Standard, whilst specifying \fB\-M reg-names-raw\fR will +just use \fBr\fR followed by the register number. +.Sp +There are also two variants on the \s-1APCS\s0 register naming scheme enabled +by \fB\-M reg-names-atpcs\fR and \fB\-M reg-names-special-atpcs\fR which +use the ARM/Thumb Procedure Call Standard naming conventions. (Either +with the normal register names or the special register names). +.Sp +This option can also be used for \s-1ARM\s0 architectures to force the +disassembler to interpret all instructions as Thumb instructions by +using the switch \fB\-\-disassembler\-options=force\-thumb\fR. This can be +useful when attempting to disassemble thumb code produced by other +compilers. +.Sp +For the x86, some of the options duplicate functions of the \fB\-m\fR +switch, but allow finer grained control. Multiple selections from the +following may be specified as a comma separated string. +\&\fBx86\-64\fR, \fBi386\fR and \fBi8086\fR select disassembly for +the given architecture. \fBintel\fR and \fBatt\fR select between +intel syntax mode and \s-1AT&T\s0 syntax mode. \fBaddr64\fR, \fBaddr32\fR, +\&\fBaddr16\fR, \fBdata32\fR and \fBdata16\fR specify the default +address size and operand size. These four options will be overridden if +\&\fBx86\-64\fR, \fBi386\fR or \fBi8086\fR appear later in the +option string. Lastly, \fBsuffix\fR, when in \s-1AT&T\s0 mode, +instructs the disassembler to print a mnemonic suffix even when the +suffix could be inferred by the operands. +.Sp +For \s-1PPC\s0, \fBbooke\fR, \fBbooke32\fR and \fBbooke64\fR select +disassembly of BookE instructions. \fB32\fR and \fB64\fR select +PowerPC and PowerPC64 disassembly, respectively. \fBe300\fR selects +disassembly for the e300 family. \fB440\fR selects disassembly for +the PowerPC 440. +.Sp +For \s-1MIPS\s0, this option controls the printing of instruction mnemonic +names and register names in disassembled instructions. Multiple +selections from the following may be specified as a comma separated +string, and invalid options are ignored: +.RS 4 +.ie n .IP """no\-aliases""" 4 +.el .IP "\f(CWno\-aliases\fR" 4 +.IX Item "no-aliases" +Print the 'raw' instruction mnemonic instead of some pseudo +instruction mnemonic. I.e., print 'daddu' or 'or' instead of 'move', +\&'sll' instead of 'nop', etc. +.ie n .IP """gpr\-names=\f(CI\s-1ABI\s0\f(CW""" 4 +.el .IP "\f(CWgpr\-names=\f(CI\s-1ABI\s0\f(CW\fR" 4 +.IX Item "gpr-names=ABI" +Print \s-1GPR\s0 (general\-purpose register) names as appropriate +for the specified \s-1ABI\s0. By default, \s-1GPR\s0 names are selected according to +the \s-1ABI\s0 of the binary being disassembled. +.ie n .IP """fpr\-names=\f(CI\s-1ABI\s0\f(CW""" 4 +.el .IP "\f(CWfpr\-names=\f(CI\s-1ABI\s0\f(CW\fR" 4 +.IX Item "fpr-names=ABI" +Print \s-1FPR\s0 (floating\-point register) names as +appropriate for the specified \s-1ABI\s0. By default, \s-1FPR\s0 numbers are printed +rather than names. +.ie n .IP """cp0\-names=\f(CI\s-1ARCH\s0\f(CW""" 4 +.el .IP "\f(CWcp0\-names=\f(CI\s-1ARCH\s0\f(CW\fR" 4 +.IX Item "cp0-names=ARCH" +Print \s-1CP0\s0 (system control coprocessor; coprocessor 0) register names +as appropriate for the \s-1CPU\s0 or architecture specified by +\&\fI\s-1ARCH\s0\fR. By default, \s-1CP0\s0 register names are selected according to +the architecture and \s-1CPU\s0 of the binary being disassembled. +.ie n .IP """hwr\-names=\f(CI\s-1ARCH\s0\f(CW""" 4 +.el .IP "\f(CWhwr\-names=\f(CI\s-1ARCH\s0\f(CW\fR" 4 +.IX Item "hwr-names=ARCH" +Print \s-1HWR\s0 (hardware register, used by the \f(CW\*(C`rdhwr\*(C'\fR instruction) names +as appropriate for the \s-1CPU\s0 or architecture specified by +\&\fI\s-1ARCH\s0\fR. By default, \s-1HWR\s0 names are selected according to +the architecture and \s-1CPU\s0 of the binary being disassembled. +.ie n .IP """reg\-names=\f(CI\s-1ABI\s0\f(CW""" 4 +.el .IP "\f(CWreg\-names=\f(CI\s-1ABI\s0\f(CW\fR" 4 +.IX Item "reg-names=ABI" +Print \s-1GPR\s0 and \s-1FPR\s0 names as appropriate for the selected \s-1ABI\s0. +.ie n .IP """reg\-names=\f(CI\s-1ARCH\s0\f(CW""" 4 +.el .IP "\f(CWreg\-names=\f(CI\s-1ARCH\s0\f(CW\fR" 4 +.IX Item "reg-names=ARCH" +Print CPU-specific register names (\s-1CP0\s0 register and \s-1HWR\s0 names) +as appropriate for the selected \s-1CPU\s0 or architecture. +.RE +.RS 4 +.Sp +For any of the options listed above, \fI\s-1ABI\s0\fR or +\&\fI\s-1ARCH\s0\fR may be specified as \fBnumeric\fR to have numbers printed +rather than names, for the selected types of registers. +You can list the available values of \fI\s-1ABI\s0\fR and \fI\s-1ARCH\s0\fR using +the \fB\-\-help\fR option. +.Sp +For \s-1VAX\s0, you can specify function entry addresses with \fB\-M +entry:0xf00ba\fR. You can use this multiple times to properly +disassemble \s-1VAX\s0 binary files that don't contain symbol tables (like +\&\s-1ROM\s0 dumps). In these cases, the function entry mask would otherwise +be decoded as \s-1VAX\s0 instructions, which would probably lead the rest +of the function being wrongly disassembled. +.RE +.IP "\fB\-p\fR" 4 +.IX Item "-p" +.PD 0 +.IP "\fB\-\-private\-headers\fR" 4 +.IX Item "--private-headers" +.PD +Print information that is specific to the object file format. The exact +information printed depends upon the object file format. For some +object file formats, no additional information is printed. +.IP "\fB\-r\fR" 4 +.IX Item "-r" +.PD 0 +.IP "\fB\-\-reloc\fR" 4 +.IX Item "--reloc" +.PD +Print the relocation entries of the file. If used with \fB\-d\fR or +\&\fB\-D\fR, the relocations are printed interspersed with the +disassembly. +.IP "\fB\-R\fR" 4 +.IX Item "-R" +.PD 0 +.IP "\fB\-\-dynamic\-reloc\fR" 4 +.IX Item "--dynamic-reloc" +.PD +Print the dynamic relocation entries of the file. This is only +meaningful for dynamic objects, such as certain types of shared +libraries. +.IP "\fB\-s\fR" 4 +.IX Item "-s" +.PD 0 +.IP "\fB\-\-full\-contents\fR" 4 +.IX Item "--full-contents" +.PD +Display the full contents of any sections requested. By default all +non-empty sections are displayed. +.IP "\fB\-S\fR" 4 +.IX Item "-S" +.PD 0 +.IP "\fB\-\-source\fR" 4 +.IX Item "--source" +.PD +Display source code intermixed with disassembly, if possible. Implies +\&\fB\-d\fR. +.IP "\fB\-\-show\-raw\-insn\fR" 4 +.IX Item "--show-raw-insn" +When disassembling instructions, print the instruction in hex as well as +in symbolic form. This is the default except when +\&\fB\-\-prefix\-addresses\fR is used. +.IP "\fB\-\-no\-show\-raw\-insn\fR" 4 +.IX Item "--no-show-raw-insn" +When disassembling instructions, do not print the instruction bytes. +This is the default when \fB\-\-prefix\-addresses\fR is used. +.IP "\fB\-W\fR" 4 +.IX Item "-W" +.PD 0 +.IP "\fB\-\-dwarf\fR" 4 +.IX Item "--dwarf" +.PD +Displays the contents of the \s-1DWARF\s0 debug sections in the file, if any +are present. +.IP "\fB\-G\fR" 4 +.IX Item "-G" +.PD 0 +.IP "\fB\-\-stabs\fR" 4 +.IX Item "--stabs" +.PD +Display the full contents of any sections requested. Display the +contents of the .stab and .stab.index and .stab.excl sections from an +\&\s-1ELF\s0 file. This is only useful on systems (such as Solaris 2.0) in which +\&\f(CW\*(C`.stab\*(C'\fR debugging symbol-table entries are carried in an \s-1ELF\s0 +section. In most other file formats, debugging symbol-table entries are +interleaved with linkage symbols, and are visible in the \fB\-\-syms\fR +output. +.IP "\fB\-\-start\-address=\fR\fIaddress\fR" 4 +.IX Item "--start-address=address" +Start displaying data at the specified address. This affects the output +of the \fB\-d\fR, \fB\-r\fR and \fB\-s\fR options. +.IP "\fB\-\-stop\-address=\fR\fIaddress\fR" 4 +.IX Item "--stop-address=address" +Stop displaying data at the specified address. This affects the output +of the \fB\-d\fR, \fB\-r\fR and \fB\-s\fR options. +.IP "\fB\-t\fR" 4 +.IX Item "-t" +.PD 0 +.IP "\fB\-\-syms\fR" 4 +.IX Item "--syms" +.PD +Print the symbol table entries of the file. +This is similar to the information provided by the \fBnm\fR program. +.IP "\fB\-T\fR" 4 +.IX Item "-T" +.PD 0 +.IP "\fB\-\-dynamic\-syms\fR" 4 +.IX Item "--dynamic-syms" +.PD +Print the dynamic symbol table entries of the file. This is only +meaningful for dynamic objects, such as certain types of shared +libraries. This is similar to the information provided by the \fBnm\fR +program when given the \fB\-D\fR (\fB\-\-dynamic\fR) option. +.IP "\fB\-\-special\-syms\fR" 4 +.IX Item "--special-syms" +When displaying symbols include those which the target considers to be +special in some way and which would not normally be of interest to the +user. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Print the version number of \fBobjdump\fR and exit. +.IP "\fB\-x\fR" 4 +.IX Item "-x" +.PD 0 +.IP "\fB\-\-all\-headers\fR" 4 +.IX Item "--all-headers" +.PD +Display all available header information, including the symbol table and +relocation entries. Using \fB\-x\fR is equivalent to specifying all of +\&\fB\-a \-f \-h \-p \-r \-t\fR. +.IP "\fB\-w\fR" 4 +.IX Item "-w" +.PD 0 +.IP "\fB\-\-wide\fR" 4 +.IX Item "--wide" +.PD +Format some lines for output devices that have more than 80 columns. +Also do not truncate symbol names when they are displayed. +.IP "\fB\-z\fR" 4 +.IX Item "-z" +.PD 0 +.IP "\fB\-\-disassemble\-zeroes\fR" 4 +.IX Item "--disassemble-zeroes" +.PD +Normally the disassembly output will skip blocks of zeroes. This +option directs the disassembler to disassemble those blocks, just like +any other data. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fInm\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/ranlib.1 b/binutils/doc/ranlib.1 new file mode 100644 index 000000000..3709015be --- /dev/null +++ b/binutils/doc/ranlib.1 @@ -0,0 +1,188 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "RANLIB 1" +.TH RANLIB 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +ranlib \- generate index to archive. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +ranlib [\fB\-vV\fR] \fIarchive\fR +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBranlib\fR generates an index to the contents of an archive and +stores it in the archive. The index lists each symbol defined by a +member of an archive that is a relocatable object file. +.PP +You may use \fBnm \-s\fR or \fBnm \-\-print\-armap\fR to list this index. +.PP +An archive with such an index speeds up linking to the library and +allows routines in the library to call each other without regard to +their placement in the archive. +.PP +The \s-1GNU\s0 \fBranlib\fR program is another form of \s-1GNU\s0 \fBar\fR; running +\&\fBranlib\fR is completely equivalent to executing \fBar \-s\fR. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Show the version number of \fBranlib\fR. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIar\fR\|(1), \fInm\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/readelf.1 b/binutils/doc/readelf.1 new file mode 100644 index 000000000..143b3ee77 --- /dev/null +++ b/binutils/doc/readelf.1 @@ -0,0 +1,376 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "READELF 1" +.TH READELF 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +readelf \- Displays information about ELF files. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +readelf [\fB\-a\fR|\fB\-\-all\fR] + [\fB\-h\fR|\fB\-\-file\-header\fR] + [\fB\-l\fR|\fB\-\-program\-headers\fR|\fB\-\-segments\fR] + [\fB\-S\fR|\fB\-\-section\-headers\fR|\fB\-\-sections\fR] + [\fB\-g\fR|\fB\-\-section\-groups\fR] + [\fB\-t\fR|\fB\-\-section\-details\fR] + [\fB\-e\fR|\fB\-\-headers\fR] + [\fB\-s\fR|\fB\-\-syms\fR|\fB\-\-symbols\fR] + [\fB\-n\fR|\fB\-\-notes\fR] + [\fB\-r\fR|\fB\-\-relocs\fR] + [\fB\-u\fR|\fB\-\-unwind\fR] + [\fB\-d\fR|\fB\-\-dynamic\fR] + [\fB\-V\fR|\fB\-\-version\-info\fR] + [\fB\-A\fR|\fB\-\-arch\-specific\fR] + [\fB\-D\fR|\fB\-\-use\-dynamic\fR] + [\fB\-x\fR |\fB\-\-hex\-dump=\fR] + [\fB\-w[liaprmfFsoR]\fR| + \fB\-\-debug\-dump\fR[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]] + [\fB\-I\fR|\fB\-histogram\fR] + [\fB\-v\fR|\fB\-\-version\fR] + [\fB\-W\fR|\fB\-\-wide\fR] + [\fB\-H\fR|\fB\-\-help\fR] + \fIelffile\fR... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBreadelf\fR displays information about one or more \s-1ELF\s0 format object +files. The options control what particular information to display. +.PP +\&\fIelffile\fR... are the object files to be examined. 32\-bit and +64\-bit \s-1ELF\s0 files are supported, as are archives containing \s-1ELF\s0 files. +.PP +This program performs a similar function to \fBobjdump\fR but it +goes into more detail and it exists independently of the \s-1BFD\s0 +library, so if there is a bug in \s-1BFD\s0 then readelf will not be +affected. +.SH "OPTIONS" +.IX Header "OPTIONS" +The long and short forms of options, shown here as alternatives, are +equivalent. At least one option besides \fB\-v\fR or \fB\-H\fR must be +given. +.IP "\fB\-a\fR" 4 +.IX Item "-a" +.PD 0 +.IP "\fB\-\-all\fR" 4 +.IX Item "--all" +.PD +Equivalent to specifying \fB\-\-file\-header\fR, +\&\fB\-\-program\-headers\fR, \fB\-\-sections\fR, \fB\-\-symbols\fR, +\&\fB\-\-relocs\fR, \fB\-\-dynamic\fR, \fB\-\-notes\fR and +\&\fB\-\-version\-info\fR. +.IP "\fB\-h\fR" 4 +.IX Item "-h" +.PD 0 +.IP "\fB\-\-file\-header\fR" 4 +.IX Item "--file-header" +.PD +Displays the information contained in the \s-1ELF\s0 header at the start of the +file. +.IP "\fB\-l\fR" 4 +.IX Item "-l" +.PD 0 +.IP "\fB\-\-program\-headers\fR" 4 +.IX Item "--program-headers" +.IP "\fB\-\-segments\fR" 4 +.IX Item "--segments" +.PD +Displays the information contained in the file's segment headers, if it +has any. +.IP "\fB\-S\fR" 4 +.IX Item "-S" +.PD 0 +.IP "\fB\-\-sections\fR" 4 +.IX Item "--sections" +.IP "\fB\-\-section\-headers\fR" 4 +.IX Item "--section-headers" +.PD +Displays the information contained in the file's section headers, if it +has any. +.IP "\fB\-g\fR" 4 +.IX Item "-g" +.PD 0 +.IP "\fB\-\-section\-groups\fR" 4 +.IX Item "--section-groups" +.PD +Displays the information contained in the file's section groups, if it +has any. +.IP "\fB\-t\fR" 4 +.IX Item "-t" +.PD 0 +.IP "\fB\-\-section\-details\fR" 4 +.IX Item "--section-details" +.PD +Displays the detailed section information. Implies \fB\-S\fR. +.IP "\fB\-s\fR" 4 +.IX Item "-s" +.PD 0 +.IP "\fB\-\-symbols\fR" 4 +.IX Item "--symbols" +.IP "\fB\-\-syms\fR" 4 +.IX Item "--syms" +.PD +Displays the entries in symbol table section of the file, if it has one. +.IP "\fB\-e\fR" 4 +.IX Item "-e" +.PD 0 +.IP "\fB\-\-headers\fR" 4 +.IX Item "--headers" +.PD +Display all the headers in the file. Equivalent to \fB\-h \-l \-S\fR. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +.PD 0 +.IP "\fB\-\-notes\fR" 4 +.IX Item "--notes" +.PD +Displays the contents of the \s-1NOTE\s0 segments and/or sections, if any. +.IP "\fB\-r\fR" 4 +.IX Item "-r" +.PD 0 +.IP "\fB\-\-relocs\fR" 4 +.IX Item "--relocs" +.PD +Displays the contents of the file's relocation section, if it has one. +.IP "\fB\-u\fR" 4 +.IX Item "-u" +.PD 0 +.IP "\fB\-\-unwind\fR" 4 +.IX Item "--unwind" +.PD +Displays the contents of the file's unwind section, if it has one. Only +the unwind sections for \s-1IA64\s0 \s-1ELF\s0 files are currently supported. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +.PD 0 +.IP "\fB\-\-dynamic\fR" 4 +.IX Item "--dynamic" +.PD +Displays the contents of the file's dynamic section, if it has one. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\-info\fR" 4 +.IX Item "--version-info" +.PD +Displays the contents of the version sections in the file, it they +exist. +.IP "\fB\-A\fR" 4 +.IX Item "-A" +.PD 0 +.IP "\fB\-\-arch\-specific\fR" 4 +.IX Item "--arch-specific" +.PD +Displays architecture-specific information in the file, if there +is any. +.IP "\fB\-D\fR" 4 +.IX Item "-D" +.PD 0 +.IP "\fB\-\-use\-dynamic\fR" 4 +.IX Item "--use-dynamic" +.PD +When displaying symbols, this option makes \fBreadelf\fR use the +symbol table in the file's dynamic section, rather than the one in the +symbols section. +.IP "\fB\-x \fR" 4 +.IX Item "-x " +.PD 0 +.IP "\fB\-\-hex\-dump=\fR" 4 +.IX Item "--hex-dump=" +.PD +Displays the contents of the indicated section as a hexadecimal dump. +A number identifies a particular section by index in the section table; +any other string identifies all sections with that name in the object file. +.IP "\fB\-w[liaprmfFsoR]\fR" 4 +.IX Item "-w[liaprmfFsoR]" +.PD 0 +.IP "\fB\-\-debug\-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]\fR" 4 +.IX Item "--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]" +.PD +Displays the contents of the debug sections in the file, if any are +present. If one of the optional letters or words follows the switch +then only data found in those specific sections will be dumped. +.IP "\fB\-I\fR" 4 +.IX Item "-I" +.PD 0 +.IP "\fB\-\-histogram\fR" 4 +.IX Item "--histogram" +.PD +Display a histogram of bucket list lengths when displaying the contents +of the symbol tables. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Display the version number of readelf. +.IP "\fB\-W\fR" 4 +.IX Item "-W" +.PD 0 +.IP "\fB\-\-wide\fR" 4 +.IX Item "--wide" +.PD +Don't break output lines to fit into 80 columns. By default +\&\fBreadelf\fR breaks section header and segment listing lines for +64\-bit \s-1ELF\s0 files, so that they fit into 80 columns. This option causes +\&\fBreadelf\fR to print each section header resp. each segment one a +single line, which is far more readable on terminals wider than 80 columns. +.IP "\fB\-H\fR" 4 +.IX Item "-H" +.PD 0 +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +.PD +Display the command line options understood by \fBreadelf\fR. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/size.1 b/binutils/doc/size.1 new file mode 100644 index 000000000..91072b33c --- /dev/null +++ b/binutils/doc/size.1 @@ -0,0 +1,268 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "SIZE 1" +.TH SIZE 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +size \- list section sizes and total size. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +size [\fB\-A\fR|\fB\-B\fR|\fB\-\-format=\fR\fIcompatibility\fR] + [\fB\-\-help\fR] + [\fB\-d\fR|\fB\-o\fR|\fB\-x\fR|\fB\-\-radix=\fR\fInumber\fR] + [\fB\-\-common\fR] + [\fB\-t\fR|\fB\-\-totals\fR] + [\fB\-\-target=\fR\fIbfdname\fR] [\fB\-V\fR|\fB\-\-version\fR] + [\fIobjfile\fR...] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The \s-1GNU\s0 \fBsize\fR utility lists the section sizes\-\-\-and the total +size\-\-\-for each of the object or archive files \fIobjfile\fR in its +argument list. By default, one line of output is generated for each +object file or each module in an archive. +.PP +\&\fIobjfile\fR... are the object files to be examined. +If none are specified, the file \f(CW\*(C`a.out\*(C'\fR will be used. +.SH "OPTIONS" +.IX Header "OPTIONS" +The command line options have the following meanings: +.IP "\fB\-A\fR" 4 +.IX Item "-A" +.PD 0 +.IP "\fB\-B\fR" 4 +.IX Item "-B" +.IP "\fB\-\-format=\fR\fIcompatibility\fR" 4 +.IX Item "--format=compatibility" +.PD +Using one of these options, you can choose whether the output from \s-1GNU\s0 +\&\fBsize\fR resembles output from System V \fBsize\fR (using \fB\-A\fR, +or \fB\-\-format=sysv\fR), or Berkeley \fBsize\fR (using \fB\-B\fR, or +\&\fB\-\-format=berkeley\fR). The default is the one-line format similar to +Berkeley's. +.Sp +Here is an example of the Berkeley (default) format of output from +\&\fBsize\fR: +.Sp +.Vb 4 +\& $ size \-\-format=Berkeley ranlib size +\& text data bss dec hex filename +\& 294880 81920 11592 388392 5ed28 ranlib +\& 294880 81920 11888 388688 5ee50 size +.Ve +.Sp +This is the same data, but displayed closer to System V conventions: +.Sp +.Vb 7 +\& $ size \-\-format=SysV ranlib size +\& ranlib : +\& section size addr +\& .text 294880 8192 +\& .data 81920 303104 +\& .bss 11592 385024 +\& Total 388392 +.Ve +.Sp +.Vb 6 +\& size : +\& section size addr +\& .text 294880 8192 +\& .data 81920 303104 +\& .bss 11888 385024 +\& Total 388688 +.Ve +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +Show a summary of acceptable arguments and options. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +.PD 0 +.IP "\fB\-o\fR" 4 +.IX Item "-o" +.IP "\fB\-x\fR" 4 +.IX Item "-x" +.IP "\fB\-\-radix=\fR\fInumber\fR" 4 +.IX Item "--radix=number" +.PD +Using one of these options, you can control whether the size of each +section is given in decimal (\fB\-d\fR, or \fB\-\-radix=10\fR); octal +(\fB\-o\fR, or \fB\-\-radix=8\fR); or hexadecimal (\fB\-x\fR, or +\&\fB\-\-radix=16\fR). In \fB\-\-radix=\fR\fInumber\fR, only the three +values (8, 10, 16) are supported. The total size is always given in two +radices; decimal and hexadecimal for \fB\-d\fR or \fB\-x\fR output, or +octal and hexadecimal if you're using \fB\-o\fR. +.IP "\fB\-\-common\fR" 4 +.IX Item "--common" +Print total size of common symbols in each file. When using Berkeley +format these are included in the bss size. +.IP "\fB\-t\fR" 4 +.IX Item "-t" +.PD 0 +.IP "\fB\-\-totals\fR" 4 +.IX Item "--totals" +.PD +Show totals of all objects listed (Berkeley format listing mode only). +.IP "\fB\-\-target=\fR\fIbfdname\fR" 4 +.IX Item "--target=bfdname" +Specify that the object-code format for \fIobjfile\fR is +\&\fIbfdname\fR. This option may not be necessary; \fBsize\fR can +automatically recognize many formats. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Display the version number of \fBsize\fR. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/strings.1 b/binutils/doc/strings.1 new file mode 100644 index 000000000..a5f8e69ef --- /dev/null +++ b/binutils/doc/strings.1 @@ -0,0 +1,253 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "STRINGS 1" +.TH STRINGS 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +strings \- print the strings of printable characters in files. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +strings [\fB\-afov\fR] [\fB\-\fR\fImin-len\fR] + [\fB\-n\fR \fImin-len\fR] [\fB\-\-bytes=\fR\fImin-len\fR] + [\fB\-t\fR \fIradix\fR] [\fB\-\-radix=\fR\fIradix\fR] + [\fB\-e\fR \fIencoding\fR] [\fB\-\-encoding=\fR\fIencoding\fR] + [\fB\-\fR] [\fB\-\-all\fR] [\fB\-\-print\-file\-name\fR] + [\fB\-T\fR \fIbfdname\fR] [\fB\-\-target=\fR\fIbfdname\fR] + [\fB\-\-help\fR] [\fB\-\-version\fR] \fIfile\fR... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +For each \fIfile\fR given, \s-1GNU\s0 \fBstrings\fR prints the printable +character sequences that are at least 4 characters long (or the number +given with the options below) and are followed by an unprintable +character. By default, it only prints the strings from the initialized +and loaded sections of object files; for other types of files, it prints +the strings from the whole file. +.PP +\&\fBstrings\fR is mainly useful for determining the contents of non-text +files. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-a\fR" 4 +.IX Item "-a" +.PD 0 +.IP "\fB\-\-all\fR" 4 +.IX Item "--all" +.IP "\fB\-\fR" 4 +.IX Item "-" +.PD +Do not scan only the initialized and loaded sections of object files; +scan the whole files. +.IP "\fB\-f\fR" 4 +.IX Item "-f" +.PD 0 +.IP "\fB\-\-print\-file\-name\fR" 4 +.IX Item "--print-file-name" +.PD +Print the name of the file before each string. +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +Print a summary of the program usage on the standard output and exit. +.IP "\fB\-\fR\fImin-len\fR" 4 +.IX Item "-min-len" +.PD 0 +.IP "\fB\-n\fR \fImin-len\fR" 4 +.IX Item "-n min-len" +.IP "\fB\-\-bytes=\fR\fImin-len\fR" 4 +.IX Item "--bytes=min-len" +.PD +Print sequences of characters that are at least \fImin-len\fR characters +long, instead of the default 4. +.IP "\fB\-o\fR" 4 +.IX Item "-o" +Like \fB\-t o\fR. Some other versions of \fBstrings\fR have \fB\-o\fR +act like \fB\-t d\fR instead. Since we can not be compatible with both +ways, we simply chose one. +.IP "\fB\-t\fR \fIradix\fR" 4 +.IX Item "-t radix" +.PD 0 +.IP "\fB\-\-radix=\fR\fIradix\fR" 4 +.IX Item "--radix=radix" +.PD +Print the offset within the file before each string. The single +character argument specifies the radix of the offset\-\-\-\fBo\fR for +octal, \fBx\fR for hexadecimal, or \fBd\fR for decimal. +.IP "\fB\-e\fR \fIencoding\fR" 4 +.IX Item "-e encoding" +.PD 0 +.IP "\fB\-\-encoding=\fR\fIencoding\fR" 4 +.IX Item "--encoding=encoding" +.PD +Select the character encoding of the strings that are to be found. +Possible values for \fIencoding\fR are: \fBs\fR = single\-7\-bit\-byte +characters (\s-1ASCII\s0, \s-1ISO\s0 8859, etc., default), \fBS\fR = +single\-8\-bit\-byte characters, \fBb\fR = 16\-bit bigendian, \fBl\fR = +16\-bit littleendian, \fBB\fR = 32\-bit bigendian, \fBL\fR = 32\-bit +littleendian. Useful for finding wide character strings. +.IP "\fB\-T\fR \fIbfdname\fR" 4 +.IX Item "-T bfdname" +.PD 0 +.IP "\fB\-\-target=\fR\fIbfdname\fR" 4 +.IX Item "--target=bfdname" +.PD +Specify an object code format other than your system's default format. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Print the program version number on the standard output and exit. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), \fIreadelf\fR\|(1) +and the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/strip.1 b/binutils/doc/strip.1 new file mode 100644 index 000000000..2ef5315a3 --- /dev/null +++ b/binutils/doc/strip.1 @@ -0,0 +1,391 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "STRIP 1" +.TH STRIP 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +strip \- Discard symbols from object files. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +strip [\fB\-F\fR \fIbfdname\fR |\fB\-\-target=\fR\fIbfdname\fR] + [\fB\-I\fR \fIbfdname\fR |\fB\-\-input\-target=\fR\fIbfdname\fR] + [\fB\-O\fR \fIbfdname\fR |\fB\-\-output\-target=\fR\fIbfdname\fR] + [\fB\-s\fR|\fB\-\-strip\-all\fR] + [\fB\-S\fR|\fB\-g\fR|\fB\-d\fR|\fB\-\-strip\-debug\fR] + [\fB\-K\fR \fIsymbolname\fR |\fB\-\-keep\-symbol=\fR\fIsymbolname\fR] + [\fB\-N\fR \fIsymbolname\fR |\fB\-\-strip\-symbol=\fR\fIsymbolname\fR] + [\fB\-w\fR|\fB\-\-wildcard\fR] + [\fB\-x\fR|\fB\-\-discard\-all\fR] [\fB\-X\fR |\fB\-\-discard\-locals\fR] + [\fB\-R\fR \fIsectionname\fR |\fB\-\-remove\-section=\fR\fIsectionname\fR] + [\fB\-o\fR \fIfile\fR] [\fB\-p\fR|\fB\-\-preserve\-dates\fR] + [\fB\-\-keep\-file\-symbols\fR] + [\fB\-\-only\-keep\-debug\fR] + [\fB\-v\fR |\fB\-\-verbose\fR] [\fB\-V\fR|\fB\-\-version\fR] + [\fB\-\-help\fR] [\fB\-\-info\fR] + \fIobjfile\fR... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1GNU\s0 \fBstrip\fR discards all symbols from object files +\&\fIobjfile\fR. The list of object files may include archives. +At least one object file must be given. +.PP +\&\fBstrip\fR modifies the files named in its argument, +rather than writing modified copies under different names. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-F\fR \fIbfdname\fR" 4 +.IX Item "-F bfdname" +.PD 0 +.IP "\fB\-\-target=\fR\fIbfdname\fR" 4 +.IX Item "--target=bfdname" +.PD +Treat the original \fIobjfile\fR as a file with the object +code format \fIbfdname\fR, and rewrite it in the same format. +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +Show a summary of the options to \fBstrip\fR and exit. +.IP "\fB\-\-info\fR" 4 +.IX Item "--info" +Display a list showing all architectures and object formats available. +.IP "\fB\-I\fR \fIbfdname\fR" 4 +.IX Item "-I bfdname" +.PD 0 +.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4 +.IX Item "--input-target=bfdname" +.PD +Treat the original \fIobjfile\fR as a file with the object +code format \fIbfdname\fR. +.IP "\fB\-O\fR \fIbfdname\fR" 4 +.IX Item "-O bfdname" +.PD 0 +.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4 +.IX Item "--output-target=bfdname" +.PD +Replace \fIobjfile\fR with a file in the output format \fIbfdname\fR. +.IP "\fB\-R\fR \fIsectionname\fR" 4 +.IX Item "-R sectionname" +.PD 0 +.IP "\fB\-\-remove\-section=\fR\fIsectionname\fR" 4 +.IX Item "--remove-section=sectionname" +.PD +Remove any section named \fIsectionname\fR from the output file. This +option may be given more than once. Note that using this option +inappropriately may make the output file unusable. +.IP "\fB\-s\fR" 4 +.IX Item "-s" +.PD 0 +.IP "\fB\-\-strip\-all\fR" 4 +.IX Item "--strip-all" +.PD +Remove all symbols. +.IP "\fB\-g\fR" 4 +.IX Item "-g" +.PD 0 +.IP "\fB\-S\fR" 4 +.IX Item "-S" +.IP "\fB\-d\fR" 4 +.IX Item "-d" +.IP "\fB\-\-strip\-debug\fR" 4 +.IX Item "--strip-debug" +.PD +Remove debugging symbols only. +.IP "\fB\-\-strip\-unneeded\fR" 4 +.IX Item "--strip-unneeded" +Remove all symbols that are not needed for relocation processing. +.IP "\fB\-K\fR \fIsymbolname\fR" 4 +.IX Item "-K symbolname" +.PD 0 +.IP "\fB\-\-keep\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--keep-symbol=symbolname" +.PD +When stripping symbols, keep symbol \fIsymbolname\fR even if it would +normally be stripped. This option may be given more than once. +.IP "\fB\-N\fR \fIsymbolname\fR" 4 +.IX Item "-N symbolname" +.PD 0 +.IP "\fB\-\-strip\-symbol=\fR\fIsymbolname\fR" 4 +.IX Item "--strip-symbol=symbolname" +.PD +Remove symbol \fIsymbolname\fR from the source file. This option may be +given more than once, and may be combined with strip options other than +\&\fB\-K\fR. +.IP "\fB\-o\fR \fIfile\fR" 4 +.IX Item "-o file" +Put the stripped output in \fIfile\fR, rather than replacing the +existing file. When this argument is used, only one \fIobjfile\fR +argument may be specified. +.IP "\fB\-p\fR" 4 +.IX Item "-p" +.PD 0 +.IP "\fB\-\-preserve\-dates\fR" 4 +.IX Item "--preserve-dates" +.PD +Preserve the access and modification dates of the file. +.IP "\fB\-w\fR" 4 +.IX Item "-w" +.PD 0 +.IP "\fB\-\-wildcard\fR" 4 +.IX Item "--wildcard" +.PD +Permit regular expressions in \fIsymbolname\fRs used in other command +line options. The question mark (?), asterisk (*), backslash (\e) and +square brackets ([]) operators can be used anywhere in the symbol +name. If the first character of the symbol name is the exclamation +point (!) then the sense of the switch is reversed for that symbol. +For example: +.Sp +.Vb 1 +\& \-w \-K !foo \-K fo* +.Ve +.Sp +would cause strip to only keep symbols that start with the letters +\&\*(L"fo\*(R", but to discard the symbol \*(L"foo\*(R". +.IP "\fB\-x\fR" 4 +.IX Item "-x" +.PD 0 +.IP "\fB\-\-discard\-all\fR" 4 +.IX Item "--discard-all" +.PD +Remove non-global symbols. +.IP "\fB\-X\fR" 4 +.IX Item "-X" +.PD 0 +.IP "\fB\-\-discard\-locals\fR" 4 +.IX Item "--discard-locals" +.PD +Remove compiler-generated local symbols. +(These usually start with \fBL\fR or \fB.\fR.) +.IP "\fB\-\-keep\-file\-symbols\fR" 4 +.IX Item "--keep-file-symbols" +When stripping a file, perhaps with \fB\-\-strip\-debug\fR or +\&\fB\-\-strip\-unneeded\fR, retain any symbols specifying source file names, +which would otherwise get stripped. +.IP "\fB\-\-only\-keep\-debug\fR" 4 +.IX Item "--only-keep-debug" +Strip a file, removing contents of any sections that would not be +stripped by \fB\-\-strip\-debug\fR and leaving the debugging sections +intact. In \s-1ELF\s0 files, this preserves all note sections in the output. +.Sp +The intention is that this option will be used in conjunction with +\&\fB\-\-add\-gnu\-debuglink\fR to create a two part executable. One a +stripped binary which will occupy less space in \s-1RAM\s0 and in a +distribution and the second a debugging information file which is only +needed if debugging abilities are required. The suggested procedure +to create these files is as follows: +.RS 4 +.IP "1." 4 +.IX Item "1." +\&\f(CW\*(C`foo\*(C'\fR then... +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +create a file containing the debugging info. +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +stripped executable. +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +to add a link to the debugging info into the stripped executable. +.RE +.RS 4 +.Sp +Note \- the choice of \f(CW\*(C`.dbg\*(C'\fR as an extension for the debug info +file is arbitrary. Also the \f(CW\*(C`\-\-only\-keep\-debug\*(C'\fR step is +optional. You could instead do this: +.IP "1." 4 +.IX Item "1." +.PD 0 +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." +.RE +.RS 4 +.PD +.Sp +ie the file pointed to by the \fB\-\-add\-gnu\-debuglink\fR can be the +full executable. It does not have to be a file created by the +\&\fB\-\-only\-keep\-debug\fR switch. +.Sp +Note \- this switch is only intended for use on fully linked files. It +does not make sense to use it on object files where the debugging +information may be incomplete. Besides the gnu_debuglink feature +currently only supports the presence of one filename containing +debugging information, not multiple filenames on a one-per-object-file +basis. +.RE +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Show the version number for \fBstrip\fR. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-\-verbose\fR" 4 +.IX Item "--verbose" +.PD +Verbose output: list all object files modified. In the case of +archives, \fBstrip \-v\fR lists all members of the archive. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/windmc.1 b/binutils/doc/windmc.1 new file mode 100644 index 000000000..b1292c691 --- /dev/null +++ b/binutils/doc/windmc.1 @@ -0,0 +1,352 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "WINDMC 1" +.TH WINDMC 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +windmc \- generates Windows message resources. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBwindmc\fR reads message definitions from an input file (.mc) and +translate them into a set of output files. The output files may be of +four kinds: +.ie n .IP """h""" 4 +.el .IP "\f(CWh\fR" 4 +.IX Item "h" +A C header file containing the message definitions. +.ie n .IP """rc""" 4 +.el .IP "\f(CWrc\fR" 4 +.IX Item "rc" +A resource file compilable by the \fBwindres\fR tool. +.ie n .IP """bin""" 4 +.el .IP "\f(CWbin\fR" 4 +.IX Item "bin" +One or more binary files containing the resource data for a specific +message language. +.ie n .IP """dbg""" 4 +.el .IP "\f(CWdbg\fR" 4 +.IX Item "dbg" +A C include file that maps message id's to their symbolic name. +.PP +The exact description of these different formats is available in +documentation from Microsoft. +.PP +When \fBwindmc\fR converts from the \f(CW\*(C`mc\*(C'\fR format to the \f(CW\*(C`bin\*(C'\fR +format, \f(CW\*(C`rc\*(C'\fR, \f(CW\*(C`h\*(C'\fR, and optional \f(CW\*(C`dbg\*(C'\fR it is acting like the +Windows Message Compiler. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-a\fR" 4 +.IX Item "-a" +.PD 0 +.IP "\fB\-\-ascii_in\fR" 4 +.IX Item "--ascii_in" +.PD +Specifies that the input file specified is \s-1ANSI\s0. This is the default +behaviour. +.IP "\fB\-A\fR" 4 +.IX Item "-A" +.PD 0 +.IP "\fB\-\-ascii_out\fR" 4 +.IX Item "--ascii_out" +.PD +Specifies that messages in the output \f(CW\*(C`bin\*(C'\fR files should be in \s-1ANSI\s0 +format. +.IP "\fB\-b\fR" 4 +.IX Item "-b" +.PD 0 +.IP "\fB\-\-binprefix\fR" 4 +.IX Item "--binprefix" +.PD +Specifies that \f(CW\*(C`bin\*(C'\fR filenames should have to be prefixed by the +basename of the source file. +.IP "\fB\-c\fR" 4 +.IX Item "-c" +.PD 0 +.IP "\fB\-\-customflag\fR" 4 +.IX Item "--customflag" +.PD +Sets the customer bit in all message id's. +.IP "\fB\-C\fR \fIcodepage\fR" 4 +.IX Item "-C codepage" +.PD 0 +.IP "\fB\-\-codepage_in\fR \fIcodepage\fR" 4 +.IX Item "--codepage_in codepage" +.PD +Sets the default codepage to be used to convert input file to \s-1UTF16\s0. The +default is ocdepage 1252. +.IP "\fB\-d\fR" 4 +.IX Item "-d" +.PD 0 +.IP "\fB\-\-decimal_values\fR" 4 +.IX Item "--decimal_values" +.PD +Outputs the constants in the header file in decimal. Default is using +hexadecimal output. +.IP "\fB\-e\fR \fIext\fR" 4 +.IX Item "-e ext" +.PD 0 +.IP "\fB\-\-extension\fR \fIext\fR" 4 +.IX Item "--extension ext" +.PD +The extension for the header file. The default is .h extension. +.IP "\fB\-F\fR \fItarget\fR" 4 +.IX Item "-F target" +.PD 0 +.IP "\fB\-\-target\fR \fItarget\fR" 4 +.IX Item "--target target" +.PD +Specify the \s-1BFD\s0 format to use for a bin file as output. This +is a \s-1BFD\s0 target name; you can use the \fB\-\-help\fR option to see a list +of supported targets. Normally \fBwindmc\fR will use the default +format, which is the first one listed by the \fB\-\-help\fR option. +.IP "\fB\-h\fR \fIpath\fR" 4 +.IX Item "-h path" +.PD 0 +.IP "\fB\-\-headerdir\fR \fIpath\fR" 4 +.IX Item "--headerdir path" +.PD +The target directory of the generated header file. The default is the +current directory. +.IP "\fB\-H\fR" 4 +.IX Item "-H" +.PD 0 +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +.PD +Displays a list of command line options and then exits. +.IP "\fB\-m\fR \fIcharacters\fR" 4 +.IX Item "-m characters" +.PD 0 +.IP "\fB\-\-maxlength\fR \fIcharacters\fR" 4 +.IX Item "--maxlength characters" +.PD +Instructs \fBwindmc\fR to generate a warning if the length +of any message exceeds the number specified. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +.PD 0 +.IP "\fB\-\-nullterminate\fR" 4 +.IX Item "--nullterminate" +.PD +Terminate message text in \f(CW\*(C`bin\*(C'\fR files by zero. By default they are +terminated by \s-1CR/LF\s0. +.IP "\fB\-o\fR" 4 +.IX Item "-o" +.PD 0 +.IP "\fB\-\-hresult_use\fR" 4 +.IX Item "--hresult_use" +.PD +Not yet implemented. Instructs \f(CW\*(C`windmc\*(C'\fR to generate an \s-1OLE2\s0 header +file, using \s-1HRESULT\s0 definitions. Status codes are used if the flag is not +specified. +.IP "\fB\-O\fR \fIcodepage\fR" 4 +.IX Item "-O codepage" +.PD 0 +.IP "\fB\-\-codepage_out\fR \fIcodepage\fR" 4 +.IX Item "--codepage_out codepage" +.PD +Sets the default codepage to be used to output text files. The default +is ocdepage 1252. +.IP "\fB\-r\fR \fIpath\fR" 4 +.IX Item "-r path" +.PD 0 +.IP "\fB\-\-rcdir\fR \fIpath\fR" 4 +.IX Item "--rcdir path" +.PD +The target directory for the generated \f(CW\*(C`rc\*(C'\fR script and the generated +\&\f(CW\*(C`bin\*(C'\fR files that the resource compiler script includes. The default +is the current directory. +.IP "\fB\-u\fR" 4 +.IX Item "-u" +.PD 0 +.IP "\fB\-\-unicode_in\fR" 4 +.IX Item "--unicode_in" +.PD +Specifies that the input file is \s-1UTF16\s0. +.IP "\fB\-U\fR" 4 +.IX Item "-U" +.PD 0 +.IP "\fB\-\-unicode_out\fR" 4 +.IX Item "--unicode_out" +.PD +Specifies that messages in the output \f(CW\*(C`bin\*(C'\fR file should be in \s-1UTF16\s0 +format. This is the default behaviour. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-\-verbose\fR" 4 +.IX Item "--verbose" +.PD +Enable verbose mode. This tells you what the preprocessor is if you +didn't specify one. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Prints the version number for \fBwindres\fR. +.IP "\fB\-x\fR \fIpath\fR" 4 +.IX Item "-x path" +.PD 0 +.IP "\fB\-\-xdgb\fR \fIpath\fR" 4 +.IX Item "--xdgb path" +.PD +The path of the \f(CW\*(C`dbg\*(C'\fR C include file that maps message id's to the +symbolic name. No such file is generated without specifying the switch. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/doc/windres.1 b/binutils/doc/windres.1 new file mode 100644 index 000000000..6628bd363 --- /dev/null +++ b/binutils/doc/windres.1 @@ -0,0 +1,354 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "WINDRES 1" +.TH WINDRES 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +windres \- manipulate Windows resources. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +windmc [options] input-file +windres [options] [input\-file] [output\-file] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBwindres\fR reads resources from an input file and copies them into +an output file. Either file may be in one of three formats: +.ie n .IP """rc""" 4 +.el .IP "\f(CWrc\fR" 4 +.IX Item "rc" +A text format read by the Resource Compiler. +.ie n .IP """res""" 4 +.el .IP "\f(CWres\fR" 4 +.IX Item "res" +A binary format generated by the Resource Compiler. +.ie n .IP """coff""" 4 +.el .IP "\f(CWcoff\fR" 4 +.IX Item "coff" +A \s-1COFF\s0 object or executable. +.PP +The exact description of these different formats is available in +documentation from Microsoft. +.PP +When \fBwindres\fR converts from the \f(CW\*(C`rc\*(C'\fR format to the \f(CW\*(C`res\*(C'\fR +format, it is acting like the Windows Resource Compiler. When +\&\fBwindres\fR converts from the \f(CW\*(C`res\*(C'\fR format to the \f(CW\*(C`coff\*(C'\fR +format, it is acting like the Windows \f(CW\*(C`CVTRES\*(C'\fR program. +.PP +When \fBwindres\fR generates an \f(CW\*(C`rc\*(C'\fR file, the output is similar +but not identical to the format expected for the input. When an input +\&\f(CW\*(C`rc\*(C'\fR file refers to an external filename, an output \f(CW\*(C`rc\*(C'\fR file +will instead include the file contents. +.PP +If the input or output format is not specified, \fBwindres\fR will +guess based on the file name, or, for the input file, the file contents. +A file with an extension of \fI.rc\fR will be treated as an \f(CW\*(C`rc\*(C'\fR +file, a file with an extension of \fI.res\fR will be treated as a +\&\f(CW\*(C`res\*(C'\fR file, and a file with an extension of \fI.o\fR or +\&\fI.exe\fR will be treated as a \f(CW\*(C`coff\*(C'\fR file. +.PP +If no output file is specified, \fBwindres\fR will print the resources +in \f(CW\*(C`rc\*(C'\fR format to standard output. +.PP +The normal use is for you to write an \f(CW\*(C`rc\*(C'\fR file, use \fBwindres\fR +to convert it to a \s-1COFF\s0 object file, and then link the \s-1COFF\s0 file into +your application. This will make the resources described in the +\&\f(CW\*(C`rc\*(C'\fR file available to Windows. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-i\fR \fIfilename\fR" 4 +.IX Item "-i filename" +.PD 0 +.IP "\fB\-\-input\fR \fIfilename\fR" 4 +.IX Item "--input filename" +.PD +The name of the input file. If this option is not used, then +\&\fBwindres\fR will use the first non-option argument as the input file +name. If there are no non-option arguments, then \fBwindres\fR will +read from standard input. \fBwindres\fR can not read a \s-1COFF\s0 file from +standard input. +.IP "\fB\-o\fR \fIfilename\fR" 4 +.IX Item "-o filename" +.PD 0 +.IP "\fB\-\-output\fR \fIfilename\fR" 4 +.IX Item "--output filename" +.PD +The name of the output file. If this option is not used, then +\&\fBwindres\fR will use the first non-option argument, after any used +for the input file name, as the output file name. If there is no +non-option argument, then \fBwindres\fR will write to standard output. +\&\fBwindres\fR can not write a \s-1COFF\s0 file to standard output. Note, +for compatibility with \fBrc\fR the option \fB\-fo\fR is also +accepted, but its use is not recommended. +.IP "\fB\-J\fR \fIformat\fR" 4 +.IX Item "-J format" +.PD 0 +.IP "\fB\-\-input\-format\fR \fIformat\fR" 4 +.IX Item "--input-format format" +.PD +The input format to read. \fIformat\fR may be \fBres\fR, \fBrc\fR, or +\&\fBcoff\fR. If no input format is specified, \fBwindres\fR will +guess, as described above. +.IP "\fB\-O\fR \fIformat\fR" 4 +.IX Item "-O format" +.PD 0 +.IP "\fB\-\-output\-format\fR \fIformat\fR" 4 +.IX Item "--output-format format" +.PD +The output format to generate. \fIformat\fR may be \fBres\fR, +\&\fBrc\fR, or \fBcoff\fR. If no output format is specified, +\&\fBwindres\fR will guess, as described above. +.IP "\fB\-F\fR \fItarget\fR" 4 +.IX Item "-F target" +.PD 0 +.IP "\fB\-\-target\fR \fItarget\fR" 4 +.IX Item "--target target" +.PD +Specify the \s-1BFD\s0 format to use for a \s-1COFF\s0 file as input or output. This +is a \s-1BFD\s0 target name; you can use the \fB\-\-help\fR option to see a list +of supported targets. Normally \fBwindres\fR will use the default +format, which is the first one listed by the \fB\-\-help\fR option. +.IP "\fB\-\-preprocessor\fR \fIprogram\fR" 4 +.IX Item "--preprocessor program" +When \fBwindres\fR reads an \f(CW\*(C`rc\*(C'\fR file, it runs it through the C +preprocessor first. This option may be used to specify the preprocessor +to use, including any leading arguments. The default preprocessor +argument is \f(CW\*(C`gcc \-E \-xc\-header \-DRC_INVOKED\*(C'\fR. +.IP "\fB\-I\fR \fIdirectory\fR" 4 +.IX Item "-I directory" +.PD 0 +.IP "\fB\-\-include\-dir\fR \fIdirectory\fR" 4 +.IX Item "--include-dir directory" +.PD +Specify an include directory to use when reading an \f(CW\*(C`rc\*(C'\fR file. +\&\fBwindres\fR will pass this to the preprocessor as an \fB\-I\fR +option. \fBwindres\fR will also search this directory when looking for +files named in the \f(CW\*(C`rc\*(C'\fR file. If the argument passed to this command +matches any of the supported \fIformats\fR (as described in the \fB\-J\fR +option), it will issue a deprecation warning, and behave just like the +\&\fB\-J\fR option. New programs should not use this behaviour. If a +directory happens to match a \fIformat\fR, simple prefix it with \fB./\fR +to disable the backward compatibility. +.IP "\fB\-D\fR \fItarget\fR" 4 +.IX Item "-D target" +.PD 0 +.IP "\fB\-\-define\fR \fIsym\fR\fB[=\fR\fIval\fR\fB]\fR" 4 +.IX Item "--define sym[=val]" +.PD +Specify a \fB\-D\fR option to pass to the preprocessor when reading an +\&\f(CW\*(C`rc\*(C'\fR file. +.IP "\fB\-U\fR \fItarget\fR" 4 +.IX Item "-U target" +.PD 0 +.IP "\fB\-\-undefine\fR \fIsym\fR" 4 +.IX Item "--undefine sym" +.PD +Specify a \fB\-U\fR option to pass to the preprocessor when reading an +\&\f(CW\*(C`rc\*(C'\fR file. +.IP "\fB\-r\fR" 4 +.IX Item "-r" +Ignored for compatibility with rc. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +Enable verbose mode. This tells you what the preprocessor is if you +didn't specify one. +.IP "\fB\-c\fR \fIval\fR" 4 +.IX Item "-c val" +.PD 0 +.IP "\fB\-\-codepage\fR \fIval\fR" 4 +.IX Item "--codepage val" +.PD +Specify the default codepage to use when reading an \f(CW\*(C`rc\*(C'\fR file. +\&\fIval\fR should be a hexadecimal prefixed by \fB0x\fR or decimal +codepage code. The valid range is from zero up to 0xffff, but the +validity of the codepage is host and configuration dependent. +.IP "\fB\-l\fR \fIval\fR" 4 +.IX Item "-l val" +.PD 0 +.IP "\fB\-\-language\fR \fIval\fR" 4 +.IX Item "--language val" +.PD +Specify the default language to use when reading an \f(CW\*(C`rc\*(C'\fR file. +\&\fIval\fR should be a hexadecimal language code. The low eight bits are +the language, and the high eight bits are the sublanguage. +.IP "\fB\-\-use\-temp\-file\fR" 4 +.IX Item "--use-temp-file" +Use a temporary file to instead of using popen to read the output of +the preprocessor. Use this option if the popen implementation is buggy +on the host (eg., certain non-English language versions of Windows 95 and +Windows 98 are known to have buggy popen where the output will instead +go the console). +.IP "\fB\-\-no\-use\-temp\-file\fR" 4 +.IX Item "--no-use-temp-file" +Use popen, not a temporary file, to read the output of the preprocessor. +This is the default behaviour. +.IP "\fB\-h\fR" 4 +.IX Item "-h" +.PD 0 +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +.PD +Prints a usage summary. +.IP "\fB\-V\fR" 4 +.IX Item "-V" +.PD 0 +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +.PD +Prints the version number for \fBwindres\fR. +.IP "\fB\-\-yydebug\fR" 4 +.IX Item "--yydebug" +If \fBwindres\fR is compiled with \f(CW\*(C`YYDEBUG\*(C'\fR defined as \f(CW1\fR, +this will turn on parser debugging. +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +the Info entries for \fIbinutils\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/binutils/mcparse.c b/binutils/mcparse.c new file mode 100644 index 000000000..979bf0ff3 --- /dev/null +++ b/binutils/mcparse.c @@ -0,0 +1,2156 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NL = 258, + MCIDENT = 259, + MCFILENAME = 260, + MCLINE = 261, + MCCOMMENT = 262, + MCTOKEN = 263, + MCENDLINE = 264, + MCLANGUAGENAMES = 265, + MCFACILITYNAMES = 266, + MCSEVERITYNAMES = 267, + MCOUTPUTBASE = 268, + MCMESSAGEIDTYPEDEF = 269, + MCLANGUAGE = 270, + MCMESSAGEID = 271, + MCSEVERITY = 272, + MCFACILITY = 273, + MCSYMBOLICNAME = 274, + MCNUMBER = 275 + }; +#endif +/* Tokens. */ +#define NL 258 +#define MCIDENT 259 +#define MCFILENAME 260 +#define MCLINE 261 +#define MCCOMMENT 262 +#define MCTOKEN 263 +#define MCENDLINE 264 +#define MCLANGUAGENAMES 265 +#define MCFACILITYNAMES 266 +#define MCSEVERITYNAMES 267 +#define MCOUTPUTBASE 268 +#define MCMESSAGEIDTYPEDEF 269 +#define MCLANGUAGE 270 +#define MCMESSAGEID 271 +#define MCSEVERITY 272 +#define MCFACILITY 273 +#define MCSYMBOLICNAME 274 +#define MCNUMBER 275 + + + + +/* Copy the first part of user declarations. */ +#line 1 "mcparse.y" + /* mcparse.y -- parser for Windows mc files + Copyright 2007 + Free Software Foundation, Inc. + + Parser for Windows mc files + Written by Kai Tietz, Onevision. + + This file is part of GNU Binutils. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +/* This is a parser for Windows rc files. It is based on the parser + by Gunther Ebert . */ + +#include "sysdep.h" +#include "bfd.h" +#include "bucomm.h" +#include "libiberty.h" +#include "windmc.h" +#include "safe-ctype.h" + +static rc_uint_type mc_last_id = 0; +static rc_uint_type mc_sefa_val = 0; +static unichar *mc_last_symbol = NULL; +static const mc_keyword *mc_cur_severity = NULL; +static const mc_keyword *mc_cur_facility = NULL; +static mc_node *cur_node = NULL; + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 45 "mcparse.y" +{ + rc_uint_type ival; + unichar *ustr; + const mc_keyword *tok; + mc_node *nod; +} +/* Line 187 of yacc.c. */ +#line 186 "mcparse.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 199 "mcparse.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 114 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 26 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 29 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 82 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 125 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 275 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 22, 23, 2, 25, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 24, 2, + 2, 21, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 5, 6, 9, 11, 13, 15, 17, + 23, 29, 33, 36, 42, 48, 52, 55, 61, 67, + 71, 74, 78, 82, 86, 89, 91, 94, 96, 101, + 105, 108, 110, 113, 115, 120, 124, 127, 129, 132, + 134, 141, 148, 153, 157, 160, 161, 164, 167, 168, + 173, 177, 181, 184, 185, 187, 190, 193, 194, 197, + 200, 203, 207, 211, 215, 217, 220, 225, 227, 230, + 232, 235, 237, 240, 246, 252, 258, 263, 266, 268, + 270, 271, 272 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 27, 0, -1, 28, -1, -1, 28, 29, -1, 30, + -1, 38, -1, 49, -1, 1, -1, 12, 21, 22, + 31, 23, -1, 12, 21, 22, 31, 1, -1, 12, + 21, 1, -1, 12, 1, -1, 10, 21, 22, 35, + 23, -1, 10, 21, 22, 35, 1, -1, 10, 21, + 1, -1, 10, 1, -1, 11, 21, 22, 33, 23, + -1, 11, 21, 22, 33, 1, -1, 11, 21, 1, + -1, 11, 1, -1, 13, 21, 20, -1, 14, 21, + 4, -1, 14, 21, 1, -1, 14, 1, -1, 32, + -1, 31, 32, -1, 1, -1, 51, 21, 20, 37, + -1, 51, 21, 1, -1, 51, 1, -1, 34, -1, + 33, 34, -1, 1, -1, 51, 21, 20, 37, -1, + 51, 21, 1, -1, 51, 1, -1, 36, -1, 35, + 36, -1, 1, -1, 51, 21, 20, 54, 24, 5, + -1, 51, 21, 20, 54, 24, 1, -1, 51, 21, + 20, 1, -1, 51, 21, 1, -1, 51, 1, -1, + -1, 24, 4, -1, 24, 1, -1, -1, 40, 42, + 39, 46, -1, 16, 21, 41, -1, 16, 21, 1, + -1, 16, 1, -1, -1, 20, -1, 25, 20, -1, + 25, 1, -1, -1, 42, 43, -1, 42, 44, -1, + 42, 45, -1, 17, 21, 8, -1, 18, 21, 8, + -1, 19, 21, 4, -1, 47, -1, 46, 47, -1, + 50, 53, 48, 9, -1, 6, -1, 48, 6, -1, + 1, -1, 48, 1, -1, 7, -1, 49, 7, -1, + 15, 52, 21, 8, 3, -1, 15, 52, 21, 4, + 3, -1, 15, 52, 21, 51, 1, -1, 15, 52, + 21, 1, -1, 15, 1, -1, 4, -1, 8, -1, + -1, -1, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 67, 67, 70, 72, 74, 75, 76, 81, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 103, 107, 111, 118, 119, 120, 124, 128, + 129, 133, 134, 135, 139, 143, 144, 148, 149, 150, + 154, 158, 159, 160, 161, 166, 169, 173, 178, 177, + 190, 191, 192, 196, 199, 203, 207, 212, 219, 225, + 231, 239, 247, 255, 262, 263, 267, 277, 281, 293, + 294, 297, 298, 312, 316, 321, 326, 331, 338, 339, + 343, 347, 351 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "NL", "MCIDENT", "MCFILENAME", "MCLINE", + "MCCOMMENT", "MCTOKEN", "MCENDLINE", "MCLANGUAGENAMES", + "MCFACILITYNAMES", "MCSEVERITYNAMES", "MCOUTPUTBASE", + "MCMESSAGEIDTYPEDEF", "MCLANGUAGE", "MCMESSAGEID", "MCSEVERITY", + "MCFACILITY", "MCSYMBOLICNAME", "MCNUMBER", "'='", "'('", "')'", "':'", + "'+'", "$accept", "input", "entities", "entity", "global_section", + "severitymaps", "severitymap", "facilitymaps", "facilitymap", "langmaps", + "langmap", "alias_name", "message", "@1", "id", "vid", "sefasy_def", + "severity", "facility", "symbol", "lang_entities", "lang_entity", + "lines", "comments", "lang", "token", "lex_want_nl", "lex_want_line", + "lex_want_filename", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 61, 40, 41, 58, 43 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 26, 27, 28, 28, 29, 29, 29, 29, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 31, 31, 31, 32, 32, + 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, + 36, 36, 36, 36, 36, 37, 37, 37, 39, 38, + 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, + 42, 43, 44, 45, 46, 46, 47, 48, 48, 48, + 48, 49, 49, 50, 50, 50, 50, 50, 51, 51, + 52, 53, 54 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 0, 2, 1, 1, 1, 1, 5, + 5, 3, 2, 5, 5, 3, 2, 5, 5, 3, + 2, 3, 3, 3, 2, 1, 2, 1, 4, 3, + 2, 1, 2, 1, 4, 3, 2, 1, 2, 1, + 6, 6, 4, 3, 2, 0, 2, 2, 0, 4, + 3, 3, 2, 0, 1, 2, 2, 0, 2, 2, + 2, 3, 3, 3, 1, 2, 4, 1, 2, 1, + 2, 1, 2, 5, 5, 5, 4, 2, 1, 1, + 0, 0, 0 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 3, 0, 0, 1, 8, 71, 0, 0, 0, 0, + 0, 0, 4, 5, 6, 57, 7, 16, 0, 20, + 0, 12, 0, 0, 24, 0, 52, 0, 48, 72, + 15, 0, 19, 0, 11, 0, 21, 23, 22, 51, + 54, 0, 50, 0, 0, 0, 0, 58, 59, 60, + 39, 78, 79, 0, 37, 0, 33, 0, 31, 0, + 27, 0, 25, 0, 56, 55, 0, 0, 0, 0, + 49, 64, 81, 14, 13, 38, 44, 0, 18, 17, + 32, 36, 0, 10, 9, 26, 30, 0, 61, 62, + 63, 77, 0, 65, 0, 43, 0, 35, 45, 29, + 45, 0, 69, 67, 0, 42, 0, 0, 34, 28, + 76, 78, 79, 0, 70, 68, 66, 0, 47, 46, + 74, 73, 75, 41, 40 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 1, 2, 12, 13, 61, 62, 57, 58, 53, + 54, 108, 14, 46, 15, 42, 28, 47, 48, 49, + 70, 71, 104, 16, 72, 55, 92, 94, 106 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -34 +static const yytype_int8 yypact[] = +{ + -34, 62, 70, -34, -34, -34, 15, 22, 30, -15, + 34, 37, -34, -34, -34, -34, 56, -34, 10, -34, + 12, -34, 20, 25, -34, 52, -34, 0, 80, -34, + -34, 71, -34, 84, -34, 86, -34, -34, -34, -34, + -34, 45, -34, 1, 68, 74, 76, -34, -34, -34, + -34, -34, -34, 4, -34, 38, -34, 6, -34, 39, + -34, 29, -34, 40, -34, -34, 93, 94, 99, 43, + 76, -34, -34, -34, -34, -34, -34, 46, -34, -34, + -34, -34, 47, -34, -34, -34, -34, 49, -34, -34, + -34, -34, 83, -34, 3, -34, 2, -34, 81, -34, + 81, 92, -34, -34, 48, -34, 82, 72, -34, -34, + -34, 104, 105, 108, -34, -34, -34, 73, -34, -34, + -34, -34, -34, -34, -34 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -34, -34, -34, -34, -34, -34, 50, -34, 53, -34, + 59, 13, -34, -34, -34, -34, -34, -34, -34, -34, + -34, 44, -34, -34, -34, -33, -34, -34, -34 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -83 +static const yytype_int8 yytable[] = +{ + 59, 39, 63, 105, 102, 73, 23, 78, 51, 103, + 51, 30, 52, 32, 52, -53, 17, -53, -53, -53, + 40, 34, 66, 19, 59, 41, -82, 74, 63, 79, + 83, 21, 31, 51, 33, 24, 18, 52, 26, 76, + 81, 86, 35, 20, 91, 36, 64, 95, 97, 114, + 99, 22, 84, 37, 115, 25, 38, 116, 27, 77, + 82, 87, 3, 29, -80, 65, 96, 98, 113, 100, + -2, 4, 50, 118, 123, 51, 119, 5, 124, 52, + 6, 7, 8, 9, 10, 56, 11, 60, 51, 67, + 51, 69, 52, 110, 52, 68, 111, 43, 44, 45, + 112, 88, 89, 90, 101, 107, 117, 120, 121, 122, + 80, 85, 75, 109, 93 +}; + +static const yytype_uint8 yycheck[] = +{ + 33, 1, 35, 1, 1, 1, 21, 1, 4, 6, + 4, 1, 8, 1, 8, 15, 1, 17, 18, 19, + 20, 1, 21, 1, 57, 25, 24, 23, 61, 23, + 1, 1, 22, 4, 22, 1, 21, 8, 1, 1, + 1, 1, 22, 21, 1, 20, 1, 1, 1, 1, + 1, 21, 23, 1, 6, 21, 4, 9, 21, 21, + 21, 21, 0, 7, 21, 20, 20, 20, 101, 20, + 0, 1, 1, 1, 1, 4, 4, 7, 5, 8, + 10, 11, 12, 13, 14, 1, 16, 1, 4, 21, + 4, 15, 8, 1, 8, 21, 4, 17, 18, 19, + 8, 8, 8, 4, 21, 24, 24, 3, 3, 1, + 57, 61, 53, 100, 70 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 27, 28, 0, 1, 7, 10, 11, 12, 13, + 14, 16, 29, 30, 38, 40, 49, 1, 21, 1, + 21, 1, 21, 21, 1, 21, 1, 21, 42, 7, + 1, 22, 1, 22, 1, 22, 20, 1, 4, 1, + 20, 25, 41, 17, 18, 19, 39, 43, 44, 45, + 1, 4, 8, 35, 36, 51, 1, 33, 34, 51, + 1, 31, 32, 51, 1, 20, 21, 21, 21, 15, + 46, 47, 50, 1, 23, 36, 1, 21, 1, 23, + 34, 1, 21, 1, 23, 32, 1, 21, 8, 8, + 4, 1, 52, 47, 53, 1, 20, 1, 20, 1, + 20, 21, 1, 6, 48, 1, 54, 24, 37, 37, + 1, 4, 8, 51, 1, 6, 9, 24, 1, 4, + 3, 3, 1, 1, 5 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 7: +#line 77 "mcparse.y" + { + cur_node = mc_add_node (); + cur_node->user_text = (yyvsp[(1) - (1)].ustr); + } + break; + + case 8: +#line 81 "mcparse.y" + { mc_fatal ("syntax error"); } + break; + + case 10: +#line 86 "mcparse.y" + { mc_fatal ("missing ')' in SeverityNames"); } + break; + + case 11: +#line 87 "mcparse.y" + { mc_fatal ("missing '(' in SeverityNames"); } + break; + + case 12: +#line 88 "mcparse.y" + { mc_fatal ("missing '=' for SeverityNames"); } + break; + + case 14: +#line 90 "mcparse.y" + { mc_fatal ("missing ')' in LanguageNames"); } + break; + + case 15: +#line 91 "mcparse.y" + { mc_fatal ("missing '(' in LanguageNames"); } + break; + + case 16: +#line 92 "mcparse.y" + { mc_fatal ("missing '=' for LanguageNames"); } + break; + + case 18: +#line 94 "mcparse.y" + { mc_fatal ("missing ')' in FacilityNames"); } + break; + + case 19: +#line 95 "mcparse.y" + { mc_fatal ("missing '(' in FacilityNames"); } + break; + + case 20: +#line 96 "mcparse.y" + { mc_fatal ("missing '=' for FacilityNames"); } + break; + + case 21: +#line 98 "mcparse.y" + { + if ((yyvsp[(3) - (3)].ival) != 10 && (yyvsp[(3) - (3)].ival) != 16) + mc_fatal ("OutputBase allows 10 or 16 as value"); + mcset_out_values_are_decimal = ((yyvsp[(3) - (3)].ival) == 10 ? 1 : 0); + } + break; + + case 22: +#line 104 "mcparse.y" + { + mcset_msg_id_typedef = (yyvsp[(3) - (3)].ustr); + } + break; + + case 23: +#line 108 "mcparse.y" + { + mc_fatal ("MessageIdTypedef expects an identifier"); + } + break; + + case 24: +#line 112 "mcparse.y" + { + mc_fatal ("missing '=' for MessageIdTypedef"); + } + break; + + case 27: +#line 120 "mcparse.y" + { mc_fatal ("severity ident missing"); } + break; + + case 28: +#line 125 "mcparse.y" + { + mc_add_keyword ((yyvsp[(1) - (4)].ustr), MCTOKEN, "severity", (yyvsp[(3) - (4)].ival), (yyvsp[(4) - (4)].ustr)); + } + break; + + case 29: +#line 128 "mcparse.y" + { mc_fatal ("severity number missing"); } + break; + + case 30: +#line 129 "mcparse.y" + { mc_fatal ("severity missing '='"); } + break; + + case 33: +#line 135 "mcparse.y" + { mc_fatal ("missing ident in FacilityNames"); } + break; + + case 34: +#line 140 "mcparse.y" + { + mc_add_keyword ((yyvsp[(1) - (4)].ustr), MCTOKEN, "facility", (yyvsp[(3) - (4)].ival), (yyvsp[(4) - (4)].ustr)); + } + break; + + case 35: +#line 143 "mcparse.y" + { mc_fatal ("facility number missing"); } + break; + + case 36: +#line 144 "mcparse.y" + { mc_fatal ("facility missing '='"); } + break; + + case 39: +#line 150 "mcparse.y" + { mc_fatal ("missing ident in LanguageNames"); } + break; + + case 40: +#line 155 "mcparse.y" + { + mc_add_keyword ((yyvsp[(1) - (6)].ustr), MCTOKEN, "language", (yyvsp[(3) - (6)].ival), (yyvsp[(6) - (6)].ustr)); + } + break; + + case 41: +#line 158 "mcparse.y" + { mc_fatal ("missing filename in LanguageNames"); } + break; + + case 42: +#line 159 "mcparse.y" + { mc_fatal ("missing ':' in LanguageNames"); } + break; + + case 43: +#line 160 "mcparse.y" + { mc_fatal ("missing language code in LanguageNames"); } + break; + + case 44: +#line 161 "mcparse.y" + { mc_fatal ("missing '=' for LanguageNames"); } + break; + + case 45: +#line 166 "mcparse.y" + { + (yyval.ustr) = NULL; + } + break; + + case 46: +#line 170 "mcparse.y" + { + (yyval.ustr) = (yyvsp[(2) - (2)].ustr); + } + break; + + case 47: +#line 173 "mcparse.y" + { mc_fatal ("illegal token in identifier"); (yyval.ustr) = NULL; } + break; + + case 48: +#line 178 "mcparse.y" + { + cur_node = mc_add_node (); + cur_node->symbol = mc_last_symbol; + cur_node->facility = mc_cur_facility; + cur_node->severity = mc_cur_severity; + cur_node->id = ((yyvsp[(1) - (2)].ival) & 0xffffUL); + cur_node->vid = ((yyvsp[(1) - (2)].ival) & 0xffffUL) | mc_sefa_val; + mc_last_id = (yyvsp[(1) - (2)].ival); + } + break; + + case 50: +#line 190 "mcparse.y" + { (yyval.ival) = (yyvsp[(3) - (3)].ival); } + break; + + case 51: +#line 191 "mcparse.y" + { mc_fatal ("missing number in MessageId"); (yyval.ival) = 0; } + break; + + case 52: +#line 192 "mcparse.y" + { mc_fatal ("missing '=' for MessageId"); (yyval.ival) = 0; } + break; + + case 53: +#line 196 "mcparse.y" + { + (yyval.ival) = ++mc_last_id; + } + break; + + case 54: +#line 200 "mcparse.y" + { + (yyval.ival) = (yyvsp[(1) - (1)].ival); + } + break; + + case 55: +#line 204 "mcparse.y" + { + (yyval.ival) = mc_last_id + (yyvsp[(2) - (2)].ival); + } + break; + + case 56: +#line 207 "mcparse.y" + { mc_fatal ("missing number after MessageId '+'"); } + break; + + case 57: +#line 212 "mcparse.y" + { + (yyval.ival) = 0; + mc_sefa_val = (mcset_custom_bit ? 1 : 0) << 29; + mc_last_symbol = NULL; + mc_cur_severity = NULL; + mc_cur_facility = NULL; + } + break; + + case 58: +#line 220 "mcparse.y" + { + if ((yyvsp[(1) - (2)].ival) & 1) + mc_warn (_("duplicate definition of Severity")); + (yyval.ival) = (yyvsp[(1) - (2)].ival) | 1; + } + break; + + case 59: +#line 226 "mcparse.y" + { + if ((yyvsp[(1) - (2)].ival) & 2) + mc_warn (_("duplicate definition of Facility")); + (yyval.ival) = (yyvsp[(1) - (2)].ival) | 2; + } + break; + + case 60: +#line 232 "mcparse.y" + { + if ((yyvsp[(1) - (2)].ival) & 4) + mc_warn (_("duplicate definition of SymbolicName")); + (yyval.ival) = (yyvsp[(1) - (2)].ival) | 4; + } + break; + + case 61: +#line 240 "mcparse.y" + { + mc_sefa_val &= ~ (0x3UL << 30); + mc_sefa_val |= (((yyvsp[(3) - (3)].tok)->nval & 0x3UL) << 30); + mc_cur_severity = (yyvsp[(3) - (3)].tok); + } + break; + + case 62: +#line 248 "mcparse.y" + { + mc_sefa_val &= ~ (0xfffUL << 16); + mc_sefa_val |= (((yyvsp[(3) - (3)].tok)->nval & 0xfffUL) << 16); + mc_cur_facility = (yyvsp[(3) - (3)].tok); + } + break; + + case 63: +#line 256 "mcparse.y" + { + mc_last_symbol = (yyvsp[(3) - (3)].ustr); + } + break; + + case 66: +#line 268 "mcparse.y" + { + mc_node_lang *h; + h = mc_add_node_lang (cur_node, (yyvsp[(1) - (4)].tok), cur_node->vid); + h->message = (yyvsp[(3) - (4)].ustr); + if (mcset_max_message_length != 0 && unichar_len (h->message) > mcset_max_message_length) + mc_warn ("message length to long"); + } + break; + + case 67: +#line 278 "mcparse.y" + { + (yyval.ustr) = (yyvsp[(1) - (1)].ustr); + } + break; + + case 68: +#line 282 "mcparse.y" + { + unichar *h; + rc_uint_type l1,l2; + l1 = unichar_len ((yyvsp[(1) - (2)].ustr)); + l2 = unichar_len ((yyvsp[(2) - (2)].ustr)); + h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar)); + if (l1) memcpy (h, (yyvsp[(1) - (2)].ustr), l1 * sizeof (unichar)); + if (l2) memcpy (&h[l1], (yyvsp[(2) - (2)].ustr), l2 * sizeof (unichar)); + h[l1 + l2] = 0; + (yyval.ustr) = h; + } + break; + + case 69: +#line 293 "mcparse.y" + { mc_fatal ("missing end of message text"); (yyval.ustr) = NULL; } + break; + + case 70: +#line 294 "mcparse.y" + { mc_fatal ("missing end of message text"); (yyval.ustr) = (yyvsp[(1) - (2)].ustr); } + break; + + case 71: +#line 297 "mcparse.y" + { (yyval.ustr) = (yyvsp[(1) - (1)].ustr); } + break; + + case 72: +#line 299 "mcparse.y" + { + unichar *h; + rc_uint_type l1,l2; + l1 = unichar_len ((yyvsp[(1) - (2)].ustr)); + l2 = unichar_len ((yyvsp[(2) - (2)].ustr)); + h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar)); + if (l1) memcpy (h, (yyvsp[(1) - (2)].ustr), l1 * sizeof (unichar)); + if (l2) memcpy (&h[l1], (yyvsp[(2) - (2)].ustr), l2 * sizeof (unichar)); + h[l1 + l2] = 0; + (yyval.ustr) = h; + } + break; + + case 73: +#line 313 "mcparse.y" + { + (yyval.tok) = (yyvsp[(4) - (5)].tok); + } + break; + + case 74: +#line 317 "mcparse.y" + { + (yyval.tok) = NULL; + mc_fatal (_("undeclared language identifier")); + } + break; + + case 75: +#line 322 "mcparse.y" + { + (yyval.tok) = NULL; + mc_fatal ("missing newline after Language"); + } + break; + + case 76: +#line 327 "mcparse.y" + { + (yyval.tok) = NULL; + mc_fatal ("missing ident for Language"); + } + break; + + case 77: +#line 332 "mcparse.y" + { + (yyval.tok) = NULL; + mc_fatal ("missing '=' for Language"); + } + break; + + case 78: +#line 338 "mcparse.y" + { (yyval.ustr) = (yyvsp[(1) - (1)].ustr); } + break; + + case 79: +#line 339 "mcparse.y" + { (yyval.ustr) = (yyvsp[(1) - (1)].tok)->usz; } + break; + + case 80: +#line 343 "mcparse.y" + { mclex_want_nl = 1; } + break; + + case 81: +#line 347 "mcparse.y" + { mclex_want_line = 1; } + break; + + case 82: +#line 351 "mcparse.y" + { mclex_want_filename = 1; } + break; + + +/* Line 1267 of yacc.c. */ +#line 1939 "mcparse.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 354 "mcparse.y" + + +/* Something else. */ + diff --git a/binutils/mcparse.h b/binutils/mcparse.h new file mode 100644 index 000000000..6a732f9f4 --- /dev/null +++ b/binutils/mcparse.h @@ -0,0 +1,103 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NL = 258, + MCIDENT = 259, + MCFILENAME = 260, + MCLINE = 261, + MCCOMMENT = 262, + MCTOKEN = 263, + MCENDLINE = 264, + MCLANGUAGENAMES = 265, + MCFACILITYNAMES = 266, + MCSEVERITYNAMES = 267, + MCOUTPUTBASE = 268, + MCMESSAGEIDTYPEDEF = 269, + MCLANGUAGE = 270, + MCMESSAGEID = 271, + MCSEVERITY = 272, + MCFACILITY = 273, + MCSYMBOLICNAME = 274, + MCNUMBER = 275 + }; +#endif +/* Tokens. */ +#define NL 258 +#define MCIDENT 259 +#define MCFILENAME 260 +#define MCLINE 261 +#define MCCOMMENT 262 +#define MCTOKEN 263 +#define MCENDLINE 264 +#define MCLANGUAGENAMES 265 +#define MCFACILITYNAMES 266 +#define MCSEVERITYNAMES 267 +#define MCOUTPUTBASE 268 +#define MCMESSAGEIDTYPEDEF 269 +#define MCLANGUAGE 270 +#define MCMESSAGEID 271 +#define MCSEVERITY 272 +#define MCFACILITY 273 +#define MCSYMBOLICNAME 274 +#define MCNUMBER 275 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 45 "mcparse.y" +{ + rc_uint_type ival; + unichar *ustr; + const mc_keyword *tok; + mc_node *nod; +} +/* Line 1489 of yacc.c. */ +#line 96 "mcparse.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/binutils/nlmheader.c b/binutils/nlmheader.c new file mode 100644 index 000000000..6bbc63cfe --- /dev/null +++ b/binutils/nlmheader.c @@ -0,0 +1,2698 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + CHECK = 258, + CODESTART = 259, + COPYRIGHT = 260, + CUSTOM = 261, + DATE = 262, + DEBUG = 263, + DESCRIPTION = 264, + EXIT = 265, + EXPORT = 266, + FLAG_ON = 267, + FLAG_OFF = 268, + FULLMAP = 269, + HELP = 270, + IMPORT = 271, + INPUT = 272, + MAP = 273, + MESSAGES = 274, + MODULE = 275, + MULTIPLE = 276, + OS_DOMAIN = 277, + OUTPUT = 278, + PSEUDOPREEMPTION = 279, + REENTRANT = 280, + SCREENNAME = 281, + SHARELIB = 282, + STACK = 283, + START = 284, + SYNCHRONIZE = 285, + THREADNAME = 286, + TYPE = 287, + VERBOSE = 288, + VERSIONK = 289, + XDCDATA = 290, + STRING = 291, + QUOTED_STRING = 292 + }; +#endif +/* Tokens. */ +#define CHECK 258 +#define CODESTART 259 +#define COPYRIGHT 260 +#define CUSTOM 261 +#define DATE 262 +#define DEBUG 263 +#define DESCRIPTION 264 +#define EXIT 265 +#define EXPORT 266 +#define FLAG_ON 267 +#define FLAG_OFF 268 +#define FULLMAP 269 +#define HELP 270 +#define IMPORT 271 +#define INPUT 272 +#define MAP 273 +#define MESSAGES 274 +#define MODULE 275 +#define MULTIPLE 276 +#define OS_DOMAIN 277 +#define OUTPUT 278 +#define PSEUDOPREEMPTION 279 +#define REENTRANT 280 +#define SCREENNAME 281 +#define SHARELIB 282 +#define STACK 283 +#define START 284 +#define SYNCHRONIZE 285 +#define THREADNAME 286 +#define TYPE 287 +#define VERBOSE 288 +#define VERSIONK 289 +#define XDCDATA 290 +#define STRING 291 +#define QUOTED_STRING 292 + + + + +/* Copy the first part of user declarations. */ +#line 1 "nlmheader.y" +/* nlmheader.y - parse NLM header specification keywords. + Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2007 + Free Software Foundation, Inc. + + This file is part of GNU Binutils. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +/* Written by Ian Lance Taylor . + + This bison file parses the commands recognized by the NetWare NLM + linker, except for lists of object files. It stores the + information in global variables. + + This implementation is based on the description in the NetWare Tool + Maker Specification manual, edition 1.0. */ + +#include "sysdep.h" +#include "safe-ctype.h" +#include "bfd.h" +#include "nlm/common.h" +#include "nlm/internal.h" +#include "bucomm.h" +#include "nlmconv.h" + +/* Information is stored in the structures pointed to by these + variables. */ + +Nlm_Internal_Fixed_Header *fixed_hdr; +Nlm_Internal_Variable_Header *var_hdr; +Nlm_Internal_Version_Header *version_hdr; +Nlm_Internal_Copyright_Header *copyright_hdr; +Nlm_Internal_Extended_Header *extended_hdr; + +/* Procedure named by CHECK. */ +char *check_procedure; +/* File named by CUSTOM. */ +char *custom_file; +/* Whether to generate debugging information (DEBUG). */ +bfd_boolean debug_info; +/* Procedure named by EXIT. */ +char *exit_procedure; +/* Exported symbols (EXPORT). */ +struct string_list *export_symbols; +/* List of files from INPUT. */ +struct string_list *input_files; +/* Map file name (MAP, FULLMAP). */ +char *map_file; +/* Whether a full map has been requested (FULLMAP). */ +bfd_boolean full_map; +/* File named by HELP. */ +char *help_file; +/* Imported symbols (IMPORT). */ +struct string_list *import_symbols; +/* File named by MESSAGES. */ +char *message_file; +/* Autoload module list (MODULE). */ +struct string_list *modules; +/* File named by OUTPUT. */ +char *output_file; +/* File named by SHARELIB. */ +char *sharelib_file; +/* Start procedure name (START). */ +char *start_procedure; +/* VERBOSE. */ +bfd_boolean verbose; +/* RPC description file (XDCDATA). */ +char *rpc_file; + +/* The number of serious errors that have occurred. */ +int parse_errors; + +/* The current symbol prefix when reading a list of import or export + symbols. */ +static char *symbol_prefix; + +/* Parser error message handler. */ +#define yyerror(msg) nlmheader_error (msg); + +/* Local functions. */ +static int yylex (void); +static void nlmlex_file_push (const char *); +static bfd_boolean nlmlex_file_open (const char *); +static int nlmlex_buf_init (void); +static char nlmlex_buf_add (int); +static long nlmlex_get_number (const char *); +static void nlmheader_identify (void); +static void nlmheader_warn (const char *, int); +static void nlmheader_error (const char *); +static struct string_list * string_list_cons (char *, struct string_list *); +static struct string_list * string_list_append (struct string_list *, + struct string_list *); +static struct string_list * string_list_append1 (struct string_list *, + char *); +static char *xstrdup (const char *); + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 113 "nlmheader.y" +{ + char *string; + struct string_list *list; +} +/* Line 187 of yacc.c. */ +#line 286 "nlmheader.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 299 "nlmheader.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 64 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 73 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 40 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 11 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 52 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 82 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 292 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 38, 39, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 5, 6, 9, 12, 15, 18, 21, + 26, 28, 31, 34, 35, 39, 42, 45, 47, 50, + 53, 54, 58, 61, 63, 66, 69, 72, 74, 76, + 79, 81, 83, 86, 89, 92, 95, 97, 100, 103, + 105, 110, 114, 117, 118, 120, 122, 124, 127, 130, + 134, 136, 137 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 41, 0, -1, 42, -1, -1, 43, 42, -1, 3, + 36, -1, 4, 36, -1, 5, 37, -1, 6, 36, + -1, 7, 36, 36, 36, -1, 8, -1, 9, 37, + -1, 10, 36, -1, -1, 11, 44, 46, -1, 12, + 36, -1, 13, 36, -1, 14, -1, 14, 36, -1, + 15, 36, -1, -1, 16, 45, 46, -1, 17, 50, + -1, 18, -1, 18, 36, -1, 19, 36, -1, 20, + 50, -1, 21, -1, 22, -1, 23, 36, -1, 24, + -1, 25, -1, 26, 37, -1, 27, 36, -1, 28, + 36, -1, 29, 36, -1, 30, -1, 31, 37, -1, + 32, 36, -1, 33, -1, 34, 36, 36, 36, -1, + 34, 36, 36, -1, 35, 36, -1, -1, 47, -1, + 49, -1, 48, -1, 47, 49, -1, 47, 48, -1, + 38, 36, 39, -1, 36, -1, -1, 36, 50, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 144, 144, 149, 151, 157, 161, 166, 183, 187, + 205, 209, 225, 230, 229, 237, 242, 247, 252, 257, + 262, 261, 269, 273, 277, 281, 285, 289, 293, 297, + 304, 308, 312, 328, 332, 337, 341, 345, 361, 366, + 370, 394, 410, 420, 423, 434, 438, 442, 446, 455, + 466, 483, 486 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "CHECK", "CODESTART", "COPYRIGHT", + "CUSTOM", "DATE", "DEBUG", "DESCRIPTION", "EXIT", "EXPORT", "FLAG_ON", + "FLAG_OFF", "FULLMAP", "HELP", "IMPORT", "INPUT", "MAP", "MESSAGES", + "MODULE", "MULTIPLE", "OS_DOMAIN", "OUTPUT", "PSEUDOPREEMPTION", + "REENTRANT", "SCREENNAME", "SHARELIB", "STACK", "START", "SYNCHRONIZE", + "THREADNAME", "TYPE", "VERBOSE", "VERSIONK", "XDCDATA", "STRING", + "QUOTED_STRING", "'('", "')'", "$accept", "file", "commands", "command", + "@1", "@2", "symbol_list_opt", "symbol_list", "symbol_prefix", "symbol", + "string_list", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 40, 41 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 40, 41, 42, 42, 43, 43, 43, 43, 43, + 43, 43, 43, 44, 43, 43, 43, 43, 43, 43, + 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 46, 46, 47, 47, 47, 47, 48, + 49, 50, 50 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 0, 2, 2, 2, 2, 2, 4, + 1, 2, 2, 0, 3, 2, 2, 1, 2, 2, + 0, 3, 2, 1, 2, 2, 2, 1, 1, 2, + 1, 1, 2, 2, 2, 2, 1, 2, 2, 1, + 4, 3, 2, 0, 1, 1, 1, 2, 2, 3, + 1, 0, 2 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 3, 0, 0, 0, 0, 0, 10, 0, 0, 13, + 0, 0, 17, 0, 20, 51, 23, 0, 51, 27, + 28, 0, 30, 31, 0, 0, 0, 0, 36, 0, + 0, 39, 0, 0, 0, 2, 3, 5, 6, 7, + 8, 0, 11, 12, 43, 15, 16, 18, 19, 43, + 51, 22, 24, 25, 26, 29, 32, 33, 34, 35, + 37, 38, 0, 42, 1, 4, 0, 50, 0, 14, + 44, 46, 45, 21, 52, 41, 9, 0, 48, 47, + 40, 49 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 34, 35, 36, 44, 49, 69, 70, 71, 72, + 51 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -20 +static const yytype_int8 yypact[] = +{ + -3, -1, 1, 2, 4, 5, -20, 6, 8, -20, + 9, 10, 11, 12, -20, 13, 14, 16, 13, -20, + -20, 17, -20, -20, 18, 20, 21, 22, -20, 23, + 25, -20, 26, 27, 38, -20, -3, -20, -20, -20, + -20, 28, -20, -20, -2, -20, -20, -20, -20, -2, + 13, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, 30, -20, -20, -20, 31, -20, 32, -20, + -2, -20, -20, -20, -20, 33, -20, 3, -20, -20, + -20, -20 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -20, -20, 34, -20, -20, -20, 24, -20, -19, -16, + 15 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 54, 67, 37, 68, 38, 64, 39, + 40, 41, 81, 42, 43, 45, 46, 47, 48, 50, + 52, 78, 53, 55, 79, 56, 57, 58, 59, 0, + 60, 61, 62, 63, 66, 74, 75, 76, 77, 80, + 65, 0, 0, 73 +}; + +static const yytype_int8 yycheck[] = +{ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 18, 36, 36, 38, 36, 0, 37, + 36, 36, 39, 37, 36, 36, 36, 36, 36, 36, + 36, 70, 36, 36, 70, 37, 36, 36, 36, -1, + 37, 36, 36, 36, 36, 50, 36, 36, 36, 36, + 36, -1, -1, 49 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 41, 42, 43, 36, 36, 37, + 36, 36, 37, 36, 44, 36, 36, 36, 36, 45, + 36, 50, 36, 36, 50, 36, 37, 36, 36, 36, + 37, 36, 36, 36, 0, 42, 36, 36, 38, 46, + 47, 48, 49, 46, 50, 36, 36, 36, 48, 49, + 36, 39 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 5: +#line 158 "nlmheader.y" + { + check_procedure = (yyvsp[(2) - (2)].string); + } + break; + + case 6: +#line 162 "nlmheader.y" + { + nlmheader_warn (_("CODESTART is not implemented; sorry"), -1); + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 7: +#line 167 "nlmheader.y" + { + int len; + + strncpy (copyright_hdr->stamp, "CoPyRiGhT=", 10); + len = strlen ((yyvsp[(2) - (2)].string)); + if (len >= NLM_MAX_COPYRIGHT_MESSAGE_LENGTH) + { + nlmheader_warn (_("copyright string is too long"), + NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1); + len = NLM_MAX_COPYRIGHT_MESSAGE_LENGTH - 1; + } + copyright_hdr->copyrightMessageLength = len; + strncpy (copyright_hdr->copyrightMessage, (yyvsp[(2) - (2)].string), len); + copyright_hdr->copyrightMessage[len] = '\0'; + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 8: +#line 184 "nlmheader.y" + { + custom_file = (yyvsp[(2) - (2)].string); + } + break; + + case 9: +#line 188 "nlmheader.y" + { + /* We don't set the version stamp here, because we use the + version stamp to detect whether the required VERSION + keyword was given. */ + version_hdr->month = nlmlex_get_number ((yyvsp[(2) - (4)].string)); + version_hdr->day = nlmlex_get_number ((yyvsp[(3) - (4)].string)); + version_hdr->year = nlmlex_get_number ((yyvsp[(4) - (4)].string)); + free ((yyvsp[(2) - (4)].string)); + free ((yyvsp[(3) - (4)].string)); + free ((yyvsp[(4) - (4)].string)); + if (version_hdr->month < 1 || version_hdr->month > 12) + nlmheader_warn (_("illegal month"), -1); + if (version_hdr->day < 1 || version_hdr->day > 31) + nlmheader_warn (_("illegal day"), -1); + if (version_hdr->year < 1900 || version_hdr->year > 3000) + nlmheader_warn (_("illegal year"), -1); + } + break; + + case 10: +#line 206 "nlmheader.y" + { + debug_info = TRUE; + } + break; + + case 11: +#line 210 "nlmheader.y" + { + int len; + + len = strlen ((yyvsp[(2) - (2)].string)); + if (len > NLM_MAX_DESCRIPTION_LENGTH) + { + nlmheader_warn (_("description string is too long"), + NLM_MAX_DESCRIPTION_LENGTH); + len = NLM_MAX_DESCRIPTION_LENGTH; + } + var_hdr->descriptionLength = len; + strncpy (var_hdr->descriptionText, (yyvsp[(2) - (2)].string), len); + var_hdr->descriptionText[len] = '\0'; + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 12: +#line 226 "nlmheader.y" + { + exit_procedure = (yyvsp[(2) - (2)].string); + } + break; + + case 13: +#line 230 "nlmheader.y" + { + symbol_prefix = NULL; + } + break; + + case 14: +#line 234 "nlmheader.y" + { + export_symbols = string_list_append (export_symbols, (yyvsp[(3) - (3)].list)); + } + break; + + case 15: +#line 238 "nlmheader.y" + { + fixed_hdr->flags |= nlmlex_get_number ((yyvsp[(2) - (2)].string)); + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 16: +#line 243 "nlmheader.y" + { + fixed_hdr->flags &=~ nlmlex_get_number ((yyvsp[(2) - (2)].string)); + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 17: +#line 248 "nlmheader.y" + { + map_file = ""; + full_map = TRUE; + } + break; + + case 18: +#line 253 "nlmheader.y" + { + map_file = (yyvsp[(2) - (2)].string); + full_map = TRUE; + } + break; + + case 19: +#line 258 "nlmheader.y" + { + help_file = (yyvsp[(2) - (2)].string); + } + break; + + case 20: +#line 262 "nlmheader.y" + { + symbol_prefix = NULL; + } + break; + + case 21: +#line 266 "nlmheader.y" + { + import_symbols = string_list_append (import_symbols, (yyvsp[(3) - (3)].list)); + } + break; + + case 22: +#line 270 "nlmheader.y" + { + input_files = string_list_append (input_files, (yyvsp[(2) - (2)].list)); + } + break; + + case 23: +#line 274 "nlmheader.y" + { + map_file = ""; + } + break; + + case 24: +#line 278 "nlmheader.y" + { + map_file = (yyvsp[(2) - (2)].string); + } + break; + + case 25: +#line 282 "nlmheader.y" + { + message_file = (yyvsp[(2) - (2)].string); + } + break; + + case 26: +#line 286 "nlmheader.y" + { + modules = string_list_append (modules, (yyvsp[(2) - (2)].list)); + } + break; + + case 27: +#line 290 "nlmheader.y" + { + fixed_hdr->flags |= 0x2; + } + break; + + case 28: +#line 294 "nlmheader.y" + { + fixed_hdr->flags |= 0x10; + } + break; + + case 29: +#line 298 "nlmheader.y" + { + if (output_file == NULL) + output_file = (yyvsp[(2) - (2)].string); + else + nlmheader_warn (_("ignoring duplicate OUTPUT statement"), -1); + } + break; + + case 30: +#line 305 "nlmheader.y" + { + fixed_hdr->flags |= 0x8; + } + break; + + case 31: +#line 309 "nlmheader.y" + { + fixed_hdr->flags |= 0x1; + } + break; + + case 32: +#line 313 "nlmheader.y" + { + int len; + + len = strlen ((yyvsp[(2) - (2)].string)); + if (len >= NLM_MAX_SCREEN_NAME_LENGTH) + { + nlmheader_warn (_("screen name is too long"), + NLM_MAX_SCREEN_NAME_LENGTH); + len = NLM_MAX_SCREEN_NAME_LENGTH; + } + var_hdr->screenNameLength = len; + strncpy (var_hdr->screenName, (yyvsp[(2) - (2)].string), len); + var_hdr->screenName[NLM_MAX_SCREEN_NAME_LENGTH] = '\0'; + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 33: +#line 329 "nlmheader.y" + { + sharelib_file = (yyvsp[(2) - (2)].string); + } + break; + + case 34: +#line 333 "nlmheader.y" + { + var_hdr->stackSize = nlmlex_get_number ((yyvsp[(2) - (2)].string)); + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 35: +#line 338 "nlmheader.y" + { + start_procedure = (yyvsp[(2) - (2)].string); + } + break; + + case 36: +#line 342 "nlmheader.y" + { + fixed_hdr->flags |= 0x4; + } + break; + + case 37: +#line 346 "nlmheader.y" + { + int len; + + len = strlen ((yyvsp[(2) - (2)].string)); + if (len >= NLM_MAX_THREAD_NAME_LENGTH) + { + nlmheader_warn (_("thread name is too long"), + NLM_MAX_THREAD_NAME_LENGTH); + len = NLM_MAX_THREAD_NAME_LENGTH; + } + var_hdr->threadNameLength = len; + strncpy (var_hdr->threadName, (yyvsp[(2) - (2)].string), len); + var_hdr->threadName[len] = '\0'; + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 38: +#line 362 "nlmheader.y" + { + fixed_hdr->moduleType = nlmlex_get_number ((yyvsp[(2) - (2)].string)); + free ((yyvsp[(2) - (2)].string)); + } + break; + + case 39: +#line 367 "nlmheader.y" + { + verbose = TRUE; + } + break; + + case 40: +#line 371 "nlmheader.y" + { + long val; + + strncpy (version_hdr->stamp, "VeRsIoN#", 8); + version_hdr->majorVersion = nlmlex_get_number ((yyvsp[(2) - (4)].string)); + val = nlmlex_get_number ((yyvsp[(3) - (4)].string)); + if (val < 0 || val > 99) + nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"), + -1); + else + version_hdr->minorVersion = val; + val = nlmlex_get_number ((yyvsp[(4) - (4)].string)); + if (val < 0) + nlmheader_warn (_("illegal revision number (must be between 0 and 26)"), + -1); + else if (val > 26) + version_hdr->revision = 0; + else + version_hdr->revision = val; + free ((yyvsp[(2) - (4)].string)); + free ((yyvsp[(3) - (4)].string)); + free ((yyvsp[(4) - (4)].string)); + } + break; + + case 41: +#line 395 "nlmheader.y" + { + long val; + + strncpy (version_hdr->stamp, "VeRsIoN#", 8); + version_hdr->majorVersion = nlmlex_get_number ((yyvsp[(2) - (3)].string)); + val = nlmlex_get_number ((yyvsp[(3) - (3)].string)); + if (val < 0 || val > 99) + nlmheader_warn (_("illegal minor version number (must be between 0 and 99)"), + -1); + else + version_hdr->minorVersion = val; + version_hdr->revision = 0; + free ((yyvsp[(2) - (3)].string)); + free ((yyvsp[(3) - (3)].string)); + } + break; + + case 42: +#line 411 "nlmheader.y" + { + rpc_file = (yyvsp[(2) - (2)].string); + } + break; + + case 43: +#line 420 "nlmheader.y" + { + (yyval.list) = NULL; + } + break; + + case 44: +#line 424 "nlmheader.y" + { + (yyval.list) = (yyvsp[(1) - (1)].list); + } + break; + + case 45: +#line 435 "nlmheader.y" + { + (yyval.list) = string_list_cons ((yyvsp[(1) - (1)].string), NULL); + } + break; + + case 46: +#line 439 "nlmheader.y" + { + (yyval.list) = NULL; + } + break; + + case 47: +#line 443 "nlmheader.y" + { + (yyval.list) = string_list_append1 ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].string)); + } + break; + + case 48: +#line 447 "nlmheader.y" + { + (yyval.list) = (yyvsp[(1) - (2)].list); + } + break; + + case 49: +#line 456 "nlmheader.y" + { + if (symbol_prefix != NULL) + free (symbol_prefix); + symbol_prefix = (yyvsp[(2) - (3)].string); + } + break; + + case 50: +#line 467 "nlmheader.y" + { + if (symbol_prefix == NULL) + (yyval.string) = (yyvsp[(1) - (1)].string); + else + { + (yyval.string) = xmalloc (strlen (symbol_prefix) + strlen ((yyvsp[(1) - (1)].string)) + 2); + sprintf ((yyval.string), "%s@%s", symbol_prefix, (yyvsp[(1) - (1)].string)); + free ((yyvsp[(1) - (1)].string)); + } + } + break; + + case 51: +#line 483 "nlmheader.y" + { + (yyval.list) = NULL; + } + break; + + case 52: +#line 487 "nlmheader.y" + { + (yyval.list) = string_list_cons ((yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].list)); + } + break; + + +/* Line 1267 of yacc.c. */ +#line 2015 "nlmheader.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 492 "nlmheader.y" + + +/* If strerror is just a macro, we want to use the one from libiberty + since it will handle undefined values. */ +#undef strerror +extern char *strerror PARAMS ((int)); + +/* The lexer is simple, too simple for flex. Keywords are only + recognized at the start of lines. Everything else must be an + argument. A comma is treated as whitespace. */ + +/* The states the lexer can be in. */ + +enum lex_state +{ + /* At the beginning of a line. */ + BEGINNING_OF_LINE, + /* In the middle of a line. */ + IN_LINE +}; + +/* We need to keep a stack of files to handle file inclusion. */ + +struct input +{ + /* The file to read from. */ + FILE *file; + /* The name of the file. */ + char *name; + /* The current line number. */ + int lineno; + /* The current state. */ + enum lex_state state; + /* The next file on the stack. */ + struct input *next; +}; + +/* The current input file. */ + +static struct input current; + +/* The character which introduces comments. */ +#define COMMENT_CHAR '#' + +/* Start the lexer going on the main input file. */ + +bfd_boolean +nlmlex_file (const char *name) +{ + current.next = NULL; + return nlmlex_file_open (name); +} + +/* Start the lexer going on a subsidiary input file. */ + +static void +nlmlex_file_push (const char *name) +{ + struct input *push; + + push = (struct input *) xmalloc (sizeof (struct input)); + *push = current; + if (nlmlex_file_open (name)) + current.next = push; + else + { + current = *push; + free (push); + } +} + +/* Start lexing from a file. */ + +static bfd_boolean +nlmlex_file_open (const char *name) +{ + current.file = fopen (name, "r"); + if (current.file == NULL) + { + fprintf (stderr, "%s:%s: %s\n", program_name, name, strerror (errno)); + ++parse_errors; + return FALSE; + } + current.name = xstrdup (name); + current.lineno = 1; + current.state = BEGINNING_OF_LINE; + return TRUE; +} + +/* Table used to turn keywords into tokens. */ + +struct keyword_tokens_struct +{ + const char *keyword; + int token; +}; + +static struct keyword_tokens_struct keyword_tokens[] = +{ + { "CHECK", CHECK }, + { "CODESTART", CODESTART }, + { "COPYRIGHT", COPYRIGHT }, + { "CUSTOM", CUSTOM }, + { "DATE", DATE }, + { "DEBUG", DEBUG }, + { "DESCRIPTION", DESCRIPTION }, + { "EXIT", EXIT }, + { "EXPORT", EXPORT }, + { "FLAG_ON", FLAG_ON }, + { "FLAG_OFF", FLAG_OFF }, + { "FULLMAP", FULLMAP }, + { "HELP", HELP }, + { "IMPORT", IMPORT }, + { "INPUT", INPUT }, + { "MAP", MAP }, + { "MESSAGES", MESSAGES }, + { "MODULE", MODULE }, + { "MULTIPLE", MULTIPLE }, + { "OS_DOMAIN", OS_DOMAIN }, + { "OUTPUT", OUTPUT }, + { "PSEUDOPREEMPTION", PSEUDOPREEMPTION }, + { "REENTRANT", REENTRANT }, + { "SCREENNAME", SCREENNAME }, + { "SHARELIB", SHARELIB }, + { "STACK", STACK }, + { "STACKSIZE", STACK }, + { "START", START }, + { "SYNCHRONIZE", SYNCHRONIZE }, + { "THREADNAME", THREADNAME }, + { "TYPE", TYPE }, + { "VERBOSE", VERBOSE }, + { "VERSION", VERSIONK }, + { "XDCDATA", XDCDATA } +}; + +#define KEYWORD_COUNT (sizeof (keyword_tokens) / sizeof (keyword_tokens[0])) + +/* The lexer accumulates strings in these variables. */ +static char *lex_buf; +static int lex_size; +static int lex_pos; + +/* Start accumulating strings into the buffer. */ +#define BUF_INIT() \ + ((void) (lex_buf != NULL ? lex_pos = 0 : nlmlex_buf_init ())) + +static int +nlmlex_buf_init (void) +{ + lex_size = 10; + lex_buf = xmalloc (lex_size + 1); + lex_pos = 0; + return 0; +} + +/* Finish a string in the buffer. */ +#define BUF_FINISH() ((void) (lex_buf[lex_pos] = '\0')) + +/* Accumulate a character into the buffer. */ +#define BUF_ADD(c) \ + ((void) (lex_pos < lex_size \ + ? lex_buf[lex_pos++] = (c) \ + : nlmlex_buf_add (c))) + +static char +nlmlex_buf_add (int c) +{ + if (lex_pos >= lex_size) + { + lex_size *= 2; + lex_buf = xrealloc (lex_buf, lex_size + 1); + } + + return lex_buf[lex_pos++] = c; +} + +/* The lexer proper. This is called by the bison generated parsing + code. */ + +static int +yylex (void) +{ + int c; + +tail_recurse: + + c = getc (current.file); + + /* Commas are treated as whitespace characters. */ + while (ISSPACE (c) || c == ',') + { + current.state = IN_LINE; + if (c == '\n') + { + ++current.lineno; + current.state = BEGINNING_OF_LINE; + } + c = getc (current.file); + } + + /* At the end of the file we either pop to the previous file or + finish up. */ + if (c == EOF) + { + fclose (current.file); + free (current.name); + if (current.next == NULL) + return 0; + else + { + struct input *next; + + next = current.next; + current = *next; + free (next); + goto tail_recurse; + } + } + + /* A comment character always means to drop everything until the + next newline. */ + if (c == COMMENT_CHAR) + { + do + { + c = getc (current.file); + } + while (c != '\n'); + ++current.lineno; + current.state = BEGINNING_OF_LINE; + goto tail_recurse; + } + + /* An '@' introduces an include file. */ + if (c == '@') + { + do + { + c = getc (current.file); + if (c == '\n') + ++current.lineno; + } + while (ISSPACE (c)); + BUF_INIT (); + while (! ISSPACE (c) && c != EOF) + { + BUF_ADD (c); + c = getc (current.file); + } + BUF_FINISH (); + + ungetc (c, current.file); + + nlmlex_file_push (lex_buf); + goto tail_recurse; + } + + /* A non-space character at the start of a line must be the start of + a keyword. */ + if (current.state == BEGINNING_OF_LINE) + { + BUF_INIT (); + while (ISALNUM (c) || c == '_') + { + BUF_ADD (TOUPPER (c)); + c = getc (current.file); + } + BUF_FINISH (); + + if (c != EOF && ! ISSPACE (c) && c != ',') + { + nlmheader_identify (); + fprintf (stderr, _("%s:%d: illegal character in keyword: %c\n"), + current.name, current.lineno, c); + } + else + { + unsigned int i; + + for (i = 0; i < KEYWORD_COUNT; i++) + { + if (lex_buf[0] == keyword_tokens[i].keyword[0] + && strcmp (lex_buf, keyword_tokens[i].keyword) == 0) + { + /* Pushing back the final whitespace avoids worrying + about \n here. */ + ungetc (c, current.file); + current.state = IN_LINE; + return keyword_tokens[i].token; + } + } + + nlmheader_identify (); + fprintf (stderr, _("%s:%d: unrecognized keyword: %s\n"), + current.name, current.lineno, lex_buf); + } + + ++parse_errors; + /* Treat the rest of this line as a comment. */ + ungetc (COMMENT_CHAR, current.file); + goto tail_recurse; + } + + /* Parentheses just represent themselves. */ + if (c == '(' || c == ')') + return c; + + /* Handle quoted strings. */ + if (c == '"' || c == '\'') + { + int quote; + int start_lineno; + + quote = c; + start_lineno = current.lineno; + + c = getc (current.file); + BUF_INIT (); + while (c != quote && c != EOF) + { + BUF_ADD (c); + if (c == '\n') + ++current.lineno; + c = getc (current.file); + } + BUF_FINISH (); + + if (c == EOF) + { + nlmheader_identify (); + fprintf (stderr, _("%s:%d: end of file in quoted string\n"), + current.name, start_lineno); + ++parse_errors; + } + + /* FIXME: Possible memory leak. */ + yylval.string = xstrdup (lex_buf); + return QUOTED_STRING; + } + + /* Gather a generic argument. */ + BUF_INIT (); + while (! ISSPACE (c) + && c != ',' + && c != COMMENT_CHAR + && c != '(' + && c != ')') + { + BUF_ADD (c); + c = getc (current.file); + } + BUF_FINISH (); + + ungetc (c, current.file); + + /* FIXME: Possible memory leak. */ + yylval.string = xstrdup (lex_buf); + return STRING; +} + +/* Get a number from a string. */ + +static long +nlmlex_get_number (const char *s) +{ + long ret; + char *send; + + ret = strtol (s, &send, 10); + if (*send != '\0') + nlmheader_warn (_("bad number"), -1); + return ret; +} + +/* Prefix the nlmconv warnings with a note as to where they come from. + We don't use program_name on every warning, because then some + versions of the emacs next-error function can't recognize the line + number. */ + +static void +nlmheader_identify (void) +{ + static int done; + + if (! done) + { + fprintf (stderr, _("%s: problems in NLM command language input:\n"), + program_name); + done = 1; + } +} + +/* Issue a warning. */ + +static void +nlmheader_warn (const char *s, int imax) +{ + nlmheader_identify (); + fprintf (stderr, "%s:%d: %s", current.name, current.lineno, s); + if (imax != -1) + fprintf (stderr, " (max %d)", imax); + fprintf (stderr, "\n"); +} + +/* Report an error. */ + +static void +nlmheader_error (const char *s) +{ + nlmheader_warn (s, -1); + ++parse_errors; +} + +/* Add a string to a string list. */ + +static struct string_list * +string_list_cons (char *s, struct string_list *l) +{ + struct string_list *ret; + + ret = (struct string_list *) xmalloc (sizeof (struct string_list)); + ret->next = l; + ret->string = s; + return ret; +} + +/* Append a string list to another string list. */ + +static struct string_list * +string_list_append (struct string_list *l1, struct string_list *l2) +{ + register struct string_list **pp; + + for (pp = &l1; *pp != NULL; pp = &(*pp)->next) + ; + *pp = l2; + return l1; +} + +/* Append a string to a string list. */ + +static struct string_list * +string_list_append1 (struct string_list *l, char *s) +{ + struct string_list *n; + register struct string_list **pp; + + n = (struct string_list *) xmalloc (sizeof (struct string_list)); + n->next = NULL; + n->string = s; + for (pp = &l; *pp != NULL; pp = &(*pp)->next) + ; + *pp = n; + return l; +} + +/* Duplicate a string in memory. */ + +static char * +xstrdup (const char *s) +{ + unsigned long len; + char *ret; + + len = strlen (s); + ret = xmalloc (len + 1); + strcpy (ret, s); + return ret; +} + diff --git a/binutils/nlmheader.h b/binutils/nlmheader.h new file mode 100644 index 000000000..4a5eee8bc --- /dev/null +++ b/binutils/nlmheader.h @@ -0,0 +1,135 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + CHECK = 258, + CODESTART = 259, + COPYRIGHT = 260, + CUSTOM = 261, + DATE = 262, + DEBUG = 263, + DESCRIPTION = 264, + EXIT = 265, + EXPORT = 266, + FLAG_ON = 267, + FLAG_OFF = 268, + FULLMAP = 269, + HELP = 270, + IMPORT = 271, + INPUT = 272, + MAP = 273, + MESSAGES = 274, + MODULE = 275, + MULTIPLE = 276, + OS_DOMAIN = 277, + OUTPUT = 278, + PSEUDOPREEMPTION = 279, + REENTRANT = 280, + SCREENNAME = 281, + SHARELIB = 282, + STACK = 283, + START = 284, + SYNCHRONIZE = 285, + THREADNAME = 286, + TYPE = 287, + VERBOSE = 288, + VERSIONK = 289, + XDCDATA = 290, + STRING = 291, + QUOTED_STRING = 292 + }; +#endif +/* Tokens. */ +#define CHECK 258 +#define CODESTART 259 +#define COPYRIGHT 260 +#define CUSTOM 261 +#define DATE 262 +#define DEBUG 263 +#define DESCRIPTION 264 +#define EXIT 265 +#define EXPORT 266 +#define FLAG_ON 267 +#define FLAG_OFF 268 +#define FULLMAP 269 +#define HELP 270 +#define IMPORT 271 +#define INPUT 272 +#define MAP 273 +#define MESSAGES 274 +#define MODULE 275 +#define MULTIPLE 276 +#define OS_DOMAIN 277 +#define OUTPUT 278 +#define PSEUDOPREEMPTION 279 +#define REENTRANT 280 +#define SCREENNAME 281 +#define SHARELIB 282 +#define STACK 283 +#define START 284 +#define SYNCHRONIZE 285 +#define THREADNAME 286 +#define TYPE 287 +#define VERBOSE 288 +#define VERSIONK 289 +#define XDCDATA 290 +#define STRING 291 +#define QUOTED_STRING 292 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 113 "nlmheader.y" +{ + char *string; + struct string_list *list; +} +/* Line 1489 of yacc.c. */ +#line 128 "nlmheader.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/binutils/po/da.gmo b/binutils/po/da.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8f9b965b6edf3be9e4c3fea6be8d4dc76563f2d9 GIT binary patch literal 80846 zcwW?f2Y4Js^6$uo1B)Dv90r51Y_xK~Hb&S!WJ@;2w&b&9V=z9m(vGC{Cb6?COXM66 zI5=|7Ip=tU1CBf3jtm!xHu%WdIoYp-TnXXec#(pqnhciuI{d`uCA``nf}+t zYn)}#?^i=DYa4>=Zf#kIuVGo=Pq5^-dZuM z1pi5JLxLX=+?L=E1gi;dy*FS3!95732u>t;9l=I|Z|sfo?L6DEDhW;|NL96F65O5h zC0Il7B7(I9|3q+Og5S(W{nwpiS(6CvKyXKb`zbt(U=_j3=YS7S%|ZRYn1l2`n`>Dk z32sSnOM=tqf^SO{9zk#%!7B)kA^6H%lw++X)MtDX=r3tP_|Z+s=hi0h;U5HdBluwx z=u|aZ)~*B>HKQEAZbtntCfG{woo3W~_jyznf(zyW|Gasq-?IekxZJlYh0AFrifO7wB0orwwg?OH;@VJG*dw3!E z{l3C&_Ca~(?gP0yVjtjNyARsw&3%Bk#v+ts0zndGD@Bk*%es3J@~hYv@p}*?5wKi+ zeq>+JUrmsj%GzZ=@Z}(azaV%Q!KnnlBshiO_{Dh6E`}W6wix_)Z!zdq?T_*;*&pF& zD}0e4bqQ<3CCF#LC6K@CmVoYyOF(y{UqL?SDQqXW8NnWfrx4te;FZ5ZJ}Z8O{Ri+m5sqWy2pf{*{oqFn2^D902R{pv6m^d552P9M1FznkSicWw^j>?Jv*e=vvf z@S_~)ua^gZ_sFB3-FfuqtMiEeBo95ZT@U)*FMGh(_8#=pjT|``ykhM5Tqg1`l=85a@s)%Kja|r@!^BOH|t=?%_xFL5u9=`i;P_)!GOys^$9NG6YUp*~-F2A5iA$``6|3B$-&Eb%PhQlETiw;M+(+`Kd-FrCF zzkE3QrEB>a)WUkf%M40RG$~P`_nI0PpZ4AWs(@0scR71oD0F2-s!Tk>Jw? zM}lwFN1`349|?LXg6k4I=}6$8b0qk5^^qv|Q;PSGBf*z%6mEDF_%Y%r@Tcx5jAMHp zg?@0{QE2D;jskxlKMMK(?I^UzmkKvK8tuB<(V$a*H1L{_M*A&08vH!rX!PH^jt2dA zjz+)R{20K-V^ALV7^FMy7}Wd9W5Bq$Sh3Vr#=cMD2{)*#K&j*f2dH-@e`1YaV+b1A? z@(F5hoPhk=PXL`mPe8h}Pe8fvRQR_O&<@s#DA(u{k#5fuAs73d2>J(}h;~0k;S~z+ zQ}~w?kBU z(=~j-$FP#E;|L7F7-v*~5--)NR3y(S#kQZ-BhEnh-e;h`8HK;m@Y~LS zoWF7g=zp$o5Ow^-8;UQb=KVkne>Gk39?Hz@2AdKJdX=$iL=nlzYb6 z=;zMakPr84=+~pphTgjIY?SA(XCuFlHQi5VBfss=!Sn9tpdA;T1N_7}sNa$2K+ew7 z=UdM~`JdA8H_w6Gu099+-R4}-sXrI(+j=h2b)BpB`nhQ5lh1{GU3xCkKXop~{SVGX zJ$611{e8lD$Zzp^YKNYO@*aO4_;K}l;K$1IP#^1jjB{HPT+aEQFHL7Xb3W2XFM#~y zE2FI@osy>|ip20y;N7iwFDm@(BDD8L7en6mycqTQ<;7@^n=U)uHbeqCw zF9!Wp3Wr?+ypflnf9!b)`a$OM`#!@F#j1^x!#{!5)9?GSqjy%hA6lUygJKUXFY& zx*YxOy33&l@3s|ppv+WfK-{T7Or=}}V{{yao+%LZZ^*sIx7@I3k|?Uz@9o^uuC z{e-JP_oA!7r~9q~{l9AbkgH)IZ+GbM!LFKJ$D`Get#Y0bf@cq zH~V_XU*>wq$$8g<{!<$N`t{)B&>J9EJKlhLHr)VzEx7^pJMadiJLU$|`+^%FH`m>O zdf$HoJ`cSS&s*FG{Az{MZbbjw|3;L1xx$NYM7^K5QTcZx%CYuM z@NaB=6Uw>6O_+a;xe4W+bQ9!uj>iA$CfE-tjX&rnwBM-Ia1+XNuRgzU6ZrP} zO(_4co00!^H-isjZ-(6Mbu;?ifj2{buD%)a^4QIw_sPwuN98Su-{lsRYvwJ;f8j0A zOI^319*1f8akn7-xwoJ^x8DMJeE1f~=aaXf9bQoQ#x0QRk8S~8`sKPRj4hI;(*HpuHMw_!XVay!~{t=mzK^=^k;)!Yt#Ot~F;zVUYOwe5Du?Qd=e zy*qD5Js-Ut<$V5j@ae1DQQjYJN4bXGp?tUl^&E8v;`h7*bmrUvI{WH#{0{J;=MIdU z$KHW@T&(HuQuy>8Xs*@D`UzgvD^4)$f@_Aar-?|s&{p?=U zXRG^=|LFVFuDlO;9rppR=RWAWi|<3Z{&*kq`Q$#-tKxpp-{F4HnWS*x{gB7p{jjS} z*XMigN4l5pM>~FTKiXxp2hc7P9zedc9sr*XRCx3Q&$3+Sr)xim zcHC6q4i6%{_CeIE?m_Tv?+2le9K}2TLGa@mg%2uxUg63IQNHgUMEy5-2+#II@ZXGo z2zq7GLnwd!L*Q5ZA=o3oc?kOLNsWK^A>_Zo?=Y@4{0`+6hOj-&-Emb*G1s z{+|z{{y#p9{;=aCD96l4z^BEJAm7v@NO$HVpnKCJkdyl#LH+-!=~h1iKCb&H@~eJS z{gIENU6(wHewb5u^rMi&GaiMWdEim_i25GzN9f}V z2`(UbJ;7fQwEhIWz4T8QH#!K`6Flrs@P|I~C-C!&KcQYDpT_e61Q!xK>uH34@HEQ5 z<1=W-#m~SWdg3#n_wq9+-{#MvUH5wya(wQy$mh?`BL5+OhJM)U&+uC}{u%Sm6aNhQ zPb&QJ&*0C*zaV}5FW~n@e?j@4`3vN#;yKiR)N_#Uj_1Iilb!>eKR$&~yEzm9nw<(T(6^hnq1=pQG)4*a`b2mZfa zhn{~=pVxc?_#3d=B5y)3HoghH(D5efcZP=F{U-8%RpGa9q8!`4g>hlVTfm?H7UaF>EwulAZ()4; z@-6hk&EH0StKLTXW`(_PL*6cX8|x46zm0NCc?bE&-+`Q;^bY9V_YU~^_jgd9@7}?< zwA~7X*RDW$n)Erl0(fVvfE?Ym0{!i?72w;pD}gtDCFHGjCFJ6mmEhCaD}i_2O7Q)W zm5`&?SE8N1TnTy`zYF~~MPXXuCGSGdKKCyA(UA8b@4LSTdFg!*dj7BPfj`x&P|x|R zKsUDv{J2En)2mS4uUCQY=KqG?nDuY)@05RIz3cUVqaW=4KJX5DAM|g0AA01K_t9R% zK7b!*&IicvIEA-;0Dk@B1L&_UKLlU*`4Hpd!5=~&U#`!;`w;zm#fPZhRv(dU5Zw18 z(7W^_wD;2=>AJ;7;NzMfqhD|RF~+BbA0wZGKZg8X@-gg!t3O6N-10H#J^3-}@#)7X z-%g)^KW(3Y?x~+Z?yvj=_%D0{ee}a8$Y<=QB!isar{K%gpQ3!veX8qhpQ61gKEt>& z=`*a$_I?KWe)Kcc?+1-<_#AYP`5f|o9l@gs-t#%+W{)pGf4?t)ck~y)yY>r=(|3OX zxqJEx^s9d=-YN}W|4Z2S_Ls1is`Po}m(W|aU!vdd^`-jx6{f#LKR-#IFaHvH?RQ^7 zj$Zf@`F!>z_`dm9&?9?%1v#AY70TE374+nxUqSA#`U?Df>?_zcUwwu4S@UbO!!}>T z4%q8!*t7YsQO@6f4SBoiYtVUD;To&K#~oIq-J+|}|4&e#*NxvIpJx^Coo_*Bjqea{e+PQIeFy%`{!ZfH3G%aSG8~n@@oJa6Vf_oDDk|4{=#9?A{v?K> zy^kLT{#~!|;bCacmlS?F418O^vce+M*{ZEX{eP^4JZ!uU$~|cvwBIikCf7ke$FGBS zxMCgD|1p9xuU`k{saUr{^u+q>qCBJ5Mg8Wl3qI!7MgHe1yjR0tTNm`dUl;AL#d?4f z6}A#QfM9k#@Z-hxAU`{;Um<#8;`%7(p6dgD@%pHL-}-3(Q`ZN-uUa2`et3Pf*QW$| z-2PhQCvJfDnMaWO?*SVi+$G54;wc+I4jw1SU}g1?V% zh<^4OLAF2E+X&^Iw-NG7Y=m+jybm*?lmH@8`Z=+zT9 z13%6o$o9)Mo1y$KY=(TS%~7vSHb+0)lOT^Py_=)lw`=_02(n$f))pw|ZVFqr0A6Mb zl=qx1Ab7?V)G4*&ckY z-yZFeQTW^KF)rP+J=)_9f^4U(WrJT+Y}9M94L+Y_gZ_;+J_7j{|1-?8*kmnU2SE2sHcLv|*?Tq&C z+ZpY2+0NkWlRJan=R1S`$PtjYJx72K2aiCy3rC<|KRyEe_XUM3MnEoBj{tu*sYdwr z)u`V%f;=BtPz`;sq#E*-s)l?WRt@z6-r=kFsy|ND{XZ$BS}^utGCTpvFQ<^07cv}f}u zlw;8-(9MnlpN|-YesGP#hettPUL6H}_4z2Y-;TS0-}~(XJLT|QkpB(4fIpA#f^_fh zg7OTlLH--ofIqfAPpCnC8f(C(MKvgoTZ42*)}TM1s`%&DfX~;~pkDXs^W!zB@5@U6 z-5T_R?`u$xjU%8pDgwUk7D4=i2+}1Ykds3rDF2xe(7z{wdOa2a-M2t4BF+vG2qXuivN+u|D?}99}BuWk41a!Iu_-dG8X)8AFJc=SjgE4W6}R^8H;kg zIu?9?Tk(E24&~T#9OP)+IOv6@aY)}i4&^y#9O&OX4s!j-IF#d$?5gvPT~(j$ivD=euHgTbyF$;rv@6OrWIW1IH6H2e$D`bf$D{t88s0k|>CPAr z{rAXt<<3Cy*ucBvped&ULC^iI)qOo z$o`wX>mWx>b!e}B>d>CY)xplZvkrRiQ;pwj4~#2~dtm-^#2zT;qXa7~%;Bf;4gLNx zgwoTs{ZKrAK=)_T^$^8VwWXcbP~1OK_|Zdff4l{sj)ZIcPXwu}TV!s~T-mbXip#%w zbl*l{^9iozv~<56-LD{cq2f%T=M9J8ou!*8d|kT#bO?NGFB6n^*g%%n(qHd@RtN<4fWI4X?g!Zc%RetzCOP|_g50E zr{{_Q{x)>Kl)@5PhUp4dTJW>*ZwcWHBb>idTnE7u==zz`{U^aEhwywKe(Pm~GnVc* z4)87bV_BrBf%Wzf_;dL84n1#6X@+RIKA~$fx?hKIu2MRzLoTBGI|z4oiaU(%ucd1W zJ#R4-@80Y~&mYipBVFU^zJbE0(zPVOU;b5b`U-TFM6?w_^T z-$6QMi0dmc3UAPK-&5QT_ZUd{BkIHI!DJ@{z%d8upL{Kh&)j{7+|CcrR|;5csXWRvH^? z+5;)iX1dO%>lS+cN$DI%a132Have166s^y7O5UKm(jH?rTeww zj-~rU={k;{rwoO^@(=X<2Df2=ez~8^I5iMrN?prZk=p(0ZD#!|8bf zikI+CUF zWM*1_rT7&}?`e8oMAtv*x}Cy@2g-aZJ%6P48`1q{g!5Z%un!&KcX1uGTx2#|zf`)9(0wn#+brxk7^XN=39hR+Jf|N{&u0_7paN^D<~LjE zchfae@4M)_kMMp$&zIBv+C=AkdVZd+mnf{8;H!#zuhRLOKHorb&sJbR!90ySLgUzX zJfE)hh~CKrx2nKCf!`3khOQ{#U8%T_5WL@{=ZoT>)aO|gH-w&R363wp-(v&v@q_Z? zX$oth>jS#~mco9o;k6~wpGI*f5&S1zds3RS=wiR)2!bh!yOiKqO@F6_y%?Je<#i95 z8&~*rzT^5)*ku9Qn`?fXQ1}~G>EG9sZg0ZdpRVue`3u6m$HLn88x(gvJ)c7NpA&qC zuH&`7za>~r*Pkn7>yGt1x?iO<*{+{K^sXm3Q^WS9YX`!;knpw|g0-`l(mFxwv9&() zK9*DHekU#eG=fW&&QEl?g#R(cw^H~-f@=o&8l$*-nGZ_q5V|haxJ-aw&ro~3E`44(-ru)+<>}Ldbqia73Ka;}urTcd* ztVe%F&->7|xt8lDg$wBVQfbel_#}l_Y257^ehoeUjp9C~>k7svxF=oLG9MHttMEom z`xe1Z^!_xu{;ctPY1osLwt=qQ^qGH0Rbb7Ze=!T|en->wDB;{oagWjcS9G1OX+EQC z64i0EKEGIjwL|{xRe|-|7P@-rzJ)HDdRea#?sUc9BhYSZ(ET11K5i)1r^?4Qfw+qa|L=N#C&f1nmDe_{^C|onihng-3-zA;XvfiY z2E|V%+ym*pkFFeD9ToTv#4Qx}4P777^N$4A)wBoGHG=M6vG88lbV~nsik})N^Uf6Z z3Ozr-Gzs@yg4GnZN@<)-aQ`9L7xFv0&k)=xkp8Z~{i_t;s?YDy{mXPcO!v>w)vh>o zO1GBazv=2E{9OpnqH9}DPuJrVA5px06&|8=7f{(|=>1TN+lj6R=z6RIdqR>G*i*wO zJ#@dfNne3AY5vvI{ig(9*5`lFwV1BIEACQ)w+-R-U9!IkE}-iw3cHD}*XWu=&+Aa! zeS~|kmSru1FA;o~;+yDxw+ifuc!I9|REF0gxQ^!W48iO5{#v^JM%N5|=HCT$9Yl0C zpfrx=@pFp*Sq1h4{6N?9ihF{>{VK4p#{9mcbVt(l^P$*(akbLP5&Sp7bLjd#-Je6( z!IXBRK>p{`HJP4AYS|+MkF~e0(*@P)Vf_o*A;Ys zj6Sa-m>_r(!MOz6=-PwQ+(XZ6608}Dch>lqr)vjI_c+DfPuH;(*h{qo;hi@G`+MG| zupbHbD(EuQZjn0MS(Ku? zO0fjE^|4siab4S<bdE|+QO(`$nV5t77NS5-sQM2y(`{Bc~fKca>9DoC4^+39m}V> znTxJ+KvGZ7QFMUe2Wq9+xl|gd`o~0NtjvM z1+rdCx<$ehN>GqT|Hy-;s#O~ROSQ}Z$Zd&ly+1HzA?R)UHD^-(-J=@7&O;O6@(C4GTKQaXMHl>nXa@< zXm`eS<1C|-Q&AcS($3U6;(BWFQW=1kXR?VUHFkX0NfT@ARC^}tERHzIjwJ_2lFlKK zHs{b9ySux+hB!>)s7JKQwIg%w#gkLnc*Jeb#=CP%yf`YB6E0U{Iu{Pqg3|b$un(JW+M*; zxpcO-`#JPQviY#HBSvBZAGNOh>%lUPea@s3js18QVovASF|SMU_YhhiY*zRW~)9 zJ((KOZ}FDCbSB*gt1uEl`$h;&)2Nd6wY3Q+E!E!FNkg0M|E6ah=FnVHEz6ltic6^4 zsD@2a&HbX?USn%`NTUr(6V}GK)Ap1|8E2zxe4upD)~5T|62H@UGbR=!oG?(r2}KEG zPLgJicJMdbak_1q=yglCb4{O7E{FRoIv)C0VNcZrROdkJ%`^onp{@LOER_I#n;3Owmvx^#e%TwI88`B zwk_j2ltqu9!9oQ3C}OXKe)F=_%~%sH&yvI_3KG=+r;1rCJDt+CXHwnKoaq$$QweU1 zwkMWHvoRY;Vy_S)hTb688vZ*qDz;8XwA~44(iubwD!xE7&Z8m1d!WR*E=R`#O*zL) zSuorLh8ki^QM$R@kJ-jz6Dz0|XjazF#-AUVXm%BM0)Bc2X3J+q@ zRHjM|zMQkFDC%o$iEx+lqHD?A)e%*En4pw4LvZ2nR4_W()mf*TXbVlJHQU?xNRArGIdafg z3hGQ|+BA%V>f73~PLEDa>UioPiQ(+^ytgK}DW8%sor;*BOeW3LWg5@*2_+6o&TfkJ z`g5QH0)tODFC$_iDe8EpBcVFGH|0cV)sAB(_SPA*pIxj}{@!o|3x^*vFPde)MOCau zq}NXsq~{^k=}b|>=Q}-h>_EUII!xFrUscR9(=#NlUXV_tGs{`}lPuuTTrL}L%abhh zFl(g9BP~{tHJ-&WW!j8}ruw;!w*NC0FRKbQOUyt8|1)(GO;yQViit(p{hTA5eAbyV zw|@Fwvzi*q5ewonEk$Qq%b1o5?399HsfDUe+ybYm?_D#+n#-gJ*;95AxYgY$>BJ z7IV}cZGOt6jcN=gU@DE%Y@Wiz;?eY!ws@frpx$-!)U+G{9K)gIT~0bci=6^YY>rPX z8PDaCp{}mPG-43+_!p5eE+XEgh0u zP9!a>DQ>8$hMEYLL5Nc4VnU*x*%*LkVQSNb{Z1;H?o2w1r?j;0JEw7pN3Fr(l^Gkc zvC-YIj6C0qjurNRKlZQ+=^8uUVY?!0afiBGJMoT`*8$OdE;FLW9?_Z3kEj_0!4b)P zdpyP|qS+LKu5SMC#5xI(lrf=5+F2fnw#7$qJ(qJmm-7s})NclwPv;*jrYW|oa$Qus zNn@yKlKE7cD;hbdKwKjSIoXV3+MppL%NcGW-fg#$0#3*ZjH2`-9FPm0uTH6NXqc}A zr7J1h;gw(B#k7orlJw=&DK;kv(8_d|A~hIVlM86k2-p$tHPjqm)G#aI`GE|phD0=( zNq4&9$MEXe=TTcs!{HLQE3-V3jV>qS%QY6Kv0u8J-T(>6SiHR?t!Qjn-pxgNQqd{R zGiJ0jwwjW$?WrN8E7*ykn#l3J&|ZBiSsjGyYymfGP*T;II zX)?!Txwfs32RCA)K||cU>4BJJZ*deAj3inHOvaHFs$wjXEN&Av1EQ%+z8HOalB!#- zZBy1EGxe;-9shdmXMtC+^f#q2G zrY;vR1R_@)zs3r0rXR#D9=fl1X!Fwn~CgfWbQxTI*+4`cM7s<4~^qm`3ZA z!X(7zmeHhx`jrPTws3W%U}>aaWu&DqRqHcUo=m0xR|tg`R+OT6eRPpHxcvf^Q^u6R zWr2W3^QKxm%C-P3y5$1Ic=@Kf${kq_SyY0LVN`~!$rB*M-3>&P?imoyX7qS5cB;_v zO;C4KY&TU%RO84NB{ z?iOlM*1!-Ac4UcOuhQKgMZ1PfnprLN{?N$*ZBdsrt(b)-2!>@C&7tv&`Lwjn>5OB- zlg)cnRp*A2bSrC@lFWt@u&SVLN-T|XX-mql%C5mJzljUNDSJys22+$(0%cREIVC$k z?C`HJ1y2=tUyeUGM%9Qgo6|f~LqPx z1kLN}b2+F#0{tWl1bMp(yuAc7lAZoS{2+)2h#F#sRuQRzhGoUzKfgu`K%qW^De6eHcv^07PqtAxrAjhts}_d zrtA{*=FqQ5l8pHIKQzjJK*JLOO36S+_Qn=zusI1Hy{O&(LyDn74TAE#BKCCTY1Y&o zrM8B{KqjsGCggQxMKBzCpSY^3pWaeRsBn8od-YO_3=O|!EC z>qg?6rcpK)_O?p$j!<&az3Fx=GrEpA#l?l=dDRzZ!o`J;nbcx7PU@ai9nH)Y(+y#^ ztLHln$DG+iYFD>+)Y{Y|sgS5nK9nrOv;M3@EN^$z)1Bj80J7K1Sxy`kFGqVmD=tn$ z+srM6Vo!)-o9F4~$e11Y5%=I{H!UE}ELqC{T}dIklsR(@o!E>kqbf(I7DxRSjo7J7 zk55iV+yJrAq@CHxvn?-of0Je?(SgA>i|`6>d%})(cRT7Qyf>BCgaKz)O z(;LTLYF_u1HkYdTMJ}ck8dv-t5uDEluzQ0d6T#Xv{urq-Ed2Fx1jq;P7$!tY=p`ycAF zoq4gwXs$}*74=@S-0FFkZj?;JOj^x{l3TJ?9_n*<_ubN%uJZZa!1jfNONL z*EdPu#j~<><)umo*L{&RYBxE#eYoq)$wXr!w{tVGyy&@xeU{FxpFXQ;M)OjY@Q7rU z&e$@CPDR_Za_feXN$8ex4&hMo2uip|MyQAzmuGe|xCIjM%5TRYvn2k+GTEii3{#8|p1juG>YAR|e_Qnw^@8u3GcQ4kGk-m@C^8N=h6LoP=mhzfN zmKZQAi^tW_ZyIZnR!k#j=$@>Ad1$7XrEJaM1ha5c;Qy3FaF#j|$Q~Mv3qEyOY z=J0h!?XEnvthA!ez4Vn5hz;vByJg>&`OPzC1UnWHnD4NXcfIC|1~(szK*+d7n7odl zt|}I7;^?;W~a-V*-Oezxcb_pWg@d#Kn zp{lcM+d90BK!non#JH1pkfp*^08T#b^im1fVyWe=c2vq?7Hfejc9U1}9@(mPs)zD!W%?at;v^HvD^ z8sjlDumxk%fxtQ`f?0y#Dw3?Vai?`9c6yZ8+iBXu?Z)Pzv2jqj5Q44%6=F1Ivl$+# z_A>lH!SXCt1q{cE0mK3u}3Jl{;Jzn*w|4(H|tZ z#YbZ%nDyR{z(N&|jzQ{@js~kVzdVJqw^4!9W*i1#UV&ql%8IY2yQS9!S==r>QXABN z^~3ifxB)bIS1Ba}Blu(Z*zR+>L^yYqBGR5!6wE^w*$6uq*X8_RIEj}R7L&aeJdd?` z|0^}x@@za*gTnP`P3UlovoQDJHMw{XSA5!x23a}t=sUemd)_o9$!CWMhjLr1SS+-t zbO+=|QXs%}oCFqC@*XA4D4s@N@Rum5%%PZUG#2lb5FUk9fK$k3($Ax=^KdATdd{>c3tzGGbqlFhi=1sn{ z%Wk9D63xlDIV4Icn4|QiUtzIqntI+BCQ4dUJ)b;=xJGju>xCi}#{hrh6oX z;)M&ml^TwUIqgX)VwCMQ?1PcX8sElBBed}jQp^en!AIqKc~9fWKElE@Pb6vryFQAd zLVGx@iQ^+}@tiIXMzg$Rdt7U{@}cV$pHNc9Ju zL3h3_-7jrYjQQ?lT>KP0@PM)|Q_+HpgZiI&kG5niP07egnB3gr87@eL}k{N1Kc{er0af`QBR4n2G+i$R`I=E3y7^zkW%_}=;0EFW(L_)OSoLST6*U#Tq z^bT)FvjT=7@3)o$1rkYw*>+hN?%6X4V?Qd(K$3?^vy&AmgkM>*j)+749&_F=9kjYa znHal94Oq>qwlWx3=hZNi?ud8hvpVjv08bBimV8s2-v^&wVh>3b&ntovJaI3dELZXk z+kUVDY5`c?ec5ccOIDe`_x}KGd$Jp_X&VyIh;@+nR zG_aJFZ_Q|)KexV>S)h)|YsuXWNNVlNr&1SQHXMtF#Ixw{f#H zBU5U86`_Bm_AYjD5Dw?!c|1~P_Ulb;1H=0uumdYf<*^BiFv#*v$9jXfto)7GV<(g~ z(|f7JjQFBSG}yNUe4R0?!8eDnR>47LF2nb3zRkn1W;Hf8GFPy)g4Umod4X%|Nab#`%VP-V|{ z`nYRBQY&qHAG=z779(p&9aKk?q(|v?kzEbn1BcJGt4Y#2`L@NbhH$yOoHL8pYC19$ zKF6-+7ph1zks_t%nRaz&Hk0qB+g`g`4P{Q!%!K*v7c%VCI+wN})f(q{mz}Yz12#XU z@3yOp&G?a(mYP@0FyW3^;d6K$hfQABxIoP+E!u{X=_sD%73ey7gWV6yr%Qyo8O+ip zP&f18BM)IqJm7=F^e8lxQM4CURVwh&>Fl$k__rua*HJG!Z)MMx%-l392; zl+2*DzGZex>-+`Ni6^imGEQ6_ntd$6P zjUx`vw0M#cs&hrk6doQ4CEl`!PPWFmhQ1v)i+EY@O-vSa`X}y9Hq}IpMeI1Hjf}lK zo1r{YymuB~CgRS;5wgZvDT(=;1fFGFr=P8$h%TM~#WIu?sht*8FLicxRqsekUTKId zvUeS~bmDk1YP`-aQE-Qh3wd*Nrvt?X4b~8P$bV7-KZI`P^W(x!ntrnJQxv+70-wby zlb+0ZHod%&!!uBtyN&76(nlI2D%g5Lx-FBku+s0va zKhJwx$qc^XAYCSLO{i2OIJ*yr7ornKT0$%?6)sXbzmY~?{f1Xy(lXzh<9Pizyof+W z7z9owA&IR@Lgd0%QX+_Cr-c_tm{@RI1La}%!_wH>67(AP>4@5rh|34~g5GC;ItNpd z^DKpDEO)^nOS2`D@*MxJz1&g%Bufurw>j-mcAUtz0NsZr+iP~9lsTG9@ykJuUEkep zwa{dQ^NM3J)_m&Fn(jWq3HF!`T>irj>NRJ%L#OF-YgW&ny;vk zKFsF3c{7EmHB$sQI^7g?lS)Y+m^Yj0OI<%P5|#BnJ65nIr{rhHWTjbX%A4T2&5@_3 zoG95LO1aH((z07G=Pe3ruYo(Ql5{CMlkpWeZaP_>&ahI~MK+oEDVovxEMt8|`rK^?Dh! zp;Iuct%{jNWf?^(fdQX%Ig|xWvzwatX{s|*Jl+tnAT6DrM205Ggr(~aX<4;4-^$>O ztI68)kz>4~pOR?`i=a*!;ZQ3zovtjK)}N&ZzN*uz+2FXn9% zd{-7h36w|BOejztbW6(OD(V2y0ZJaG83KZ}qvv4tScyO>;@t6gSFvp_3}`m!*z4c2<%W8;rULae!6WTlv{U{ zmx4*j*7~G$A35jS8SUmq()A(Pf|ZlkU3x9%miV7(&`UW{PTG-A!m-Ud_JH0IGI$>l z8(~})wblXo0TN{ma;+6@Z+DVBv&dwvD8E9&6GF@X9-MKZ$txll6AN3pb24I;~~7;XoN4LgY?$Skm9I}eBG7Yr~>fP_nM z+-(o$BrVLzI7=*0`YWP@Kn!Er;y2dUcEu*lbdv^`cS*=zi_z%U))8CED*#JL5SB*s zy)0k>vpy6}1uqeeMMZepNMMtc9FAIaY z<4l{;u$1OZ&C{38Uszu_)vyA4$Viq7l1s3tn+{LA6h@a&P63o|k3=9)6j#y4B@^du zhUW#9y27+BYUHi6sCJ+p97F_{<=qKg#?`=7g2;1Cy_IfxI|KXDs@0)gMHZvt2lhFd z30@$ku7G-I;n;k&*^({cqkA&^9(_`}HEUY_Dn?wU!;Fy2W|FWkRK2-&!>sx_%`+Pp zSzJ6bBjc_9n1W){f4f%>{|+K z=(7DUH78bxX%`^f9{9LIJ{`|#5>{f=s!2`I9?!PtlhJGmzm~C&i@(PmXoXZX;ox-! zHfohU#UOKt1}XI{1;$>Brqsy{wkwc^DtOcqg~NEr)SwOu(v=snFEkh)7kzSi z3y3?tNEe)w`76N%tHxr1SOs5Aw@S_93j$rs>19(DUo@BDp0u&Nm028PR+Nil#M2^C z9o{N_!Km0}wzbQkP!^38b25NtL?LAC%KT3Tqy7*uOk4OKOz;&8OTLGQ|2Q{+eOt_I z;;Mlpk3I2rc!0ey`J`YdMB7jnJ#{<@J%kbB)Wm^X6UlBS8iA8B5=~29ACXM}h2x*Z zm;p-C_cOLhyvU`IX`K{DB6d}~6%uqYu)QFo2TU+tZb-+1dl&uJ;$ra**_W5I0@eXm zedNWBOxk-B#oLW5Q-WDd^A@yPzS&r8;KxJj>s)Zz-=p;?R4X2~>}W$0aeZ25D|^(u z1xQjCiJ({21rf|PhN%C#pce;ww%{>{5ZZiUCF5=Ub!v-89lN&8^B831NtKwsCdlhT^({>$0(t&q>FXCB zwa{xK1^TDbf*cg?a6zcI$pw$0eJ=8<+cK5==;nSISHek82&>2vl!FOO0eNM`~za`?&LfW_gW zvi!M(ho8Z68|&2|y5W_}587qJ=1-}aWt!Je*_%em_}zO;uDN?cVCOum0PI;m{wrN(r?3{yn^ete@b86c=n2EI7bK-IZiH;NXGU5f%cEey#NwHl^zfck z6c0XWdG!0bx81QY!o_F#i-SEX<{Jz-?@MMJYUui@O^BD!4IVvW=?ffQ#RQ8C13oE4 z+l4(Ax`)du821YYdr`H z1r6+qGaqKvrO2R_W?nf8?i{po%QOC18R+L`L$BZ8^9Ab>0q-K^=gnYje=B`KU=KLy z2L?uTR^w%2TKBaAORTzdASQCrJ68d`V)M#>6(O1LAJZr>Z#Anty0j5IePOC0V@uZr zisQu^DiN!rdT0rnCqoz*gDcLEEMk*r+PK?Z9Lr4v28i3aWUYwdgF-XahK!eu@l)G7 zOyU2#^h+p!KDl2+bf-ZSumn#{RB>vvNYrH5i-2jqkecrgBRF~%^MurUWVd9mgt?hy z4<(p4osAoeU}9+m4V<7aiDZ22*rJeep^!l3v}k^u?63~ZvN2v{vLPgy8+gh#7K%HN zgil`Pw*rSdntO~7CZ!lP-hv*LypNl75dtB|la4fy+OCr~wjyJ8i;UaV9y_6K!i30}@ngmi zVr0I_bmY7QD`1oU_)rqF+?1pHX-wv1@qx6YA6Ew9Kthux1Hu{wqTRWywUqg$uiq*^? zSs&e?e+5RB&BFZl`(%2=( zKtj^>_+I&fI1uFQ-UgNidctSUNJ@-mc0-%3N%e9oQW3edvok4X7Ae_mm|^l2UMiqw zS$vMK=|`0~u{QzPG4&}GNG0m8F_YMn#spgeTq)b&A*3!DKe^K4<%sgJ1pLulJI@=* z%MwJApmcKbPzvvO-{Iv&NReIPNl}2}h>S>QF0NNHAEXw*gdv@5V=uT8^4~s=_>A@S zhX2}e$!L)h&RRa06xN9~w)n@L&OVAyl3e@E6-ua#_PR;dYied`Sip*sg|i$G{Xe2@ zDm*Y|Y0Wi2!W@6Hr%=rlBxo(I620?z1AFU(eZRbHX}UIw?fK7=sKcjhnqU%f$3-!o zmOBWzC6`SGgZ9cNSbLD5_%Zw6poUnCgT75rvN7kP65uX&Sph? z&2Ju6(+!4dDd(*8PXP{=xXcls&Q!ZG;j&G+N{0h)e25#2APL4SJQLVUPvL>|JeW|& z9r$G60EI+8jZq#{<`sEcC2mZ9v8p`*(fShqV8DCj|Gb%*Nt@=d_q){QTch zEhOtxwRf?p+a*_`3jf{Nz(k;9^)egb33m4L(gZb&1BT0rZf$@<(K(b#0Y_10Y2YC> zQ*=OZPdap9;(3*d)XF6C&$jeS$%%LvP<%#`g1U*QoOnpqve+9`U5;<#^~Fri zNyvwH4B7CZ!PJ0>-0Edh`5dC2XtFaWY##XFU`fyx?_9xyq9jx+n8!#xwyogoU?<(> z#HQK>ISq7p@XXa&RrYLK$u2|B((CGBj}S3{>d6LLVs+L#78qv=6H_{A>Sh=?lQ?cX ze{`#{Zg)PN;IX4&&YTfm3zXA33&^O8c6yzhZE!D+r%s;cD1XW@gxKj<@02-fSgN1~ zNDi<5>OkS8!db)lSU_?Hf7UR@1QTBBtl?&UDFa6hM+Q7r;Jw#`|_s}?M4is+v} z3^5VJ@Cn2`IUf8W#0z2_tFvT|_&DOc3jO$mnNo8nmSsJg7|F|?NnCC$(E67>lNgdt z24p^#P=A+`%&8}2nja7*W-UQD#Bjrgbc(`Tn1Sw`KJ;Oc97MCrH>_U zS*dU8(M-zeOq&VFAdV*Hl(Bd)H8)1UR_vGiWxvZ?PAaKJI;To`M9Lmk?3+1*uycx! zEDl&8EYfJnh%rNAj`_ zTWtiLUJfnhsSgugE#L4>=c36$oK`H(AX3B7{c5q5J+rvqL0mH{abz*Xvy^mZm@PTw zK8`C+3~*dAnXHN0h&gJ&_KqtScbwbz^l{g zYpG+4L44pti}N%)j+yVQnj?#4>M12IePHpzCfom+&m!<#KWC>_Br$xk39YVqDy$|e zcVcnN?C^=j0cz1~f)EpoDDFK)E^%IQs8rBOY}FPFA;wE&ic|ii;u&*h5)ooGzeyOg z`H>Z45SMI8A~C=*#c7_?_}{D5ov$`8Xve}U5`#FVScrwbaN9pU{`GTA@mxn{T$vQF zW+r)gE*|iUre#Tk2TJ}FRcvr)6)VZ4t~8O7&B!aKBGcXky5uRvv*rYjq^a*nWMVci zN_l=C3=Q^xKc-YeQ&^G!t``~LiD=p;siuBAoDU@)UPH6vbbk0?4kaEghZ1v&Xg0;5 ztDFBju}-C8P9z>a@QK7^m2{Ko1{R1krDPN$@tQP->YB{ZD4HGkMB=?N-Ehpw;z=86 zS-PjT;(ewRK%y{k#mdQwTX1TzchayiRJl`0`APZf1UZZIipw5X?9u3-$mB4QvgZ_Y z*Y3zCV{UFGb%9RDr{J=2n6^{JeW7;X1B;n#m(yD-E1~_68u++kwLZ;>#XLB&JEDhO z8Ab!SrqGqFi2FU=B4A;4EnAr++kgg!+(3t0lry9yyE2Cr_jgdS9XzWTb6&XEbAcsJ zAz{fW#in58&U-V*51T`ZUkfUYoG_k7GiDwzDSqDcP%w^)^TQM7&>KbYPLuOdI-+h4 zOMPNe6=BZiJzq|_BBR_qa@PBY6F2wBVtS4>rYoMf!12VhGu`o3;z$X7SE}fMM4{9W z9pnMU?C2k+>+Hi?y;pzGWa`rAS)rA>eKHY_vh({WFSpY*dD9NT~8(?t;@;RZ8hz0y&*wRy3+`OtC!6ii;zw&|JFULB);B%sIsoZx%L8 zC%k+wYO!#RR*>gBIZ-!Rx`*o^)01U`Le^WfBzZD2#IwLfQc1;r4}O5ghf_Jc8zLuP zzjV^r3FQW+bApPGFq-xF@Ug`u>Y(QWugrP2G*)?dX`34$Zo<8NR0dy;EcQlG4&ioz z(dZ$m?U^pXEIhWDMJAf|qP=sALy5XW2NwsE@F*plEmGOq60%+EI{?C)Z+K%+5l_5B zg+~_izGRAUf(G_f*n(byc&Qv#vQH&6T(0gkre`{6n3yw*=dR2qwBwgr=kdA|-Idh53=5%z?V}g4MO#C8|(ru!Fkmka} ziwC0NNkg+9F^qA4Ug(J7z4QMW#c-hpL3v&Y4*AnP+g;u1xVgA&{EO*4jXz=}OBX^Q ze3G$vC3U46S{UhHw%iOBKD~yy71DwrF5VA3!ZQ zthmd3!UH?neMECaafGc4?}TC@3j@VTduJ3EgxY}}>}8F7@04O*(1UR`z%j*GUVu`q zvqPs8>mkKu&nPCnW$~1Y^bU(QyFx>o(xt2MN91}OF=1!ph++0z8+Vkf9{XGFM;j9@ z(jApWSwD$`FJH>CFP15#GbLBLvc0m6S)->EN8}>_m1WN+Ugnr{f)oFPqluR}LWE14 z)wy=*bBPDaE_5uh=b@1#XhD-^p$K4L7XpdaO}j zKn85DA+b){yk5)On0WOxCv@d76|NJe``)aSe^ph|-;&~aZ&;boJ%fR>h@~gZm^DYX zC{?4c$$7-GLN|*`N03*VipR(BPbSjb+%{%Fm4iCFmw&-YWN0$_KT03mVK@jv|D!^L zrop9)&?3rIjBEa)Zi0s)Sp%p3AX_`-%h%LegrcVq`@1J7J=Tf6M$0fRuk>QqR2*BJ znD0)SUt-{1yfB*VlzqHim_|tO0RGuR_biV|;)3tjKU>~Co9W*Z+V9H+ferSyOkA_x zw=d*<7E-SXd=MrBr0`Rx=bF>R9H^5qN{e@sJq#0~85p_SaSG+@duVfmm* z_&j2>$X(?cFA9e{YD5vS&c0-fg-Zsrf;baaCq*&4$7Qn<^AnyviJ#4%V&qgS+GIO~ zEc6&d2(>Ll%9q5M;Vet)>7R4sZnBTi*%x7UfROCU;0WY-?6VerqLxuVTUhe{R<4)msAWFXkH6-a*5d4t4#0N#Z%Y!Bd(l;*R%){`iR z2z4F9LhnTy3`~ApI+L(TaYXf)-hA2D2)#1!Kv=+kH4vpq)%dnMqdm4c_?Wdthv^4rl9F*ignus;J6o~{-AY98?jY6yid9mndVM6ekrNE}(E zBb%^N@gHewN>%o!z*)bBI22h{kYv2@Sna3Q?Ju7DPj)nQ@K#j3MPy^Gg*TsYO8;PF zr0Y&bV{SxFKIYArPS(8i8;T-X<};7YjxjyIkaBL8c>XiRv#d4D3QFpN`K^ZcAdi*8_*F$gqf{j=;Q;gnM=Z3$XoQv?ci%hRMw> z5o3bsk;c#$wMDNmdIu`A{5xc&KtAt>Q%n+dEZR#I#NiRh9>Hrn2`SM=ElTt7HYkDn77>-k@ds$C{0AYI@z%YD}6 zAwF?AA~p|?QpTp{&N#yu7(BY_q04!{BTnCC7unpKkd=LFMpX8@ahr!@u=NRcG?lyn zkE;YzA|)0<0F$F#Imad&6Ol3Fr#d*Cv~LG9uGt?Kuu56uIC9Q%#QR{1>~=$RH?M11 z9pMuBi1Lju9%1CGH#EL;G!>IS%7cTLyFA}J?`$4vc@}5~jlgVzs_RnKy%!zY>n6hJ zt9#*d0iiD5f0QdjOw_Sh@aBkSQh{EmH6mGZ52fwKiOpio26o`%*k<)?6=fK(cz{-iKA?_A|&WbV^J+*d9{C})k4OcydlED{4E%WW8ghO(dBxib3(MY9s?rl zd|CPYh-+q%cw3NVNX%{tYt%fANgSHxn4_I3$tv-w>&edQEyvl;;v-7RK(0?##rGXu?Wd~Ced+KoJ^NU$hrGR}$z7EeLc+Ugz*=!`Ze*B6tnfH8z$X2BN< zbZ0Lg^^941zA#axmndJ9rqU|#9KfIK;AH~+qQ(G7iItp*oXwmL`k6XpKnOSud>bU$ zPXdF0U6n;HhqCEh`IKWsKIIq*4{3Dp_-7YiA5~UJ&+8V5pd8 zq_WhoP#hT;7m6dp14GklJ`bL)=MH$I^^9oo1^H)0Cst+klxWd&@-&x^7pB>vIVGAT z&nZ47T3%q|W1`dMnCN_Wx1;Ao3tP-F(PW^@Inj|eY}IB}n#iu~aa=tm+M9nAoD%Ja z7o8F<6N?7^>}*VSK=Vn_5%{U4v!j8;w3+5FX1k%&qQeoPBcnr6ZYIL2*E={GMjt+& zWBd%5QNTkgGeSb@Fk_RBpH{uRJe&$G0P0dfB%@=7_hM@3$mlx%#Aq?#3yzHTyRkV4 zy6Cv*GAN~vijEi;ML#D+hjEGziY|;VJSVy^zSJ?%1vsHoq6_1~heU^C3(trS#_AE# z!P%9WTJZtPrPkUC_Q2`}Z+!@_Nr|qi^`GTqX=Y<*zz4MAc6dT5 zuZT(()-2eWe0-?rzKBf0c&1B+38|o*BWFhQsEI@UNB~L40GHZ8;zop zfzr7;%ZfdqhjMx%@9ccqKQ=mO{Ys3ug2s&?Bc~r%m%VzKL%Jk^*Oa|vI6b;n6ifLO z!34%Z!5MmPs{u3fQgIW3P`Oor{zyGRb0^-fYQ`FW)+L|4?s4TTY1i-%P9S5Q`%POS zsIo+uEI`QU7c62blv)G}{d z<{@ywxs7n2^()3g7V7|R9dgv>B75y* zk;E|I-9upbFxqJelX*z!?ipA=cm?Di?9u$bs$vzpIU`-9X|l*>^HD6;gWonN8&xX! z=ffieV!ElBwZSi76D=e@xJD<36(KnQ&YqSZd*dP<-j8}V-1Oa%wx`r;_@Kxc+}yN! zz+ZRUqj@!^Z%?!Qa4#a!g8YK6Dt@A;=zDX<;PRijL4^R=8>$DjQ(Y_t0`|WrI`xj1 zXTy#{B{mK-m;*iB=<@XFL^HjW3rv0uEzBpk>yzol<^nIEuJHCcb2*>kV85qk; z3zrUqjqZQCzh|F!#R5h>XmLsv%fJOr3>?IC;D^O1ky4k3G2#JOEeN`i@e&Pj88={z zj+c^-eksNF-C}i+$`l8ihvW`dDnV5&4Z_hKTk4jU?u+$VJnZs~t}x~xrz+BRxC9{f zn(g}urg?%;D<<~aG>3obzoK7tU$-Y?L=aSPJzC;<;sKQgBs(??YjK;!UU^}pBCoti z{pnvn{`~&qwcV=;$Ca!XrE7_WFLMwc^Cd3q>wOm#xg9pEU8gneRW(&tK3r7FLCK}v zl0AX))m|8CepA$CQ?%3=i}bd5FYkU%_Yh1ua#_1E(r;$O60HHWY|2C6nvkJ9WTVt- z>+w?E3Cg_8@hW+F=g<1Y8J+2QY^z=hK=v$u71cb9+;$o`Vhi(jknDM8>Bq{?c_rC5 z6|zZmdN~uKy*^*SJQ{+w>mo3P5PVEqE2_t$wM`qFU78N6EV%jD`gI7F2t{Hg`Qyz$ zDydm=7L9|0YD+fZv}F~9*G91~V=>7Ru22LY7|%~V0l-H28knbfJk={+3dhPyc3h2> z{Fr?%_uF)E4f($zpUBu={P(l@i{G-&^Y;p+6Q0Y9l^9*d&6Xw`WVU`yXXhY&$a0%J zDrENBujJ8?er(u}{c{%Bc&1tHpJ?ld^0+7@VhypF-jUE;{(Ol8i;X`y7Pn;uX&bK^ z^S1gfI|}p_{rMY%(RSyoH!9S5$|pD6x)TMUw4Vn?_I0K8FO(Et!G-Oq`w&nicb>cV zq8HNfk*}h0P<=%L$TqkN_j!Nwpzu@a6c{R#xCV%6E0`j=D#REoj>Lkmz1|AYRq9u4 z-v~KK9Sd5-my9vy|MHJZ)$v@eF0Y!)!^XtINyV8l_cMpH7a%DBmJJ+@M962|14kmN(u_3owT)x|r2xo^fS zH8apfD5m3UMlrp~0`k@Yj6@peX}0;h#X6hHL#1g<)9WbKNys`+)a}EgMpvAG=AIsQ zYWUnW8ZPc#X%^wO8jY1iSA`}MvO5%qNy^@I8j_T^GJgSb*+ z%%yf;WD&BUf_IHgUYl9OL07+}6o(Fdry)~NXSW}m+`K1CSFiLfnZitVT_sNhm;%MS zot&ARnBA48?YtW1kojRXXuJ$Mt3ozom?cf>Qi@afw^}3Ax9=9g zhIU=4NW41Jhrb;%DLmK4YNHTqG-kN(S>LNI34LSk6i0X7{MKCS{yOQ2u$N7H>3a6A zn%lvKm%DGKDB!#}ZzCw+;=bLeU7DP0cV>es^-DW`st0k^le{z z{g-zZ2w`Lf*C51Sb5AINN_-_nX7^`J@wb2^KyZqAFPU zkoegUMU$-M&{BJc4L>oGGu&|T4hAC;?a~YcyDX^i;U~wZKoEaj|IHD_&kgGgEBw@? zI#1|5GDKAIQ}wOj!NaR7Pgrxu;73?3cL=zj6+Q9k5qO+( z1hhlhCmq|FAc1cRTyS&Skwz9tbXJxm(OaXEA#*LwqMA#8x7{D(Rarli+E6~8Y0VQM zI4nTaYNlWfA;EPc%~WI3k%!(cx6A!!9u^L(v47eO5M>(oW(cWCz-g$&s^-*0ro4rl z>n3-j^OVbNXM}gEix&elw@e=cJM;;G-ZT&k>k~PZ!?T~Ak zo-!fG#bwmR>aIIue2CfW4N=PNr(}Vt-hS=(jYOEWAKuS4XUVah6GhvT+b(k1Ln1J& zx7+1P9Uv5-Jf`DIFuGW>8RBX&cX3vv41|oD;Vyfk6&_7 znuNhYM|)f^BWC##UM<;ae|CHlB5^Cg7twG(=E#Qkml_oz$V_O99uO}Av1@O!zQN4Ovx9Y(@ zj*z2e;!jr>+3)rLdx`E?$*kOcq56_i4UiXB2Qh;7TCXpaS%OvG$W}{sm{!oCSZHR! z$C~0Qr+i9_psy z7~C77k@CI-qO4%)_9fjS%_%Ih8R+>>h2~*1K|U{l&($2|xaV0!>-HWZXU_RW8?`4} zK|jY&Ry;)gbIi~vBu(NH>K{Mb)wWF`7fq~X4K8>%?uY?FM!^I^pu2)c(#SHTFs2W- zgOH)TM8;%FUe;t+x~MvhVCc`8@eH{NODIbZ0fDKZ-?gp%KvzPdyS^y;F9s2%BAZwe zn0leiNqsLMAB9q3aF}!+a8=o|D8`I*E>8_}tn{fmDaPjLGMFbR^PhE>h5sCG18{nW zTT(UxojwNabkQ%r#c*Xh&foiMQthtGp?WBS)ikdl=aVTKaA1H`#IwCQiVJW5h z!u^)9^OdnVy4OrnkK*PVlTF%4gL?xM^=b}K)Xh+@oaMw36w^g1b2QQRK-<$)YP3Ev z`fSr=^)FEu1g#;dGeXlyq9~}Aph+GCwrLK<3jK|3ii{(Fz1*#_7N$+W^jhoX`URP1 zD3HcT1mzc~QV*~lFSVd%_}ZxNdH?U{ScDkC$U)w6KM7DZqVj#3okq;4{cEqP6U}- zu9{mlK=2SYZ^T$)M3Pxd(qw(wx}=1YAG*7%<_WfvB1Ip9gl*H=$iiw~@`51IG^agL zB`hOwF!X`2ljYl(L_G9bvLm7o1!QGTjr_;b1b0im()O%EJz)=#y%wnG9=c9g^tJ#T zw@=MGV;~1Q`s=9yjGhkNhLJuS+IOapL$3-{x)=UX@LKg060yLEh?oBQ2Hoj30(+5U t5+`iYKsCEt$&F*Ddr`gc1n0F~hKU*E_!WXhV1i>lkKUrhfqsSZ*Pq@S8vFnN literal 0 HcwPel00001 diff --git a/binutils/po/es.gmo b/binutils/po/es.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f5f43fabe671ab0db94778c895de83726d1b429c GIT binary patch literal 137588 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�r#hz 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%0Djj>7#!jKz}BMG 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 literal 0 HcwPel00001 diff --git a/binutils/po/ja.gmo b/binutils/po/ja.gmo new file mode 100644 index 0000000000000000000000000000000000000000..5152d33babf8885213e8459c3ef2e31add7f8ddd GIT binary patch literal 97376 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 NZ(;Z+E4&S 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 literal 0 HcwPel00001 diff --git a/binutils/po/ru.gmo b/binutils/po/ru.gmo new file mode 100644 index 0000000000000000000000000000000000000000..88eb5d3023c4a4067161be58111b3d87b4e641ef GIT binary patch literal 130197 zcwXGS34ByV5h9{!s-qA3w?@x5tu^grg88Ru+7*A$w5xh*>X}rgY3&Iq-6WmJh z9D+v;*0c@;3kV)Xu#DhY1Wke`617}5k0ZEKzS|DLcMic$1dE0s z-w?q9f;SO7gy6dbk0kgh!BYsX7=rxv5zHpoaVX#)30_PvPOv+{rwA4kTsIWu%^9X? znFManXmcg#b-fbwuf7uTH%j<3 zSAria30_EW>y@B)R=K8iBRHZQ<+!~Z^`A(PSgw6rj(X=^rD=x~97?b^!2rQt1g8-! zB)Iu1@ZUEQ=|_(Q-De2)U^*kg=Tol+|E|0m;s3rGbmv};daSq__5MQzm5JbK1S<(P zR)7yH2%b%F55a>8o<0il(3xO9!NO6<_d0>kjzWIx2%bx@qd_u5@CpOYGJ@bG1n(xuUHXd}wBs>Bd|wenzql(1etZ}Ny@Ren`SPzpcv9fA1p5)( zb`A2mXf){EG8*OmU^L|Wh!Dar3L&5R5aj;_fggvE&x#QE+`d-RjwN`RzzTww60EC5 zIbN(qf88$d;4syJ;K^agO&9sToZy+9K8$v|F%0>BD2)F45-!)TY^ z2zJh(_XxEkWpqW9&Y<1S4jR%^5G(X@>OPr4U!`-l4==UwiD zUKw#8@(zwWyqbPj$1>5n4lBY46C=y!b|0H2HpkS_TE=->7LO`Z z-VdT2RSzP+J0<+V2Z8^_gU}maJqYUgYNu?(SLV540@+dz_@Vf1mr(r0_1Ak1n~Jzf;5zAGYK9G+xtu-`dUMr8(BD20a@2Yf@;QDIzPnFCyIejA<*uHD@#9|t z-xs)N67uc*2=vU=k3i1vCP*q)Tl5I}d)G%%uJMneJ*GSg`TFEh(EmYT$H!3K0gnN{ z_A$uSJ@Wm*W01FPk74{ecCw}&MzDA?^nB@L@cW+0(8n7lqu#w9huqXX4!%!*9OeJ~ zag?|96!hz&DWLn8DQMScr$C>qm;$=TOod%xPDT1ZPsRBE+*HtCI2HWJmE=ir%$zkVjhyQgNN952j7KiW$0a)Rg0g8m;r3*j#kJd59L6f+qa_e?FGu0Y`kY*BHcp_+3>2SB?#~4cS$!<_|F7O z2;cZn(_W$Qr#~WFg1$$8tZ9^m*6&lu_m7{VpS1rB`tqF5&=1N!gFYDZ8Td8+Gw}Ie z0;he3_I&*_=%>w}L9Ta8{E2hWPtPSt#nH}}?;dlIU%?!--{3jW_gBwB|8JZFz4p&J zX#XeYKrUXJ19|&l4$9YQF7!z8Tc9Q5z_9QNMK&(SV#e2#pUeGYycvH<<1;{wp_wg7w{v;g?#0`!kR zEkHX?S%C7*U4Z_xZUOlF!vfT|-9pG$=Y^nGwh($Gx)A&vFX0mxqP<=dxNsr(v}qyu z_sc@q1#Q1TzwY-1si@?9j7NPyF zT7>e(7J+}a3!JqG@-uG{r&zI1L#+Q(# zAZKk?0-n7Rc>PuaZ}dv!bK^?r-AOB9*Q{L$IXZO}`a$k0l=tFQ=ue|op`5p@LOV_r zyk}NH&fi#t{e0?>>qs^-!SI4cv zIC9n+(Dki>TokQAJ5;QJ-ixh4`LA08zTUA0{bbr2wEM?vkneW+?(jA2{rs=N&%b|- z^q+hUel7bN<@xz*=&7^Ug8yY}k#BG<_&aVb+WkR+FB7DpMq9EL{Fw9&=so`p)!S>rl_@ z*P))1*P&m1D&bq#fiK6b2Rwg0!iTI!KN`Cp`Q0n?1n*^`@29gPa=Mfx4 z@ShtX*K0RGFYVfZcKCGz`ql9p!JjT0A%`U!QNHSpke@p?f-f%%oVO8j@a;y(-%*>O zFE84J{@8O9`q{OcK=0X2XunT4fj`SP!7kad34A$YGx*n2V0<(5_O#8iezF)K96rlJ>J_6ejT&}^*wb5?0}1Q!2XNv zfSvK^4%i*bcEFBo_dU&>3I37b-2~tH9`uLpggjrf6XmGeiGFj_PRQ@nov7a@JHgLY zJ3+7QF6iaHyUwhQ%sdl%$&&n}d|{ST0Jp`UmLE8-D=)Wcgn91Mv3= zJYhHVd5_(Y^XlEmr(rkR<(}QrUw5Njm+wY9?AVR=YqJOZ*7rdFULf#_J;<+C;O%?R zPBZtQe4p;Lp$>F>h~>@YMn{_M)Dr@5T62vKRHZVK2%%aWDAt z@m{q5y1n3kyM5sQiTl9M&il~MO80@^x9&qZ-`@wl_3b|7qyGfH^#2L+Gx8_2|6hJW z|9isM74g3l|-6im;Um<^Ue?@!k z_!WFP{5PcQ{u}r+>^J0h$8VtjvC5oEd}2r^%j1eyN7 zCH@V9+@BW8ck7G{)$fic$o-)!!9xl5A;|q;AVDtIp9yk)j}c@!d50j^?;CMnynT@%^ZN~gEDzriWd8m{koDogtx>M_twFD-HS(z=$o0NY;9G*X zp*8Y5{-6vc7ndJ|^8Do>l=rEFKxaNdmj70N0H4nK1MvD0Wcg420r3wJWI29|Aj{Dv z2|wXr@Ueg(%iYL>QT|&F2EXnl$nr3QAh*jK2ctfV2&(bxVDNVrL6*CAhk)U+ka;8)S1C{NX)C}$%m zL6+Oe68{20w!7Y!_yvceUDgTS4vBBw2IV-i4ZhEA1AblD2IV)}Am6$+;KQwLAa|1p zazFgI4dn9IHjsl8GePgNOq9Pe6Y+n^M7btrBL7*Lp!-%P(k&#&`Y@v{>UCUOFXUATQStWWD?E!;t?g1XPy}@gvdRuO5l|&5`d_LTCGt z;Ky%ALO&dI6!Om}$oAQvjspKbJPP<**Jd1|Jq34f)$3->r^8J9H3u{xRTh*)fQ(J_hYF_88FnGr>!_p2wh^^N&G($F@g* z%WIGCKzrnSOMCR6DeWPr9|~O29_8549{gi~VX zxdZ68Jr;cJd@S1I;$snBdMwgMk43r%jzxZN9}9ZRk468_JPzO8jsw3dkAof_e;nFv z(sAJXGsmHvZy$$zmPz=I<51p=<5929$0Prq#{>VW|Ho&fq?P5_<00?iZ9-hVj({cw_ee{cfQtvvzl-}*%GG3!LMW6_Docle3m(+vXu zc_Q@Lz(Mf3kVu7U+UU3rYH~J*-@7j}~Pwx@DPfrs4 zByfwsRwn})_i29ejO7M|*rG;os@tXF$(9bq4se z>kQECd?xBS{7mrS?`I{{wPzup2hW0BzajC<&q6;ws1x$ZCCKxu-kqQ~>pP*`Pj!Oa zd`++q!QGuOZWUys9RJA1c<_8S>i;gm-UJWr4A{Rj_;*)l=(V{7dEVXr>yFTp?gP|uGE4kY-q4|=$NZiZSvxjh$hF)tVOXnSskTJP$2F3NeEzz@zv zeY7s%iVJgcTV=+Ews_S@PWkpD=6yuR}w!7B)U z*8}lAFUru$3Ep@S`pfEzkk1i$;QJr*z{kG|d^ivJK9`4f+brRyUJQ7_#gN1P7o%MN zxETFsuE1|DhMw7XG34g(e0-mskA6{*54};9kN$H*KIDH=KJ2UK1iq3FJ@!^U%CnB~ zN$;IfKype2Dd?G@Jx_?k2WMzE6Kr>7h882iyr&{Vt0DY0RTi-%$5cw_&Lcg`X2IJAm*FbOPTm$--T?4rseGT-%z1N`JuS)z1 zfxlgYa-2RI`CUF5;loBl-;W&)d3b~%uS=~T4LWCqFs}3sflq@&pmUwTsUhg)`60;F z3AIw5TBN_X7X9O;TGV?(E$FlhBmW*@j0fdm@Fx^TJ?;pjou3VZPcI4nmtnN`PhsTW zH3GRRj{t8>1pV_L5y<1G5%BBl2=v#l5!CmDDCF$YDC~qQqbT?F1iKKNA#jDj!^c1` z^&A7eaQztQvDpMi65L7fa)MXHP_Bn#7*9TkK~Ls{cvys?RHlJ?etIr{QjEY2!iJ)5q?J!{Qe>dejii^{dIO7^lhcU>2=8O`#QA8 zS@q!SpnA}~xgPDYv>xU7Nnoc2)T^uk{r`pr(3#x;eYL&;{K{>F{8lt#e7n67?fhsX z^xN!4@M&Ws`v1{mF`j0PMf+bk7X7GvEc!)YEZR9T7V>%1SmgWOSm?VS$6~y=_*#@} z{I$S;`da9-53a?!M8-Ji$!_ByCpF_x&PT_AFY_h-`0+?LU_9)QTgIau7K}$fZ+9K^ zYWM3Pr-|#p=dss8PM*CE>2_X+d^n$ z5d7!OR30)I-@P?MyP6Pwye&idr49RchPH^pUm;jTdhf3LGql+hzUYAr?IZfW^}!77 zevSQAFb;qBF!*uM1jyrw6VSfJ6Tsi<322Ad1mNE^0ea`*36Q53CP4nyO+fp6KLPZP zorw8f&P3R?=gId46M>gE5$i8kPlUd&nTURP(?r;flP03w-5(Z9ZY z9Q@t*IPyDa3i?Ub6zIJXQ!rlLFa_~PX+xIQ&I0Dr-2XMrr~?UG|0oaY2g2#ra>=Hnud0JaT@9~ZyNN*j%nb_=}(}3 z{hvU+>Yo7qEl-F&@C3^D+!LTX{|WGE+Y{h#o9W;~r|GCquj#0NxqSb5I`AKy4n90T z9sFM`;X9{8E)Smpc-joK%X#u$Gz0o@=nTlipC$b18OZmY8R-8jXP`Wto<#n|0z*%t zUjKR$<)8c{^vb(WqW+r&uft4~Cx0gRG;}8VU4wkzF%#|c^h~6GeKh>L;3nV2l>A0IoR{p6Fivo?!4!qM;1R1`Tgm6S^s_keChWB#=mhdAirl{KzY7; z0rRGvFCgE2FUb1Ui)i2TUqpZF_afS5@QaA|zX-kX=NHlLQ(i-_cgahz zSMGcX^SXI2L0(qAgmV4iWyo=lmr=i}mr<^9FQfc-y$pGqEpQRRwFLLPjPfmi1@gN6 z74+}pUWJ_Gz6yT!eHHmvyoz?1_$tP~#jip>PJa#QFMSPmMD=U34*eR&kGEb!xjuOf z?Z5gpS)Y0x?brErl(X!0@W1YL;5{htH3?t&I^?g_8{pq*0(-uJ`i^`9^v1k_dOb+6 zg5c9{fR9JM2|Y0CO^ny^H_<=Gy@`6>^Ct3}^(N{+?@jP)!<*o9=3Brocnk5v-h$l_ zeGC0)+FKY$m%N4f#`3pdU$=i7d>#2V@=v^t^f$i^eolHD^;q&Y`sMDoWgL75|N-k+3#W;e(zn#>t2aJ_dVou$$OB~tKS3P8{dN- zdFVZqcg}k#=dtgDubtmVz6I}tPb1zJd;NXz>mL&S?EB!;C-1`^`{jMeW$_1)^SHo! zKY-l4`T^{+r60h)>hK}TH~d4$P5p<+_fH?9KRo;)`1Z+%sQ+4tKl~$E=llrtdwvA| zS4#MUABjErk=T=hm+>+1vOWgAt3QT)dJDk@f*%rmgW#o~pnku70zMx1Dd=_j6#A{; zQ`9r~Dcbp7`JVMDgPipF4Drd&Q18b+10UCYhVl21IcN{x9Q3QJ=g2y( zgwLD-DRYtECv(x>Kh6dJPnrih7tO=>@Oj{G-8_`z z&Uxr>&&&6Md6Iq}@;hlhV4wMrr!n)vkK5*>zrHjd=~faPOR)9l_`dFQ#83Vl_S46o zL+|bV9Q3;_KzWBQ0AFrg0J@JafLwmQK-MD`puYPSV4dZ{g`o52g}{GpA=YO$EJVBK ze1UeX{sQ@4|AnkOegV1NC9u;X^s6fu!47?C5%Sx+2<>;oVzfuk#jvZZ7DKq+E?WY*zG?~heCra(>y#zn!>dbB-&IS{-*zlPe?IC< z)UU6=_?M8AiC@b4`}&_e%7K zoK=8>R)If>Rj`8}S_QoMtDpxC{t9wZ{1xz%UqP?l{}uQ(_bc#y>sP2xht;T0;cC=p zw7`F?2A^MCjq+|>4gMUv2KisK2J&F60l$)Kz}LIhAfM@LP@hi(Z^at4^Y%4ZZ#w*I z$Y+PI5r59tpmT|QU->oqdH8FjyItV)uhCu~ehs~{R$%+J$hUYc>SwOSIC$Gy@ORc) zI?-n?H9s0{#>rl>B>mYxd)`9M>b*OLa^%x)8uZO&!xgPoW)&uX-^=Q|D z0)y*i|9(CAGjToo+06B*#{x;eZ9VwhY6Hr9!Uoj8&j$2|`VHXgjT^wHhX`Ip@Wl;~ z+x8nlr^iOnxqKt)Q@IiHal=N?xqBnZ@yJHx^VCMzGb=Wt-m5o?9lsHLIcyWwPfp(i zInLgM{yS)s==n{k_vB3&S7vXLeezA{C#yGsZsum_&to?OzvE`m@3I;7>Lc-2Z$|#X z%~;31bu;XhC6Z464)r`&V6X3xe#m!_gWB&<@4LQ(e9Za|?J(y%@O%AtDCa?25Pr%Q zw9kcGWItsK?0jPj^h3=SlK%VoqBLAzlLf#@ZbQF(f19+&HnjU;+tFV-ZHFA^Z%4ZpZHHdFVms`O zo411xpKM1vY}hXIjU6c0B|8xA-vK_{z61G9-648!2l%&j2kLwH_vnA;eh+)9{Cn87 zcYlxZ^3(4@ci;CI&rjV6zFe{s^sd;6@{HMua@@HS`MXrV>jwEWjE^k!EW$r({AYhHhWP1i}xU%e-G&0DBm;oK<+== z1H0qvJ?O7z{0Nx$Bj{c6Bj(G|ACcevKZ5@+OZ>Njf6!j=#j5?9a)=eziMpf!9S`T0vLoTs}wB`w#LrcByq zN&lea%`&x(ezWMi5B+YY_u(3RA^$+QpHtWi^m~(j_Xy3W>Ag|j>*>9K-nY>E8A3ZD zke`~?>}!bk59#+Y{T|hD=I$t=@dEw+Ms#M;_q&pAE&ZtLYOhh)aEiN?-tQ+kn!ewo zI5NXEG6l3X6h)aS%NME-=Xln6mPibtfXHj3O6Zy4#DFI zjv#mv!Dlt^GrKkWdeZny@K-5kklyR1tm`%S@psg4UXGt51aAhx=Lp`au^*{J^HU1{ z7nhf4_z9L#T!^5b;%Hi^y(Q_B6u(OIKKD`BBg_YaKhgJ18SMK?^Iu8x35A!og3s?& z6xWg7zouVT3hzhX0s4JP?{~S%^MLE!dj3gar24hPT&uO z7i!+;W{TTKzafNs2mMA7jdFsoP}mxJzeZ@fNT{*1SZE(F5l6Y=dGBRgEBG+S={+hq zR}rmRR~h*s(?#nm@p}c%l(--1yOw^WhPCJE=clxv(RX*j8z(SK;lt>+hTdOu@$GH; z-9Wz+2=8LST};2u{G9>c_F96|H1Bg0(K?F4Z^?k)_guoyp|IPf>@lImWAa4$4W;m# z2)@JgDXypB9YybjQl1xucA2E@M&X|m-i7i#g1(m!{HvtxLhw~dGb2S7-p_#l_6ou| zo6`TR;rv1dyqhBwgVS=E>30gfk9XDU zZyE66A4hSM=zRyJol3tM6m}oM+cliED0P)3m+%JB?{tcv47xevidLK-`6X|y~{obUoYo)x;5Y9^aT}$tSS~+x2lJX30 zg?nHY)9(U$->2a$Ha{Ox*lPM+M7Yn=@2?p+r|=d*GD)=vy$_=_cW5}T(3Wt&61pYy zem%Xflss=E_#lNnCA9CM-<1^hN(TGQla43&q{KZ--wOzLGrj+)d7mDHcO$_L6yII) z8cFzj<^6Gi3#C10Oa51J{u<6>wG&!*67KmFer_wAd$yh-lIAY?Zsm&OXN1tsBY26t z^LgsS<$WuqKaYNy^!;ywtq3lcxEnHX=6V5z56HlIe149m_?@oy;fJQ_>ijl8CrcSR z5d4&WGb#K_!9UBD?qqtOPH{b4VFiSrCEvVWdO5eBd_P6-Y5MLZ`TU7xklxq1>KvhW zUY~D}G^-_!*O31y>5gg5=P5Kbul}MH&VxPF+Mz)vwsswT_ouk8CG6|gIG4lEq4b^* z{1XK3X~kzL@ct)Cf1ZT6AeEg7Ns$pq^p z{UZAPM!$bh{2Q(^e?i}`3e80XKb7!f=sn-XpNHx9c8ZL2COUo!WBd3T`bAywx6%7r zqH%Cani|RL@2zk@PG5=dFJ&qcI8?)ZCEX?6H}w0EzNb;TiS&Dl@RkzXMZbq74NZ}> zW%S!XVeHE=MAF_w-#5~)F@w*^P=Mqaq~D`1UW}2lji&euDf|if?oZz@(|fJpT`B2b z=Xb(8lD;Rk#(6iNq?tg!fV^Kr@KTBo65bm6ZFBMDK6=lWGVprBU+8jWSI>0>GhBJ{I{OQP!)q%%ubxW3_c#xtbtuK1 zOz#y0-=*(if;*Yu$FBOk2L-3rGJou@kuq_mKpM2NR`?-SmHbI&aYdz`rCcPg_aUT-Af$Kx@ zw{m?X-D4Wgi2Z@W+R*PzO7jVQ|03}`?|p#lL~yduFOjnGlaqln&-~o$1Z$^oJqUlG z3pd~O{yfERJgzwJ~{C5WK-r(n7g!eD{UP^FxE1cE4liqKZ{N~Va6va=Z?^X1>!qx7j z0s|VKeM{gdE&Dd#+vDGHk^bT`p&ki36PkbR&Q(0irOe?j7&Aec>I z^XdHtp>+nqm+04y!rKX6A$^B5wd|vw`z8Fi44gl{fZziJD+uowp>qYnYX$#IdOw2F zoJzkx(QgBV-9vG!=vPj0|D^9l^ge~)aG||~;GL~-zIFxEr0;e@`!d44p1$)4PNJ}b zTH$>CR}}WN<~);I;r^7XU18IO2JasnBjsDI@fkw06)F8rdT&cOs|7EY!eUY;_QClx zy&KF=!oQh*AG+j;pMMDMLZKa^@6!n9)K<9bMHl?B1V5tRll1FAzrRx0XoABjU765Y zs_~gZvh^waI|^@<@GB_nLHa(MWsTw%6O3!P^NpXQQ_949DqHDS&9d6s37<~i%jtKo zlvS6we^C0l1P5|mHQd>9y`*`L;^t7mA6#^%NPhh&tRKC9M)ZyqniDf{x59jidsV_# z5zcWIpM=H{6!$EJgVg-M@V7KRtEt&fN1_?a zz!}}c2(HiIGoaLu2xq3?mC!Fv?|&gUh2n~&j8j_U4EGrN{yV{S^ed*YCkW~kwvT?V zXE=HNh2p-Hay&xxE~EFa=>1rFf0y1z3f?1vvx|Ot6xWCIq2G1%ZcR8UMZfDQ{Rae#3BE44v*LRp;k<`dz7cpPqy_F9YYQ`8k%`l;9sF|5FIQ zLceR}yGHO{lsuD^{!y#m^s6SkP4ayvy$`0}car813ZJg=Ia{1J-#|3>O59@<_dNan zLGOpQ!nyd_6u(yT?ZfR#?-L0AP15Y7_elh|xY~6t;RGptZ~8s%1Z&?C&RG-}%D`FX z?ex2da1NsHuL#~k-#=)$pCI-5p5ia!a%5(fHP%)}LUFw+7OB;<;(3{wO#{ob;v*3; zBpfiSf?+eD$J3>2Hrl43tEarw9FsKTiD0-|kH#X^F{4%wh7)Ei8Z+r{9;Fxw+`>R0 zX2#>X-ro#YCu)Skz^baanP^jD)S4=!EMdeFdZfxGR%03gGZxR&?T66%Q_1v_WNoDx z;}i+A)(j`8W>6WyqB5&L@*N86A^l?W*oiNh(@WbDtd5@sTT!fgcON2>Vu8S zkf{gbx>*}dH0CygU?=PoBy28ra|u%r?1WX3P$*K*{EF8H6aE@At{X8^k3_ksMu_pU zq`Fm1qAC)rH4?-}is+OT@1)1fP{ePjip8aZ2D6MAsds6}3N`5dNH}2x!*M+;6woUh z6W~XFR=g*-Tw%;#6Re{mQyVvML}5H`)>eiZ^+2*V%FMUus!V$u;Z6y?nus%5W;B<{ z#^Ew?rF%z`lvy~EpkjvudNN$kAQ-NS*r=RL%Pf*i0%m2h+M(&mR!LYH20a3s+Qc3?wbF%6GZ6oMNvv_UnM9s6s@ZizM$|41nx6Ww zvMCFWbq5VFYg0l9Eo4;FkX#rFR);e+D>NF3$Ac`S`LzZO6=Aby9&x?4yh4ra^^w@< zkvV#>TaWHJdaXYaGs}HusA}Z3zK}W2S80yV(W6m+4snGOmIY%yFkaj! zT%u+vaC$2p11V2&87Cag1)?Ifm^wB0{ZjGy%m#lb88Cg8c;)lp&{Hpp@StusL?a|f z2y>_5V4o2R*~usa;8LJ1s-%2#sfRcT!x0~S8_7_@%9m314w*(wmvCLeEgGJ*>GB;I zCc8w+$;EUmQc3FbH8#SONPPw;V_}_oQq+jW&6qP5AYqp8ydD^t)mM*P9?HBRyV8i8 zRyXVHLCh~EeL+L8i*rq-p{a~D6)GL0LZ`Ss)CeU_*EeipM)`k(vVIOrlo<}BWYNnc z7I8>%i&4mdWP({k>Pn$z1==VOlIScYtvq8;(LNus(npF`nbf-VP%-pCh>a~oD7lgr z7X@u6jwb?s77rs7G~!lb^+A%xc1R?d&@aso_q5WGz?14Xd+M%d2sNsN@+fS;`ZZ&c zh8x|d%(r}g<+q-CDUF8I*x}J6NY!T8j2SG6N9RnEu+FG(LxgD4Do|sN&7~0svy6If|a=rkwhdC@_~|kQ4dFlQ`|gVLQl7n#K``S z`Kpu}%~znOK9GW9LF$@TSEXjGvNf}vNU~8MDY;bp{Z0;zzF0D>d!DkINWETPL$(UW zM@my^>VzhVc!X=z^A)h!R~9w>!Ky}TWg2_J#CE-?e}5gQ(FpOxN}OKN6^p)+Pc@6R zl~yyVZokUT=ToMe5*0{EPj^vOr0!N8cB&{foSsjO=(KoQV>l9Sgt_nYp?!UXCTU~{ zcE(~WoD`@VR3O%evokeTpm!OKlEswc>rR^2Xc^%>!^x4)v}p?{_J zR7pT}cC}t#t3YYAmD7&t5}E*#Ngd!JA>33E*|KYEA#14QLIthl=6>~( z5l&O(DkUc=BF;}bF;5ki8cJMahN61v<1|$;?p{lhbfcRj;OFunwGe9sjLRr1v6-t8 zw-Wk%ql2tjyasT~X(iXteigCNyj0ev8+j)CnFz zC`(E1Bvfj``k?0bN5b($EJ=OJE}@6Hbai`4*G+qg zU$svF$-C&;XY(3W=*)0|6?iHxgK7L;xuje#ORL$NQ|pD8^%^0 zRhdUHGG~~hic=W=EQ_|XD&VqS3ghvlJ#|+7Tb04u5wo$mECU@Sk(QXHv%?k#K`%YA zUThQu!!#854BjhCkUmP1jg!w`M6Zm<^D9@#MJ|Wtwq{t$OGO2VOtCD}*AWjBtc*~L zBCWw|OF|dLV{^|{LV9?y!P?ts`t**3iT4TD{)emWa`a%8y~dj<1BwhZrjK;6=~`t3 zwP>SW8wmuff@a`c!>>%!M39Dpgi#xfTebp<%mlCD)}T3}&sxk*F-q0^(a%&<5R_r- zp{46$;Z=u|s4^R61&)04cxO?`C8P=)Ntth4cjlfg=cPn1X4Xcis%cACs^U@$raFta zl5B6&02z$(+*oh=2q9+;LA9%E_cowIn8QW*Js%qAr{X-DjDXb7BjG) zqG4}SP%9hV`#M~-5}TgXB&9uzA}T#v)Qyq8FupW6EkDg>K(mbyOQT)%1EHp;)KAwf zc^yp#SsM12aq)GNx>O@6LSj29ekBb+O=-x>*<@ux>6v9!M)9NxyD*nzgM~(;bQJnT zVtzA)39x%=jo4`70U3jat|(YlgRzsI-hq(=1ukA+t8xfxLb1OT-6LE)N<|Z{N~$5w zG)9}@^h`RiQZWUqj-aNeeL#&1ghIR5^gJYmps!wyz@dPjS0K_ngUncMkVj!b30m8C zSgwc#t6qZ0_GaOE05sDfCA1i!bc}*?bAToc{B8=g3 zkVr;Z4y?^oq_g#wnebt=wJALww3(Q9GuF;pk+|09BfBhIZGy@;9?Gss#)as3JwF)s z#|}sX@-PQ%Yq<5~o06M^nsFz`x?1Bu&#(W0!W@0*fI>Bdc``Orvlg~mMQ~MFB2W<3 zr>`v-cg{H9cvt(i{Pb2?aA{OQxIius8qpIpe0c;SrCgy}^M&Ra8)&NgZ{%MrEu^ z(Ukp~mY@s?O(`f7w#g79^x*BugR#4!pochXgj4lRUr#rgxbB^TrevZPq8-aPY6N3( z{XpbGx4Z!Cmb0ZUX8MUG;iiKdSAwlAKNPmOs!=a;hRQNZ9EkR3KV)m4EvkAJ)=O(-mY?Qq@$>~a5Q=)!Qo5|))Vi{He4v$0 zF@rs%eEkoYOse_orjy1vw#cThmB;LLD3M)!pvCdny(#P=!}vhS7@>rwxzh^fLY7NK-8#q=mcwxBq_Ina#dW)t ztc7uYlx^f%DUVxD>#%WMiZYd&WwyG>?T?xaEosP+m_+&VQ|0 z|1Z;yL@lDXJXj10@$SBokf>?vA2`uq%+QF6k;7IM&PMsH(+|2+3yG405vej>#i^N? zJE`vGf$2Hxq*M#Blv_&aS0qy!Fh{AtU>!Amx`KFEqsNugVbJfUV&|kU_RdT7wdTpiyJjbvOc6DUk;k-^tjv4$9*qNOY{*_3n4 zs8=%BSt+fu!G*ob6k%PRt}*Q*4O2y`H)2)kX%!7CEbWsvWkQvL*AmjFOe?w2-b!Y& zzvVJAS%@Oms1rRMkXIj@Np%p_jrC74h5|D~{ zk6b!OYOP`oNKtb!pR{Jdz(IrIuBRr`{1pjXmajVjQz>S51~VK88sUPr( ztrWAbO!f4B5K5J(pr~JIN>ypj%Yi)IHI@H{^1M-;ho)Dy5)%qBA@=j}LE^m{$SRg{ z1hNoV$T>Zmo~nyF6NlbV%C$zgI%Jj?lnoxyzj&lgt;kdZ3}OT4M&bHv8-3yosqgn0 zOl_}7EB_8L3rre!{nQARrasC@CL*13^ikE}WT%`1AUGC2KK=k4-fN z#+tE+J!iBg2cv0jptc*8f)|t)Boe|XTUZ5!MMah$Jk zxHS}5nzzPmaFKvK(vXynmb1%PFtAUbvf{y3$+*`^2ye6UWERw2+eqHMM8z}~U#zpH z?|Xt^PiLKp8=nV{XR1L0yWa3(W#gBl3assc<|VesWu~SY2hK8qP~m)>-Iu0Mzv?iF zZa@jKb(kSY8nO{4Wz65w5YA6a!+1+GFo=X2JQWIQk+@NPjqx%3Gy2l1zi&J4AxeT=DV1J+yb2U3pbOd#mX?M)e`#U_!stbzy?K z8Uc$~3}O2=!zPd`BE`^h38Vn-=nPQiFZJW-qIWIHOSxKpQp#I3kR-2LKM2rRR`jCd0lVuj&5?gFl=ad(8OCq{in-rxbCFjRe6mHwX)@|@!qifUymS55UR+!yema>AHqa9LuY z`|JY>XQ*3VaN9z{MU2mRXJ_GHd^%*MGaL*{r>MJGvUo;_qs0=DzUx4G2U z>-#`qR{(V(i4-Flwia5g*;t6Wdyl$*C)SWiPfs2n&fofWVa4xC7JHIanCvS9G&8lyhKIm|H=j>q)>GgO|z3w&3!n6=M-$3%B{Z!XTr{aj~;I zMYFn~*%V?&sf&Pg?~|HBEK}DYYKYlUC}w$z0Yixf8}`IJ%}ox@!>x9%(gK`S3Tm2r zB8CQIi9+k%5j=xx8si+)5`h+yxq?`Z)Ri*!)iQlT)y_342SD6K)FNilYC>v%W4Tf$ z)+rsE`LMFtZHy-9ab?f!$0`+aO2Q5Rm9jwA2Y_qamCfTK-*VsZZe6V<0-qjKbBMU! z{d~PLXf0*MZN!T1=Z^#;Z-+){qSCFaT8~JJFUTIkgx>_Q+F7FTSqSl3p1{dYh(arI zum~*~XBEb_H%WWBpKa=q+xrXk{mP$=spE?lZF{edDb{%?R@x_NInuL%P29tAVygvghXq&f6wgh{9AiGNs#N9x zN7t4cPK)|BHt`+oi?am8t;9Peq&ps!T8hVMD7{-08f5ZqV!5$C^ zB$XoU9f|TjnIT6o<#eVTc_e*EeK^kRTIyhA!V+6qily{L!zu<8_U>2GXJCbNA)hL0 zIHIdHh+4xRQ?Dt=#P15u%Nwd%LxtO96cx2wz!P6J=DQN`4H{Jkm?iNy5Q$ar?ugG> z_fkn@Vqv98v*~11M#OK&-64wm_pvr@upyE@vFZ)dEcwz!)UkLAS!oFD-K&zQMcQ(~ zkgvMPFmcR!ZSDbqAL?nE77iI<*Ko*Q6ji~d=y>0$LDWq(M>ldKI2LTE zO)_qB%q#6R3VyP(RIgGuypkBRgGe=tliF5wt#!ND2*NHlavPLT|75`8)zp~rJiSpcvA#@D_vV%Pkn-<~^Y#FH`3+UKCH1qG?YRNPmqtjqcmGu%40_yx zLTdj<&2(KpIPOF#^I&Xn@Mg4HFL2qag<)I~q83z|Q02_ZoK5UzGPC+*C#Q&#oAlM@ za!Vo0xmCM@<%Zbwxyk*poF?H)6EG7-Fw{&5b&2IfrrIy@_%G?rwjC!>KA%lIP&~PK zJw*8NdG3-^Pbv?HB$LO@FsVMSUdI%5-7TYJ^Raz4V#5iw+s%ZOcZer-dQX(5sgsmi z?$B)}wfhS1)YR;?YI&%nPn~+_ZYl-W9+bFKD|-cziT$ z4EG4e^o(#LDNG#~iP4lSrB-~BB3*4%iLDJ}&d%kV%hVc_pfz}R9CdZ|`F?j4DS3T4 z2}?9qTh%8XDWw^-QULJlQY6a@)UZ^*#mFfzlvS5g5KUI9$q$9Zc$a}*l-ZC|P!&Ts z4a7MGBojFWY8xUxvc*l%wBAu_%c`q5lG*Nbn(P}IdQFmsO*KTyf~Nd40I;0xZM|$n zS?Rz&eLTKvns~s*?NQEf-|nnNTWh>$Plt$GE2jx!@fhdprK;ldq0I}fjW@>Y#u1Z8 z)7+_Xyl$OT7C!^!{-$SJS0bv5+m)b2#`yx{s7<-U8G&F!!L>cco!4dDdELi1VVC6& z!VVyQ8pU&nQ~qEruLs6>KOL$|9-mK*^r`-BDcpxO0Anb-mlR&jHamNouX#s&>!`BJ zZW0U6L!kL>=$7}OeenRl$fCLBE%$qD2%*jmo1neCHmx!q!}$@4kBBC$t~eqI;Wc;|Ij`m;%4HJc;o6XHxk&WjU2Op`2bh{l{DS-gT^6Ie&x$;;a~E$B5>~ zM0(5R-kw5%HJ*ap8v?b=RfK+PU|)6*xO96 zv7O4(xlhB}oSjp7{nKRw73QStAt;5rXSfcnS^cBVIY-HqdNpAHKV`DIY!C01apg~( z-rZ8%EJKlcUx?`2XSA^Ju9lR@{EJB>7Ln6ts~%?4{+%uLY^6A4Ufz<=C7d$OV_CUfiTq zK*0Ndr_iC(J=wA-sVp=czkwL^8CW`?Q28HP*1Pw_A>wm&d9j;}#HVGy*imdgc2dlZ zM&iMSPPq^Sm%*rraDmie4zq#JU^^A{))cYcV`AwYkGURcuX5AXf-<|;+rG!F&04C2 zYspnaiSkIZ%x!4oe0pH9`@F_)U6=TCJ{Hgz@Ew25UCc$)ywlvM>;i+uDaQI9Zvat>Vr< z3W2tYixWT^*^E2MsLL9nsx2>7tVS}ME#@f=Z*Bcxx6I}Bs;(h$F~-Ap;x!{U*r`6U zE%?Sdy}(J{7^cvK)2A)rbRz7j7+;MQQu3kB~JQ;aMN>Y z+2qv5?>w!Mc?13E>s67}ZA3PeJPl_S1v7e#1RCcNvZ ze8$ugEUXCz4yGRS+x5fj6#uaz5F`@x$I961#sT|Z52}SGhY)uy7p)?DOx5#A+rWuI-NXJ!hL#zlu2A~j3n{jK!SYbQ6M6- zAvN6BxX+?Tqa925;fJR z%5+;AM)^UvaReddj57^#X^X*SKt9&Qt8+7*Y>ck{D};Zvq|6>z8IP!4f6H|T)(@7E zd1;hw8GAI1nlTo1b`(+5TXm?#a70)4E)`gMr0I?!T8*#cW7Y>E z=@$ro&&=lkgwFc^%PETkFM3ObuGG`52e!Bph?#Q(^*ZO=wJVKlo~8^<_d==KgzW4L z3~Xh_+qBV#SbGQ|H5ykX!_N6@Hr{x(05dS_!POFu?z5*MyxwA`chLEN3R%Gpa&O%| z1yl>WBUu~DWT$C@^lkim#4mthnXYKW`}-R#7;(LTw~eaI1~f)VfKU zqdG18H(K}q!?YI|?Y$ZCosPL<)w^?a!8#nGQ)smu81W>t_CW1@2Q#LrOWKq-I&PK6 zMeph#mGbg@-0up=)Xq?{%N5eHLV-Lzx3bFq4>m;5Z>sUek|5wD!)623f>-2n`F})F zP1|Vfc9F#=(Xx0WA`<7dB>fLt5HyCDk6YzQ)8<;WUO z7>Ohojw6EdFKOAp4hF1Q1;^N1pGLxPf3xeoI!VbV(WunHgz`~K>t>zlPKbZlW$?Jg zO~Lg{pCV7y$vS@+!9}u_>|zjCvG{MoYV?yEfn+WOZg~*ISWCqyj>RJEtHkep4C)a9 zYrytwnXC8#;!A0rMbAShX{}&1#2ci_vcZ4&u~l#XZ-w(1^F<-srkh$h7?G<1RF{u28F7s!#%p|9+>1(u8xrZ$jGML3HP# zCj30M1m(X#aCkudOAvPA)>*St!{VyA^vfSr>OhD}XtGpr4^msPa(xO<8&xOB^P&aS zKbf|})MzInKtf-ogi0Es$}3^sTVOKNp|}rpq$0#kQyroStBdqnq@@lmTPPkc10aI+ zwi2+NRV5nzK~Y11l{IT&tA@gWVA!KUyhl<*m#gC*Ze-6?$`hlO2UJMd_PgT$ysl?4yF}J=)3siq{x?xEXHS>~m>pq8h$toCX-2)I?iY z{IOFf<+O%cU*o<^O&JQPI&$T3nvs)O|LR3v)tPEF>q}Nv2IDp2ejJg1>&yeVg<5UI zDp^Yd!{9cPf86Te)CMt+WoKg7;1+L=P}PiwJ^<&6rM{*dB3Ut1~vkH)dG(}wd1e_^JaRb8uL9Lc3POSL>ceP$TlGVVz3yR~NM+?~~ z>@UzF3NaAfxA!^cV1L-p=jvtuNeOtmDEmx-Od!aTXDqc3kCpQl(PVOp#b+I2&HE&l z;m%01%*FZo|NdbUoS5=O#R!Rlm8##ZhVyW@5e5_}yjkywM%O zbKxe*a1H@W!D-GSq;+ZITOMM;>Y9Y!wM&-^^gc1u)XO4OiF$So@55rF3Z26%zFhf8 zk_JDne+YgbYEHpk$?=3)D`UQ_FG+vm6!;f<&Q5MX9S=+JrVsUaLc#$m-D+jAWXT4*A-or^wDm-dgu%hwvaKOE2M2VhV2J^+$ zYMr$rK3AoBrM*h56qCq*x_J8^5T=jj|IX<|TdkznU{B#KwL}Fo`E(Simqy+2DEA`g z+MOoyTjY45!sURManpI3Ix_~cn4O`3#IMMid0~~;?LBOnR#r!MYb2G_v{&M(lI*>H znd;P3wBpjzfu(u68VRHjasz*MRzUAbgJWkeQnIoIyy3;Y_3UEjT1d26F$}XZ@rI%< z>%Q?sQ!55JE|a8q_@IHMgXL^+EXY<{2-*|>FFa^(UP@rP38IGkQm~^QiQ=D7*{d;8 z*MAkv(W{fPS3(2v`I(w{9t7joIjWdHho>Vsx|+jQRpr2-Re_!Sn$8I@jm^Vgs29I@bT)xP<8kK$vI?FlRHD0(wzOAT@Cka&T?SS zWeoAtF|qK7OPlPy8{n(|x!x@ewl%r4G^eaZ2MAHtQPjYvck*TVJ7wCTY7GTLA^(@) z7RIBd(eB}>X{>uRy4-B!jt05S)b(L{wpwoMoI?sETm2URdL6E3V~LEz2k6-(ch&q_ z#%K7{$v)os>Bpy4t0ENMU(Z%^0-6q+G5YSSXREmZy*BW8tr)^d1~Os(H^(%`bMGgU z8V~Y3RgdV|uIV48kLuY?r)xAWh^5O6Q`}M0s{ZQVe5qS(W!u4aFjQ?r$;1MR@frL) zy*w*E(g{n3(}cz&tV^vx_uLs5Q;LrFY=DS}IBvTnCZ42mEalkaqx^@hgmqy=Q{*(O z@4TDDBRJ1;;(nfohpW*99Wyn#R|+ETodmiT!?6?Ru@)#gt_<=zK6q)Q9RKx2bmh29 z<~ck%VZ>=X+3>bS$-okt1@W=O&RWUfio(*~myv+EtOx`T89tPP?OAM{Qg|w=&!E!c zz9ex<5pmTpw#UqB{s$?sxC^Ox@P5$x4;xg*r)Nn{>!WdIVnsq$o2-&B%HYDmL&|`o zwq2Sa4Jx(hL}Q@S1i>N_jmg$cD#CD8X6hDkGgi@1MN_8gCP-E$X|u3%NSndn!m`WD z2A2-$O*}~$@zE*KWOq)s;4EO667-EjDlOzJz1tP9_y6<58|k#;RHMCFfW@n|;2ji1aR?g$_g|bX2Iy z4r4mJl)&3k2$dBSga4n~D79EqqTEJ!Ib05mN`3U8btGEWFi-?_#%%xjhnY)idDK4C z>f=-Qyy(JI>ti%;qe52mRa5Go1jF@@6*E<0S!ky+vw@_RM0DpWb7El3P;;UzdxKde zlmBml=^b>oqE{n}E`bQuga(*08A$SIs?pF{8#TJnHD5frV_+w6xs|})2s2{0) zz7qT#GV|!WZ}DJz^kV()R-%YTWNH)*<3`9ef%A^rE$>ash-__4|F@?z2idn$TgIg~ zNH((LR;c2Rdm+&qo{CP4F7t>&x^UGuON+_6EH&+aPbCWgrCwdsf-P0LU#-=mAysOx za@gqJO=GHSsi|gnL^qD5-OQ#zB%pleEUaj|))OgtnPq(8szhs7HC|J}?W|^1e6OOt zU&0r`WV%z;8?v@e;>pW_)Q!}|T#1zb*V)lYWgUt)aN1lq>Zm%*Uk8ULOJ(luzDBWv z%SMyjaXnnyhOYlwpeBRNgR%rE6uwT{)C;3gt&Ar8oGK`%sg>Be*s7Y5u$tM`bRz7n z%d$qAv^O}Lqpo>S9`!`_ymFKvUqWQWtp5RRZ7KQWfPmjpalB}#ZavFX>0Qfc))GNp z3o$B+|3yGd-9;DoayzHlDMOx>kk@SVnh4dQ9Gb}ogppn;&pjagrel{UU05v@gpBC# z$g9OP&EyxvAt6JKEwVD=C4QFmO8)20YWdpUBoKv%K|fP&v{QRPO0bjzS%hU-RX4rNHm8=L+r9QB&<{^I|$=H z4LheHIi=@b8y9lG#FQ4NYMg(os#c)WEX8Fuo7P$3vyPl3*u*tFWm67GY5e=dHOfJh z?Gs02JEn;h13Z+ptXtfo5EP}AT3)sH!LwPP-5e>AE-jue+A)Wm|4x(!*IM&*+aYRz z$xMS}F`2uAH(oiw$Z;naN>;Ilh= zz7T#a&=n5GUNH<1E0kC2(}fQ%?3*rFc-={@M94fOi$%lY5G%G(C7tX$3i;q@f|p;kpf` zYoUbXN1S(a;9`ZjVajG>7Q1cdkR56}`odu&(+OzFoy@@+==!g$w$WoP)p%S*l!CX@ zsj*#g&)%Ma&278xJE+aLB2c@;#ZlPC#egDi&Yj>3*~wnRSL_xCNl)3L1|KD$;XBtM zB{#Zq8LJI-XiB_3l zRA64z=bTimcbilN$tWk@*Bs(;YJg%;!NIuSos*J0PR3cnKgw~)B7~4y+~XBV)B0Z| zvb(PHjUGwnff*okuCgjn!TaPDBy<%0**&FbCj^CJH(Dr8nA za6OK}7uPEHQB7U=DkiJd%prBnWR2Qjr$UBIgPJ@YBL92Xuvu*=nXtTNUDhyjNX#e2 z$cu51v_`FNK^`@aAHOxJ9Hm@KspyE69lO+E?xel?6jhWK_aE51qI76s>Qr5Gx%ZQl zrX*LvN=sMSN;x$;jZSx=L~RnTK&9`SxMN#!_7%A7c955vHjWzE-UyMc4)kDJ8?B3wwmYdzlduu}BC8uBhL*UevF!|G>V*!!`Ba zm6gg+&BrS@7LR0MJQYI}lnc!YVO*@2DAU&Vt+tN}H0a7N&bhphQ&>Zacj{*eyybW; z(^lSq@mua~=$}CF9N7_Od)vu!Vq=CUV`Lu)aG4nPI+!fg=z^hK)cw>``EFN{Ld8$` zWCX1LC&J~^pkv8cs7ORAWGTEttzN3dKLO?sKSiV{_SD58#w zM|Ir6qA;4KaFI;Kz>!`Dk;VbbIok}l@GN!fEuW=>)8WM{5 z)tp$Nra3Ose%HUl;^9e>uwtf$3P}QgFy<%oK9**m!J3F7U9B$wxru8>ENWVfO0$$3^M#^hzvnFxJG_0 z5Hvy&cs7!*OZi0iO$p-xTY{=6Nc;hmbtA!8jg>F6A%(cQzeVkVI?EJ}CsvBr7S4^N zTo$UOTMJ7GjBBF7QkH0}83A*$Q8OFZ%*Umu${-=#U&|*Po5omPUrl4wil&Nk&YGo+ z+cnl%N;PUVi^kXLy3j1S@Rw=l3GjRWueFC)3f}VryHngg&kz611lJ3X~O~c;SlE@{y?xw9a%_dDTnw2ICvc4 z(-Y2hkBX3*2=yx&G-R;mn6yo&H9?QR8y8$T3QIjwwTq3-?j({#ZJKD#8ASQF0|~w} z27NBijbJ$$8qWVGu;XAoq%OMm0*7reno0_7z9S$Fb`X!fdQ_;OXiqYkksKoFrX&Tq+m7C za5q3wW9g6VSN{nJ_`@WwV{D}LM9^}4o;+2|B%QxDf2>+ayG=v$Y?fJ zL&t(ica7e9=A`|buzJ5(<}gLnLu~`9u2^Y7FZx46Y0-WtmO2LO?+#rH`eRxb%czon zyk{5aGZV+!In)7(?%lds8GWDO2?=qD?lHo`(;zb28+IdYt`J>i=`T`wbHqz z7N;&T=)_Nik>(_>*~|$+X+H-O=Wf@d@9%4J)|28=%kYoTsy+KgU<(JC(|!_)i$4jH zNx}l0X&x4@>=ZP~iJN{dAvPvuMdH`mT(*pcLJa8l4Lk{$(Uq0u)hq~(g2z}IHj&xb z@Vy}rQ_f?-{9_(Ow-4vbmC8r3kR3B1*Sc5KWE5#uPv${))j<2TYdW>tjS7Ao=V`xz z^38$8oc3H`fe*D{K0(kQkb) zXq(%ba{^9WG2L9BFWczfMBy!7IkwP|v{4WmQgh|EIcH~TZNNrUFS^xoL{55dDmjG% zm)3_Y!t&Z^NX^8Jo5yf)TC#jB;bZl5Bsrc=*OL;HQ7gi@=M{#g43<1yI%blGleDo^ zTS(X96!QSkAztQJ!F=osOn)|S`JpwoH3pT!|KAvi$N`@o3CPrCA05mXQ(cvAt(_Ro z>*3{sxT63h4dZped`fx2(Dc(rP&&isDWOgW2cBPep)9+uXRxqLI z2nbi?N{ITwso*9^tw6u-u#Kvv-5a(?n3+?mM7(;%Q=@Q>A#u5Xxt=0n;)g? z?%%4ocE|m#^-sMabd{w%#==BqL8I##2%zt}5e7$iKk#j8{K!N`;n754vICybWeQoC z@jehpG>?T-plNmv)rH%|B{uh%Bta*Bed@$-I6QDsj?VcMi4%tyxKr<+xv~$i)9;); zdv5lk7Iw^>{ZgR;pbWe9oCQ8_8Lp`2bfcvOxO`>y(th4L%%NgfZU@^kZQ0`lPR3Om zMN8Nbw9I@&Lj@`|9e z2fKJOhc(HltLQ3nyWKrYL7d;qaltkzc4o|1fp<=WiVPhogr8uyCn_)Y^r6 zvjCt+j;O;wpE`QvjYCHd9U8;f&%zbF=(CJ_8&mn=x!Sp6_2c4l<(8T*E-Wq1{|=O# zU#)#qom?)h9)mWVS-5beRJ=K*F0BE50IEJ+UHeseX|htiacu0|nRBP?*BzcbG$xrt z3Rg&@S}omK{n<(x=+-ZZk$_S-^P3B2-YQ(OfOPw4saiNCca%)2xA2mX_X`prj=lZO zaXevy7aTr3d1UNjd97M37f!>>W9G3H`dOPf@=L{k&Wtakh;n%1mt(oHu@_OZA2$Xn z+EE9{2R%`Qr@dVKG>o^};YQd9TdhH;I_ZX^APgQ3teg9Du+V|D- z+YP#LTWz)D`|Y6F9N^-<%1yr9XonsAgg;fM+m7qe6r%Vx-WaGD0q#YcRPrK@yZx}+>Gq>g zwSyh_zCtIw-waz_s{bKaZ$$S3RS&xG?)&)8UZ)#OX4ZKvBEX?O3pN{>ZJb)}MxT6IEhbM8)3bpg7yQLL9BSO9=GG& z7EI+v(A<(&$V;Dw{dlJtKWxQnD{l05qwXV(y%~oFmWZ4WzCM7-Y{9!D-RTbg(GT0L zUN^>NL!Wpr3gNwt?cCT`_;UD5#ob1*QIG6Vb;a8$qWF z1H2V9w_zg2`>^<9@`cw`6Nuz{`EG8t9>F4xyJ4NRYG*Nd-~Lj4-i@2ILPPvcnCp!Y zJ~Ogo5-XVQP88u6ej7J&%7S*r^k6<->N(7!{KPl>Sx7!w;acg_yjodV zz?-;15VttxfyG-mr{<<_R+kE$dOO?vucQwB3JM}LOKB?LA-mUesA1rud z0N-PxRfK6|7;*iWdK#+F>z%E*-HqCDKL8m)SGkQzA1Ic~&ZWu!!L1bVr3cO$Mz`kc zwkcg{Mg|hy1!((h7dT(tA$Y*MK(-eig05!?M zwoihkQ26*`c3ew7FXiQ-5nr}~b_YaJZh4?^_$|((N59^hM2_eGGrk_|#C^RhCp^gM zZ{t>YPZ+ceYI@D2mtuP9sXxQ^r)KzRpqPUAt)-Q}7GC#~b;U23#6LvhSBk!FWF?k- zA9Nl^ZF~oT9$0*h{wd47)(0pJ2z$6HoT}pDVgbEp$){L9U&ZS|zd;>sg3PYk>fE>;Nl!cdhK$o3!{= zE0r=|3OOymj_KvHO{o4xivK3Pa{)nh=@wqBOa5WgpCQRUrk=wtH3}FCVOyWVPVMIKQ2_)68E}1kL$q>kh#3t?ZzPBH(22Ty0;T-^Wuin|Y* zTPV_#^4iPHUGC=YPOw$$2KROL7V&1Hv7a-ZUq9%>Bxw;F$q>Vmc z(9(h~27Z9;X)*RgA1Kmo7 zKS3I3hYyBQ1!)9B<4moY3kFZpPCL(8Z8SMC6eH5@e!sRXw+Zk?*r`v!iDhuhZlE!!s!J2Jmh!i2KJ}CZ)N;S<^bfC$o8EU)6zDce?%1 zMW(xQ4rzr+Anj0|XD}@5ahD7s|2?dCouzHz`?iJPyR7~K1}-?>QCW|(01O4$iZ^z{ zc0KB|sz~X&H4a`!c0fZcjY~g{HeRPCme@J?q<2r>E-q<2^p-lFv(G*2 zs-~(RrJ(UK+!1LIiVvL?Y^bTP!>7$_8TF0ZGv2}ZcAMTaCK9m+@5_*UGtha6o5`3bk85i zS%lyodUt1n{R#LTl`YupL$dj&k@AK#4x7Hn!EFzz@xN<;oK2Rhznj4KVew%ozTbc` zwB=a*t7%umai9N;y4XEDXo+xb5?~<1Jfzu>Hq?X_)L?zR9rmXbdvGf`+S2D#w)j7z z4i%!Z;ku!h-$fe!WD(zHRy|rE}aG zFO;QIIjHzAhu*w1mB2einNZxy<~E&Wo1*XIji?(o9#QyulxVs*mI*i|<`G>J_M;u_ z;(e;eq3yJ{K;X%ekFeB+Jrzo4Wpet$P}$OR6E*s(Qoy-?Ff$) zcZur+@N2!-4d{y}pc&og`{7b;mA%OI!<6^FIg1(4X@)*f>Fow&s^U`^yrc0wz;YY& z?0OG$yd6HKjy#Uqc#hLYyn$Me8)2y4I%LgJue@~OrN7SP8<|XF_&t&gE@!VI9!MGy z99FsS7&p8Y&97ZwELc$rNldWQYlg7z@#I0vpCljj<=8W{t*|G~eb1RliS{F*9_$0z zaTGczO+~>=)G!^iA0WDa1G*1#2I|##L<(%E+iUlTxF+WGvgN37Z#q4=$LW@hNAZS^+OwMEE}yqcQY5jz5Jn4JvjHxM<7WFc`Cq%q~WA66qr6 z&JOgzF|M^`Nsqf%@A7nv+k1#ONf)%oZ`ix@2BUZ#C8qN!YG-Cf87ISJ_s2ssruKe@ zzd%+rcOL{F=>2{Wraw|Cy=Ffum9nOR#6lc5u>@sqFdVJlptOuQvIomu{GL(C3c6Mi_Lus_}-{)7!*r%Zm%eYGMoU!(10p zHG@vQ2g+`wI(UGGyVB*jBnU4q)euqUmUp*QD@=C`alG%~pvg@TS&gG{cYWY&%+CF= z6}GiP#b%HQw38TS1<~?l+$MN;8c(p|Y*MQi?gj`b=o_SVVF&EMpgr6GQAoGM8bnMw zI%c<-CZ3;?H(n0V_VkD`X_!7^YZ7X7depc*hI*z=+NWtPd|A|g4nV_c;V5k3 zqI=luf+`6AZuB%^Z$`FV(~y^y;$mU70-PM}(utlrIO9$u+-O;MpABQlmX?NGl~xNJ zEtW><@b2V!df&tIheCmKZ8EA)key+iBmevq6}YG!(23i=h#)aMvids>RbBTYZuYnv zy~Nwit!%ajw{8}Hy7!+wH=CzxS)x=|f@X3gnBnR^Ib$Lf+%qH+f0+5?jZX@n+Eucj zK0et&T?6`fmimLe(h`A@Fp?Nkoh#og{#0Ff^_SoJX4NXh;*4s=WzDPJb#z`QuS;pd1<8B(Dyw{mQnMGZY`18(TuvAMkT;VPN@ zP&f7kVS=UELh!^YDRXXe{8=?0?(@gUScz~Tx={nqChs?Zt-0=r39W`Sj=*-Gq~pw& zX*MM|VH||BgM@4t-vgI>3QBe}N14GJ52f5AUBnzY{sTis!^KupzCN6I7kwxmcy0x4 z)2sY`){{zjgqZm@YqnZifI(VLGhL7t@3%o8p+j0U2=uf?8}M8%>;zj;C*1V#T(49Y zN|%o&yWrsIMq61}kc(YDYH&GXdTM0O+tGlLpn=%)8?yxWn$@QEe1^&XZcq9dUD*$A zmF}-2cqcy}CG%JQ{)8Cr;Vhheb$n?F+@b^#{gv@~l6c~aK~#Tbe8uvrHnSHfxxzFX z@et<|m$JAn3_t|x@rGiXyO0*qmARAEC5js=VC;nQpXXYfH|CEnysk^4Joc4V`G6x1 z?Dj7%lB)KK_|RPc1rzTWolyaEq;amSRTDxsLn>AT6pErDwqmG;!Rcv?OE-t( z9DxxCYkPaAMcp)=;}Zol%jQTx`C^%r_E`{%+49OFxuyL{q$LUJcCqdssc_f?Qo2DU z1NDA(^}gS|A7l#U4{RJZ{oW2g3z6r!Y!t26vCZqA)x_jzS)UG#jXH~vXM~M*=y|L> zF9&F|j@SUJ?XP6KHD|PlX6O-N0?p@LU`bn`?AGmi#h~gTk2@G!@dkMp)1C~CwUUPe z-E185=^)cIJoDEu4bS`qreSNZO?Hi+A7iim>8+}Nx#6;A*zr$jxV+3K>DlJX|Eq>e z!Z^yNXEFXU4}{lxh=onl+tl$$(i%GRD%Q}Xbuig@AJ)PDFU(qh1?v3&EQwWkN#|(R zgYrg)1df*gyG(i-&(NG0nTC`uSIrwn z;D^y~OTZ9qAsVD|Iq{KM7)TDcXt4ESo_CMFFJ?q*>uAOrerr2yI>Aeb?PLO*-qWM8 zQMX()ml2I56>y*DL|Y#tWr{kqZdmN^sEuex5c2*5@=4r=R=^qzj=84Z`#SuJILsI# z*lv$mKXLnYgFY{P0IJbt9>~Cw)-He&)`h4_9x7n{H){Jrh31q{Eg(Fid7DOxZXfm@ zjbueT7*sC!`} z>>FWJ6FJf-r4hdVrlINL{V?<0m;e6c>6aO}V5Pcl5QvCj5zp^voig2=@jK*vjI+{3 zmO(nKZL-p(a|x7y}aywu?x^|-~K z4NIF8U}0`*yaQx<0{eJ|*C~ZP%zXRh5B{ecRT^qAl>w44y>Q7vNeH=i6GV(<#E2<^ z3!D$dCq<@jZW0F65t zk%w6RzwLs?^41|(F^#wt*Ad-6C8dFXDpe~+2L&Ys=-pNi76G8c16m-7y#{6s7`2mqc%e6gHJt% zp5$RpZTI+KIt#0PSh-!O7H`8=t7&$kk$qUY!#Wl%OlD=xQ5fwZ?97YrzW(1|KYj8w zSDEcV15|0jehiyz2Yc84ie)7i!jd&>;dflvAY`q7l8E|v^EH`yau3>YqpK{&r65;U?i+?VGl-@f)O=MZ}BC0h7iV+UnUe58Z% zo#4+j)|?G~*6Nm|If}?}8tT6ZC|3;mWy{~_EKQEnIpaV*>Y;()P8)Y?<+xd6#j|zH zVMObchK#+!*+<(Mb?WicV0Y4bRv%od&DU0Mt{&u0$SC?w^VyF$jE{uf6Gi}@by}Jv zaoQ*khH*r}RWFPC4aDqv6Q^ z90e^jV!S;2J{Wc1}O=_ z6LCVA{K*h`xeyFS{h984e)`j7U>w*4kdQ|WFoh8km^4Cih#;k9>=b;V#t+mcM!^#m zF;L(7w8qOR6SVL5FsBoz$FO^=jxh_mk-Na35rf0^jCs6t0iQ;5BoJ92Po6z{<-&!t z1o5&FK+nT_uL;$Zv`eo&rlp%qbc=f> z$4>P?&OKTA>$B;ExjGwhLO1W6-}21mS!Dirr>|RVLithj5Bxe{>W%e#K~}TU%2K&< zW34oQt#o5)86ZB0fRwa?gFcv$d?R((nw4sW5nzIBzd4TvrzeZd#t8jIFMC3k#3;H# zD;}LwC$bx)$V+AemIIA(*=HMGgBM1+&fwEqjyxnTr@piW2!06fYs?v0R_p^5<+9K<9}_czT&F>Lu{flG_I;yn*|$4_G7I4u|FU&K2H2dPEyc3Px)O ziQ&zk7uKV$J?t77@cB1?ewD#D4D`_>1r-f#BMp+TfJRy1H>?4tU|=>?6QhA2VLnAV z1|rz=78GD3FNAfj1CnEKHBZLHe$bABRyVMc#@zYpRUM8v_q0iWEB{GtlvIK%!|h%H z%kUgqxF)^)Sg(pvKbe^SRCh6795Hfaz<2+N(L5%K2UBO+ZoCbJzB0w-Nh|)Oa^m4?|A3 z6REkSt3+$(7Ls4JC631r(O4`dKT6LNu&s|BC!G|R#PjB^dwAk?^f$xqa1gbOq+=h& zHWjZ;Cw>3~g}%WUQ=tz8SxZ1lpgMch>9bNbzHog~Rg25zrEC0gYhJURfXtp^0h4j! zxKLoJg9k7+VH3^cy)Q!VFinnP5#ucn<5oJ?iRVaAP(2;jFRzPs9Bgj(r4|bjB#;D> z1b5&J*3G%1o$`Wnykk)JEv@j(F?#JWnDx7Upj*&}{=GYc1(<3S!Z7oyi49D@riy)n zb~Mgre6>sZ-7lgCWSFJdM-}k2YR?WY?MJXD4=LT zdErn-Lv}^NhCUa=wUQ{ge)kX<~R@kXzKEq&298J~G0^1vCm`!2~6FAUiDRtH2lUiCt2t^C zJeatO={;I+5kQ64x1qNL+U4Ki1_9nSv^Ba09}vUWXINS zes$UTNQ}Qm-ldge+ru*`BcXz!hUq3fFrZJ^aWRZOJW4+)iEBnEK-4gIyaq z2=l}TT(?VF@x{r?+A6eVrJ0Q~@*FsTZqw|dqnnidGh^7y$@>(_+b}~mw5V7Cb!KR9>AdU=DU=;?2JAdalEz!1D|Ome5`0! zDo*Spw<|hsP<|7a6Y&WW`VY`0W6o*SmzWnvk_9F(;)^a@r-Pv{3e4uTuMscw%-1CF z;cIR<#dQCb_Bq2$A70{VgkE)^7fX0yvh9?22qg9lY*V81C(mI_4Vxx}C%@g4R}jBL zyYcwv;sr1BBR}3}12)9WS&)*x$&5KhyB<Yyh3t)y^8Nj= zbjLf|#nY|k*2qI!XnA|Cyi{DN-n@RgR=IQ)Wo0a7cRE5hH-qjY`57F^{0!fJm7iHz zyM{rLwfsyKLmA=Uo5h7H09>zfac#AlpMj;6pSeT;SBIZ8^T4|Obkg&i38T}zBMy)1 zfnGptGHmwl()jNpV2B1*bC(GTBgw3Rmw$Wt(uLC~gP=e2HZb;-2Rkxe!~UP?gEC8+ zXFn+%r_SpuuV?;H`?z-NlWV2wN2PM<<4^Ik*5fug8R`fseMN!KK~bm%Je5xhi=V(m z;vOt6F5Q{=!&{#mKJ>}qH$P1b)Gq8^lx6#I=Ml^zF2818ZG@feF8w`xpuGpRqQ_`i z3pVbdD+;yMA{vuIc?yNq%4*6L93PpvUb7jrWwM}0Fj?cG;2xLZnD9C^JUqjimbHH` z3u9*PJUqi421a@d$g>Zpfpjh<({{AKKr-Rtn74RFM$n{(z$AH2kHzS~nG95e5xA}x zK1MRbj5oTH%25Uq$fp?@Afc9BpFev}3lW?cbY|K~`N+r;neW_Gpq%}#ad(|ayh#LP zSVLwy9W&}6;)1YTs#cT2b>!t69os9m>qq*Uj9ND%Vikt0n1mpxvP41kq7K8O-E$mw z`@AA;Lw2Di`%HciAttU|sV*(AvUEr}Wu4Br2UK)u#zA^An(?NVH87({ZDx)Frj0e^ z*?KEz_thi2PC@UgxAN-nA)=Ot-y}Mn?ioL> zK*q1E=v}3^rugpi$C*Uj!$}>9mL<7%3^+{wa{gMroIjpF`>C*(w)og+B_Cm3o5q9% zBwXiF%=WWB`6&(xv-zy;;cksY-hI1A22G8L7W47c7vuATYX!Fw#I@QYw#jy}wXU^f zsf~8(aSwjA?1_P+tdno;@Y$z^m?K)^zr&Gfw)W+B>+imaQU15=p!<`#-+FGh_(&pH z9zQO63WBxkn(Pf3LeA{ zH$oORhCD7?jQooW2}e3Kzp#v*g8r1M7{P$Obj~Q^G<-vsea$uo0#Ov+VejYB=WgUqtOpU;4jwheeH*%nPl4X=4bqS) z;BNJ7yQCks?SOT__U_+EL}6M?A1|+dSX#C8L>qkS4^fu~jkTK2!|Y5QZOv&Xbn4L?wQpa)Z3k{aQL*ougIZ6`HxS{ ze)Y|l|N1ADdXfSLLQ(wEhnZnmLuHG1^I5`0mSB;HB=f|Jq)fAKQD*-V3_I?FZa0$_ zx}KzN|6#hJ)xmU=C+Vv}u*pB_m*`zT%?p5ZQN1|&2|j@h9n~|{(l*Sq`~8K3Jv`A7&B9(td!jcNc;Cv;| z;u319?Anc8p)Jm5gi=aow_%7w5AjLE=+!h3jbn2&l&9?&sz=Y9v-ZosJ@*P&-*NUF zjFMdYKR^CgvhOdb#M`WJW#)(@I0=IGuIs4Ndaw!-{u(Ke};r25On z%<}C9n>9$F2PRuHchRumO^(9ZMnfqj&ZiSk`}mYkGUHoGT*R=I%1UW@I3wqWOom+= zFd^FdHc%WmInIsSCL0d0+00(~U7}Yf#9?n&|6bAEI13+1^Kra(xQ+UGK}GjLfTY7` zF-5aQ9}|x(6p?&9#Vthv;}l`%X#cYIb<$}3s)fqUn|M^x$NSCcfFNl^N!qkwUb|>b zL_t8_gIyWR(EDCN-TUcD<6kdS=qC>n+N;kadV5V}SxTMsH4>;g%y4iAHX!`(Ac)Fr zdUKja>D%Lc1Bxe{^BFH9#=|STwuP+!&H!xabbm;T%w5~q0&Pv#*On8J!RUf6;#a=xQRgG}R`1Ud=laao8CvFVTQz@9q%R|LPN&-MxKp3l}`gvOI@w z?kC@ypS?0q$1n3ZL05CiI7WC;W1}w`cW)zBaVN$+FFKVG-PcZv4w+XGg8v#2Fnzd= zaG6qAv_7B&K`sIW9dg%v4znUs+(MoN@p*mM1jaQ;5#GitC1bh&BHsrempf2ioKln5 zu9MF{GQP*+0Tyn`N{JYz6~+&v4NhV@i8rIcN57UsXBPMm|ECVr4lKaH)D-L+x*DJr zdfS0v$g3(|$IHyo1%wm*pv#6h+zk+njhkqlfl-Ig?R7v!IHvO9ewZ9?gZ|R%> z#&dw~xKZ9X_EE_Cj+g+P3%T=jNAo22ldusoJGCg_-j%>^njE3Iepj{$fljzfhKNwU zz7^u?h(jXTOsTbFAy#iS;s;Pk)^J*q(nb$7OmL3^hQ$fV_$4L*JCb9~7)AAx$imtR zHoGjeu^-*GnYmVajtMNIzUSolwVtlVMq>}GvwGk(ri5z_jM7)a+&acCR1wqU|ep>or=I}l-b z*}Cq&=^Crox-bc1247)a^eh(ifr&veYLQBoWs!71nFF9*unm;WROp$~E8a0mZ;Itc zs?aGB*etxkIyUlRmM)`Ik!=?pHl@yj#5r9bH0TDJKBbY5v5de7Bs9}2{N)26m)UzK zktfaZrkTpB=gH2lL*v1e41neK@+x7)Q)z`5V+B6GmQ zg%IP^BfNgYCa`0Up80~76XL|?N2J-?G*B==oVNj6>bte%&*vtv2j-^#BTA2dUGD^y9?jo9#xjaVJYJ9&-LbzX9!9Bu%-%y1j% zeh9;@^7t4E?`z)9@-@z1knzBhvtL zw7hsMH|^3d5h`IVLxmyloksK+v#X#hbv-_oexEzbUP5yqE9@%~Y&)?| zxvyB?FPIZy8ZU7GgFh*^JP3wCKOpr71fXps1{hgo=_D#L-ymrW zK!(nV0>p4Z7GPH(WmjwyjA!h?-DtE#W}g}nxo{#u0p{1?NPMX=#7$pO7&a3S+=(EE z99T2we$?*vB(fOz1u$O#&Yie$>699$*n7PuCUTCtw4sv;X^jnypPG4Qr0Q`5<)mk- z%&e~7N!`*z3B@qtPtZHS%;C1wH@E?2Iv-Y!;4>U3pod9jE_y1Y8Gyx@O7t9zvBf|iQ`Q=IFQ?V}h^%o1HVm7FxA zep&|%mQN_QuO;LPKN;gGfvsJmn`Ltna-#!Tthhx3oT#m>uJKCy0Rtyd0;Xj&(1Lh@ zdL{WNNUFhS$}45_l_|Y+=G{}545(kKL3QbS^QSLdIyaA3=Dw9Cvig2WJc6!VSL5ix zhNA~Es@B_i6}EzUFri+bQE$O;XdbDN1M6Hd43kVhaX7^}Lr(toyc&N2V(KJrk;%mL zPvpeO8M%&;*UZh^IBHn{`ikFS^`$#2rrz;Q(sl}$JThGkH^$fCw zr+g|SAQL~tyLI*(4pfd!X?b<({fieaUD1Lf%}htUHGrHnBgOfu5zU|}+l&obCXqTD zSzhjG7lq>0}+hT8;@)JdKfP#-d5wJ=>_oj9e4qb*d#W)pvGZ1*C#P^&7^TZ3DmO}6RHCEQziyLu#zsf zb^zdqqJ7}F(g2cX{#C7NdF-C>86@mdXUZxIv>DHrR*zpk>73#_R(8Pl(%bkTJNk$E|1~Emd8Ah7 z%prBA>ql#m;f58|!u86ei`%CToa6y*9zHpFosrsTlWiiwc&N=al*>u+w}(wJ?!Bb< z`^j?5H{R{)aP0w#HY8!Sqp-iP-fc)C*SOC;ga1(9VwP7>nBmn5jl_6EbrTb|QpO#$ z%Tkh?5F0yZVJrgEr!`^n@i?%PsZ|060K#=(&CUrRqD!juK^yY~#J@|KV6=Z8(fK5U zn*!DD&V<$P*#U=rIgIlLF1m#2yj(#A;JHVowZFA?s?NO#H+O@ML(7SM6mL)jwtH)X zlNvcf>4#*W?A8+LJ-YR<#v<|JV7~h6S<{m#0j_GMWP49s&$Ru=ib=R$SgB3SiD;!U z9mh&GAU*(iMp9kjjPNpKlWowt0O1Df5ZGM&5b9CNNg6e{he4ya*}=cHinrMfRpB3L z>tfOs^n#_OnEagrAVm$&jApU&>gs$bhNG7*3klwrFm*qS&^03(x`f( z2$xQQWX-oSeGxcj9+CMh8Qiy+nAzl2L_{%q!CM@|TDDIMj!bv=k94h>Xig7c@1iqp zV;h$|yLRmdhGUw0a%}8bvJY5CxWyFNr}HPwK!c%1l>6A6ZQ@VR9M~!)U$RJhLEC?{ zVGs9g7ZU^HVJPsHmV3SV>zar3wps&oYGBNcuWKi}0h#cPJ=UJwiT2=~+`A46s9w64 zCgE^A*@+w0whG&s`E;0j*$Fy&i8`baHjp!0IHWGuNI6y{>ez9DO@8j1^=|3{a-(Y6)( zSmBWqELNBpBvvgxyb|JCH`!pdHD`>ye9$7g6@N~PI&P6KE5~rkZ51|$EY9!%Wh;5H z39)hPuFO}PrVh=a@p=dfJ72WtCnD=#M_x?wKWKD@PUD#_=a?%-(S+zlF}%=wkZpYv9-}o84|#XX=;4 zh^|dGbpnV+anE_%PR(H03yk#P9_PHi4`{9QP+o1F8lCe|M&v4=b#QDr| z%9k6R8y1rdwm4NEG;xG6R2ckY(2f8(^I{@Ihm3>-cO(uNaNVZoh2L#uKvT_pjZHEj z6rl4EdVm?v>3xH~J_Ko05irXEvDEOs#QE^8VzpSkK_8Rg zkC>s+Nrn)qTSpaumX~U)$l@cSaj_NQn#SRAN;aEyB{TP$%w8ceO=Z{O@e_-2nblWj z-%ivH%+-Ad#U$+8kgXQH4dNfn-l4bdpudN84Hdxm=}4cuZ7Ty$FB0Rk_~Ljdg#QvS zADyQ_>RKB2Ms-`>Idp!K=l6;3(brG0udW{-2P}S?>=Vb}Uwy4FWiA~YOTbQfzzBlb zKt};BEf)kV3u?{}QMsz-3RnNIcys0V)!OQvPv?r)7OpRq&sQ$iF0b8s_bTSD-qz`^ z)3zf@cYc*N$GrFxdA*V)b?*D9YLg$(e$}LYr29j`{4XRPJJG8(haiH=~H@8jU8_?4$@&((6Vl_l<)&~ zd7%-lo4kpk0v-PBh1rvneFVeJ$td~O7fLp`A zcXD$HuT?C(n)_hwpoq4ssY>6>M_|(Ib!&&cFGKoUu2U z{NV7$_VxxHYPB5?est`#z;1*Fi`azSgstd6BnjwBT%Rf)DNOnNUfo=(E!g*<)F8(y z>|aXWs5#`7R8%85kS@nj8X(u8r7uT|&GZ$Y*roB%iEp~XEWxA<|Yw^YnsBc z@aDf`9FAeiG-r8~BOG;H)@@#XM9{QhS_DI>&&fVmSgWm8Zkn(KiNzDXAx-d}Ic7-3 z#l`v6%KXAwwF(4vp3*L?6cW;b+6~{m-Gky_(GOk#u|@Z9qs~q#=MY z`FJHc1`>#D?}wFE$d5p`C`+4rQM(Rs?SvNXn9#Kyg`3|jepH$_BD#5T!kZ4(oxo%N zvbyI^QMI&CsV2v%KR|6kNvKqbFZ&?>7_U*ec&${<8hKq0-OL;rA8e(FsUlWO)lriq zu(yiUrQ)^ns4wE{N%mSm47Jx1VyIeWt*Y1gUPH55ydgs#8w)Ro%thKUs2ko-0T2C} z+tsC2J&6g)N#@#+P>j8$WG5zVgG*g?6~{+r)yT$|dmw`c>Tx^z4CR!F-As3km$@!+ zUcI0_PCK#zPS9?mf#r!f zawIlsV=S8G67?)1vT)^rd2{35k-aHy3psSvBqQ#jxA5%hdS!VPWD}aN9t9BrZx57P zd_QQz(#8k{U24~fE-`G1!|(nA;m@pC@M{EGB#4)qH%V9{xgj1@Ke zsrtTNr4w~ddDZC9jfXlcxd--QE(=0}k^D3f_26)IM`)Lf*e4~HhN)oK}~%jKK;?ianRkTYA!%vrUdd#)vZ0vR-M z$MPHh0WyCx0ZB#r4W(MGc%zgQu+cSN_<&o(8vvz&*~{mL)sP86qpvKkl}kCk|4&Fp z_BAJCIqiUpFE$~snufcTtY>*eHf$l+cVE!7=0HDMn=>Ehh(AVKln_MU5e;*nG)?He zF-8pxdC+c(gxh#9jty~Ugx{~{TA{V^HRKLt<6~o@H73WNwUn863c<&?^`=ct+(Ltu zq_GQ{7;n^ysdHYAHWv0nUr$J$xM82lwva zbB-cyQB|$%h-{~GZZMBdu_Zr!^-Gtw632E9G;ZJO%7Xs$&@htdk}qohq0Rn(nxu1w@r@JsbQlxVEE-{?IC!3o&5 zoG6M(xB;Kv6~fSo?zaMTgako@O&${S=sSgxRF}-0M3ItM<*6pZ4s-nPAm@f$j*uIS z5Z}?>l~#aA{Pt)xETjHF=PCr0*@92b3MLo~;G1e+&*}R#`D7ofH~Kxgh^oPES=JBu|@6?wm|R!ws=VZ8};CQ zuPCpI5*a6atcb@XKS-iS(v?gF{r5TUA56B12BH(>Lb+J0`8{9&Jpj?Gf?i)Ll^1is zUIxu=Goycd>l(E5Jj(FOD)e2Ydie_9ca5zJr;_E`x05zF&rZrAE}6P1i398Xb8)Y_ z(*W^!o&Ms0j5;$vx$7eN(*45WkQt3cx|!8`cJ`*F$}R95+XqADY(#<7=urZ*!rzzg zc%_szwH0?H(Z4HqV)TtdSGC=!-VG1yXe zfdrssA!vEwEuTOXQIZb3G*7-af8zA){DH-clm?UnOlO)#;R9vYUe`O_@rs4XYIR76 zrx+ZD{Z_@bJ6f_awg~}cQfA2}iAQm_ADV~)05EDNF)W(`=aI&eF2Z-J@goyMtBy|S zF1aanG(z9>ru)htt+fLw^+ZBzPSw>iT@EA4p=!v)T(W&`C0wLV{QA_1-xNrc-LP&w zMq~+64Nkp(=E|$UpMK};*>kfORVvo(mv{o&j@QXoqr9jJ=TdE-8uN~u8zKdE`O562 zSL%}^9==lctQ4XwJGSJyrqxBRg;8^mYA8e;dKxviM7XAW}%samsc2rZ^ml}bSoO6qup^+N4y5_ z0PnzsC*Z<`3(vxYxT+ZGr~l0EeC__(SpOo}?l2FTBjzsiS*+|Uv%!30)|v0jedb3O z|LpV^GhP$oH|qoDaZiYQtZ8o*zv-=JeC+fS>smK=X}wNwcm1yI*0posY+=gAYckG4 zVJZ}3XHgtC1g?M@Yv)^Gmq)=YP@H&ojycKURDM7oxG06p*oI6MU@J}r(aG^d9(erM zP`=WHDQqd#mug!k2_*e=@N82(?<-D}@9@%u|MCV>J(a2tiAo3TZz~lY=|FPgwGEXf z=Tmr3c!?H9CO^|y!Km@Gvle#i#uxi2$+;@TxvTfM(w2=bQBF|TDZDkd)qbw+RKqTH z4VTl2uce>wS0+%1gKK<_h4UrG7HKaU4M&GJuT5eV@vjkD-m0DP+Jsm1WL9ZoUjVP< z1JcXW$!ocDleZjJpqGa>cT;1_6m~L0kr+;0FfBs+$YlJ-3oXW^!D_fL^&G`%)@0_w UK{nSO?SfA%>AZDwSA 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 NmbI{0itq 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%0A?KB5I*NmdKHZi(c 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 literal 0 HcwPel00001 diff --git a/binutils/po/zh_CN.gmo b/binutils/po/zh_CN.gmo new file mode 100644 index 0000000000000000000000000000000000000000..04e985e361fd5fa1efcc1aa7eace383c008ae69f GIT binary patch literal 75903 zcwW?f34B!5_5TA`qIIeJ{y-x^8B|b95vUP@QXxn5<)^iAZ!6bBq1oZ)_p@6Jiao>K1@$FfLx~}@MVH{2HYJ$fTj1WAP;LQa4 z5qyf^*#y@UJd)t&1kWUR&@jU|k>DVLCc&`;k0W@kJpY$G&nDQPVDm8Wf0N*01ivMC z1i?ctGK?I8CljPUBai-FNbn|tlvSgVU>3o4f+rDtncyJK2f-f_JYzWW|09A!363Lp zI>Fxyd}cWEy=ge`|1lip+9mLq5r#3C;823+5}ZzOAi;-6AYbbVW;6Z>)Wh*3DJ_Dd z2@WB6!$|O7K(LVD%8|(DaX&%)ke?u5r39(S#^dt*H-bMPc=W}FaUj8d7XyEQz^Me! zA$ZTl$lnTr=M((r#mL`)Ts&Vv@B)Ij!@Bo633w&xU%0HjrE)w7_g5~>D zKCUv1F9}{S)i6p3aZr(AR1n_1rPSsG4=jWHMg&%uq2K(D;6Vf*D?>d#T?V;nD}%hf zL+}uShlW6Rd0o8SoquO@gD!FULKZVsUx=Y}Bv-68P#TH+797X5R;wWznB zUJE%-TnoBK2=*no{#w-A4uYo;{1?H~2%bD0ayNWB=w?hueLgrH__foKpVsN@N$7Sh9SSt6J(Y2b{Kq*D2M$2xE#-+a_F5ul|#Oll%pPYmZLwM6al}> z2wqI^x(MW;If8P29f4e(5jBjT5u6f*K72L`y0$3v-nUWkJ*fia99x0>{i*`;R#$=e ze^o$^2hM=JOq+rFoa4LvZB`)W^mdkmuKDfbR)0JWn7tz^!Ah?}i-VKJanF!5ak&dS4Pku+bg79L0AYDlCbAkze zzM15W;@`a){U+-c$kE_iAdeGoLHT}h3+g2%@a9`Y|K0+*UoYWZ1Sy-w`vhtDGCq>$ zUALfqci)13)$3OD2hhlxvtgm)?$k^6T57*ZzDv z=r-OCx%}*Q&>wLJ#>sQ;KsheH1M>FsJAfCy1LeBq4(N|Z?|}R@-GO@l#~n!TpgS?{ zo^~hdXV9H!=S%MdpBV%XC3vUcJ#;7PWv;|;yc6YrU!ZXp%6;5jsE4!eg8m(P7y8A_ zyU>2m+=X_ky9@QbMBw(j&~D!d{Q-AlTtDh=^sh_qMmts9E&BLwl;iQcQE!cRqZ}LW zM!md!H~4%f@CWyx94Fl)`MU>vhTenn{PZ5wSLr>Fo8R68eveB0;(L%@*FE6>;XP=F z1OJ3}I_^)PANeQH{rpeBkN*kzyX{ZN|6_kbeY6PvClY_?pHYA2pTU2~pTTGRpP~Ot z1m6B<=&gl+M*Y11XXNAfzkqJQU%+?NUt}B;m=t)Mz?#2+|Kh(ut~!M7V}fJ?7>C@8 z@i?F0;RJ8F7xM7Hy=d>J?nV8zNcd(6e}&){f}h=sc3bmTz<>S~_22J4=$Z5G1OCwa zP~Q{oL;kP55AyK4`%te>-Us>JD9@kXhx{CWKk#$zM}NHJew1ta{ix@g?g!t;?nn8W z?uQwu%PT*z<|KtJ4!!Zwn?_hyHdl3Dn;z7he z_#oP4@q>`-bq^xHTONd5eE1;hfB%P&?^7OvJ|FTB`p2|~pw9yj0k7sEl)LF6)O*`Q zDBmj&LI3Q22;;>$4-K??)a%yVc9{#z&C9wnuYOm?kuGL+AOr+ce5~F zoIM-imkYdhHu~!=vmqCavys2`vr)fq%|^X^Jsb7-!za)m2MEl20(|`fZ+ZfFHBUf( z8=ruj{^JRh$9NLZipM;(B<&((YSx?D0{}kjm{uJ8d?x)aS8lOVB zTc3jd+4&UmamLdq&*-O7ACsSk-FDm4C~w2l=yz{FjdV|(1Ab%XpkGXygL403j>y{_ z@Vi-_@1FyCpEn2jY!Ud%9MsDELw?Sg2YwUhp}gUF z(0f($pbvjN4|4tNJoJO5^UzP%&O^Dk&OeHWm<&t3q1 zcd_o=whG*_0OkB)E$VAXE#_^LYmuKRwXnyptwp|K68?u; zjA!>s_^evAPeU!_aD~Ko)}kI>t402@7NT6IEtL7>Ldeh9g^>T)LbUtS3z4s_3n3q0 zEJV6LTm=4o7eOBkk>|0CP|hifAV$79l@t79oExFG9XP zT7>its6#(Ex=zxoL-^P_&|OuBemT8P>>+{$1Rt$Ky1OLas0Td09{kU(NBvw{k8!N9 z9`$~8J<^+2kM{mmJ?j6idgz<`>LEXMLjO`d%JFtR#*xqK(SJ^CKt1$rKt6m8$nQlB zC`Z1;2O7Yqq5*tvl;=AdP|gP%FpfOafPAkM`j-WM+<^K&U@`K0++sZEEC&6s#VFs{ z#i*Zr2@fqsdR2>2o87H(BJc##6Qr4azD}pz0uf&diq-v%Ku>#(*IVTk7*V?+l+LEH6#A2X2j2E z7QN9dS5&k6wy$UAPqWGk>~cMXx|T(qCJcj zl;a02=%+a?$mdjnu@>;Zxdrpghg#6z9&15;&S^nCcC=vp+uefx?OTTU{AJ)fa~bsV zyk$uDRf3n(e0aw)@mIcp`WW{D@)LXke17u+%3bq<=${u*ADu5i{y%*I_4nNiko&_| z0Pmy~(mz(9ycexNz5Z+k(k~O3T!HreuN4?S9$o=GwQ&W?{q+jyzr$7{Uni`D{G7iM z;lC6ZS_%0`2;S_K=-10uqQ3qn@U4}|&rX5+twQ-uSOvNtuR=Zx<$3xl$p0T!p`IRC zg?{ziD#+cIRVc^j1Sb*f-HP%|Zbf;bt?-XL)(XE#XDjl#|7z6Fkk!yDxvPPH*=mf7 zRRZU(2L3CnQ7?zAf&Bk?4dRQ|pk4p62JOFg4bs`O26}POTGZE=wV0y0&U30 zLv1M6`Zlox+kki02KXhWZGioK`v#2TYc?RAPvyDaM%dfqHv<2Tjo{O?5qv(}DC5~C z=!GGh(B7j3{(KYKvqIqSH;LbH6Xt=@3aPJdrqz<{?-wdOg;L=yA zkCH;Z@D1Wkc+1|QIVHgp-WB=0QNnlcKz$wmA;K^C5b}A=hmfxaJ_O#n4RiY_sAz`uT7tz-0yvY{?O-BJdgYo=}r3-_QM|t)|33+_9^N=_jB=Me2#X# ziQo-1PTWrLHiCV2Qyg`Od%vXo(sQqWQJ*Hfv%aG-i{M=Z#}V8~aI?WaoL(y5S-pBG zJ$ep7*29+&<7MM_CtEp_5+`UJm0k+^7#ZolVAfumWOTof#2r@xqlwK zKl0IUe}tbW&!hJT|APII-!MV$Z@<|ebocL%bQTK!+WnE=?)_1Y*Cl?}{-~dW4nTXH zascqpBFOsa#|Hp!@&TZ`R^aslZ$AKhA0fzcHRk}-&*lTrp1TOL-ujpDIp9FR6Ay$O zoFj1PfvAUEf-KKP2ZH{l15xffgzoVJkn?ymz0 zvfc3WgVFB4IvC}?`(UK=z`;oWnS;@ejRHFevR-(PAnTPQ`+)wuKFI&5K9GYe`XIfi zz~2jeNMNntukC|++};Q2e%uFqzaz-w`Dt0G-%GR5uL`q}-Y>IIj}-)2uU#*Aza`kh z<;a5EDL?rz72;U|LYEc{J$>nJAtPhiuS$eP|!^{ z6#Xo4D9Uq_g#YDG@PFn|^!p})tVh=!igJ8(DAM^-;E_K7|FeF8@?Z7?$a|T<-%0r6 zKR|h2_yNlI(hoqt>j%(lha86doqL${%fpaf!C}bP)WeXU*kPdi&0%Pd2juyAg1tGP zhoPM}2)}2RdqC3GJgj(+={(4Tn(+Ii>^cph~G+IjL3NWbU^)N||z0^9f|(;l7xSD zBvH( zP;X5~A^)3?LV4di3g!G-;tx9-@uwe+d<{Pu_5RbNfq%`>z>gh`di;anKX5eCUnp>+ z(7hx0-yV%}A8`!wclI&B8%2=)BU2^3R^a+$P#>=gJos4PpK~nacdR@|jzv5E@mR>+ z)5oIRi;hJ<>Npnp_~KZU=g{MNDf{EZcJ9$3xc%*M0555Bhjy)drS|afJPeA>wJ^}Uq!3mJVf1QB*9)2Rq)AvO1J@Z7Q zlY1ia|8t2iIT87vej@7Ok0+u(-gP46_Wl#m-<~`X=`1)A_D}1H=ue-X2)R4*B;?a~ z68itRlQ7Pfp9H;q_er2@JPG-HTf)CM33~3-lY1#Ud-%!7Z^g;rf7{6@=e(0qZyhJ2 z9(J7!x?@j4dgl{lyLs{{;Qt2+zwZ>3ukjS*Z|f;y7oCFo{Z8Ovr=r}aoQmf&PeuJ) za4PVJor?O&I~DaZPQtGi{D6eV<@qm@r$G+yI1TMG>onB!>eJ8O_Xo22|hnDk#3=hd`>ZuPKkskP4Kxvo_{a#w+nno_|BF1W)pI~Qo^@L zdT$E;CnoCgI}>toY~NmLK7CkIi=B=Ijw z`1Zc&r~l}SdfFxN$Mi!!PwfZ(+46j0KiC^1`T;MmAJWYiI7RTv1V;NIotgbmzt{Ie zz2DLg?eI`Plyi~5wtlGJ*9CqkaJTU9eLDCaemeLbdpg?nq|=d~3kCkj>*j59f?zwtRpzk(o5m(?|;7kmnQ(X`0;6~T`Q{zMR7 zr2A^>Om}lWdm}6+ag}tRMPa1IjA(D3uTr0%=fn*_Jg^E{z>hTx}?kHaPGdIR(Q+a&x33ja0z4$AWz z1oz;laiWAJ=zfRpQ-ud#Gbrvpx;OT+!w!<)GwmQFKw*u&;Pbqz7xt1p+l&1Ih#y2e ze?a$m`u&~IOr^MTg3k-iREl3fzn>;Jn(m)E_&?>y6Pbv{ETOrR;A?bWNB8Pp@O?Z? zxQitIWe1Pn(S5Ds`Aouls2BVp`nsR)kLkWb=>J9VP{Q*|{3*TRKP#fUf#S9jJghf- zJMYtT2f-zRJAlI9HsF6*OZUz6OlG2ShLnZv-(vYq(+Z;>{m!NPIiWwnurHd{7=0XV zuw7sw-G8K;)RNMxVFylvc-=y93589f`&Ih=0EP9JG}#ZFBe=h(`zgZN;GoynYP!Fq zJ4tkNCG3k{>;s~H+lzfV*we??Z|V0{1ncOgDZa6e)1`a8#4n`Z2lvJvq6on_-SZ6W z0X$FgHCpme>BvhP-4Dy}Hz~ZF?rn50rRNfY4-#yY_#wpScfHgSq`JxoWg%E&sFrhnA4=^cFE&p`h79oA)&pX7yH!U zyX>a>4|Lx{_b(*=8M^Nmej^R|wm*@$Lnyq2?w9B{O^b~&z14D*>x$8RjpOM2ps{op^};&? z^XVoN#Td|weTIg0ec229Wr~Eyf6?2%*K&%dSLm)gy5RG&xHOl13qWI*arJZe&0gzHxlmE z1pnm7D_=Y}f7bDQ1mRssILig^T!N!|!53^&+#11~MZZs^`zHGR8@fl*?`wKt@7N;* z^XSfz{8rHKJ#-&J_wTuUbiYsG3+cXte$OVnUl1JDoBgl!OyRkb4w(Dr`%(NE4jy;V^D24%n(mwB zH?K1sLBIb>@M*e#OLvWd^{Q$Lzee(Q5&bTw-#63mUr5+LC~OzqJL�h5fyktOL_^ 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 Ci(j4q literal 0 HcwPel00001 diff --git a/binutils/po/zh_TW.gmo b/binutils/po/zh_TW.gmo new file mode 100644 index 0000000000000000000000000000000000000000..b02a71ee6b1e68f2bccaf882696c939761359459 GIT binary patch literal 121475 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%0D|*agR-tNm=9-Rq>=_ONLw7#BwTprS zfbUnc41~ylJLq|U71!em*w`EmYk}Ol@DQ$tpqJz}>oFr-N$zHSRaWoX zr%kzver%}5s{-R9w?w7byDHLsbY+Aqhl|S69op^LSr|Ca&hwX+g7GDlEs^z{0#nO~ zPsx&u=$g@j!YE)LxVKK<@ngfZ+}r>(hZbhqf)LhnVjeCd?~m9!^1y_0#Qfr4{90&% z-JS+ZaQJL)s0U0;eZnCKK4J06CpN=H=zbam6?=kexyt^=*j`&?#B8yB{yS?0fEcs;bH8`GU95vkLy zdIRZfGW3&X1!~yNGx`(r#SfJJs8VE8Tmjtn+#mE$#&EoR9K(;oK%&l)G>lp)Av2QJI-C7jp z-vG-pxaAz(F9nlI#$cS|OIoi$6Kr{;L!Po2rcbRYD`q2$P$4LDu2AvaiM%b?JgOiu3%wH-UDVhaDqB)n$qvV?Hk&5ywGX+64ps3+fLZ ztSu-Zl8v6ePd;HpFX%cL9nHO8BrJ2YH|CmsyL(Eo$KXhAuBXtNoiqDh=kH#_rq8aT zeZ+;EnRo9ptK%$pL{B%>PmbZDy-=w#x^z58X#pQFYwKe}yxAo_&ipHSMNa)L-d)xa z*iHyYt3A5nQ=A;75PpJd0hbze1GuVvb=98HF4&OR4@l@|F0IWKOj(4H=x9y0pXf?7 z9!s2PZ8PAq)3d6G+$aT2VO~e7ovUMH&VtItwl{WcmJA$hyM66zU?Cj002T4dGzKpZ zBcE{b$O^&JyGC62VfakY+9zX&&`eA)SR@x+>DU4xPt}D;7kl&ZdVh`-d@Q1H5l{Zf zDY%A&J+TTe+|NJ0lF>fD>q6TA43jE*Q!XAS0ER@4FmWP2rd6jkr;&}cu`x1`oF5$2 z7W5CI3V&iH-#e6@zv@37V`88v?HPj0`}9L}JQtN-Y^b!Rvp+xtH^h%@+p5GFap7$6 zJ!9FrBxutG8^8RIqg)X0h|#OwwyjbSP4A*>NfjHsu4NZIVT3Ai3-015td3SeP|*XX zBot*4veAVv+|R5Hc@0cGkgr(-+_XpKba>7eai9uzv1jeNkA-FdV;G)Aa`}C8YBx%x z6u77W3UAB5u^IVvYoX>aE(idX}ZjdCTR>-( z=E_iy4ef4&sh7dTqV6SuIOTv~fn3;^-q9h)QOv6WYkL3#Qrr(G7C8yF zh3FsMXMr9GOa71S6q3!QdK(6|~3n7ki1Ut>V9bobQ>@2Cr%9?TZP{4~^)QkZ`;;=1NjycD;wiLL#rhK^T70Q6TS2Xoi~A)$#Uett zffUUrw*rN<^hCZ*Ki#A|UoMKU1WNDqa0+O)afkfxG7zq}o@+*V5{&Tlr zR-ukKP`EC3IAQZ=S%i-s6Ho7=qAdmQ)2O66D8$i3f%BZyN^d5c?*BG7KM=~K{ld#Vw2Kyi^1 zN)6d9T!W86{^~U1i1^Ej{cnK102k)me1Kp$H7PZ+b3;pmBBEk_{sXszG~Ao7(YN zYmuqp0p^9Kv&^9^;Y5^{s(4Bi0G1WJW)f{fVrxbjxOm@Z&)q7CDdA8Q-Qs+32Wziv zPsuHDWDb*J1S`?3Pe`m164m^}VA%qijRXBhb#8+l3o9@vBuIgoR`%&2&^~bLpcJYq zl4M+$MtujG*nLCsZuTiXhGpL)_2qcck>y*Dt_)JQl0J*PzAXbAq4z9KoE0^wP^ULc zEM-t({j7@2fDP0cEqp-(_WflV5aU~`fpC4NffH5%dRW7VlS)4M}v>E~qMT^b4wT#LhC#E|*;$2?gyr)oV5dP^?Ix(X}monPs42^A_vXrjSml z=I`V3@=dc{+tLDP;rx07!Qf0?=|pHS_R?zBLD(s4bjC)coAy(;tJCz9r-0E}ntMna z7@clNwl;O7P9EQzZa;h!V`X6~8(k5+hAOmzsHno3s;J@zFDj}!x{jfNXc|&Dlx;=T z$)@HMlsKN^^mJ#cq6+p%Mb%*{aJ0CNRqz5S-nM#dz!mOlOepqz??V)rOgw{I4RaSq zyt?n|4&ytUA!9Nic=P>3a33i{63t#{gJH2Z4&lE-bXfg!d>8dpz1CRuQ~JmBsh^J} zQa>b;i64LQJoZx+8w9dNv+p`2LZNp1&+(R@VYTr5G_|yLSN*j8=PjFm-ty%ydM=O{ z=zGlc!*4yk{z$LT62Kr>nszy=<4de^k84gL9`9`LEU=F?v&^@)F!p7@<*@|H+a*I0 zL%MQjwTfGvv#>QB2!iM_z6UgfVruQMC6{N#V=J!Lwr_@P$oMQ`0oS$YH~w=#E)^Te zx_11w2VPMK^&08Z)mY`a39Zdo-a#Cs$~#cI-*fC{@s{MMX;qc{uWi8%`~cfkkQN5O zsAxk{RAbJ_=n4XXNJliFd~{b^I0h+Tz_gW z+uWb5*sg*>;)ga%`T{(bZV_21R*1H9BnipI{Pl}A+regxsGfuF54?t4|JhxAjEa4> zP2-0R8s!v}uWQU`n>>EBLF0$OZot$LKZ#<;^TtVHgGjSfID0tRdn~hV)2>bZ3RloG z48VeG3&G?(+V80S!41pHK;)K0N!k?IfAidTpM~Mm81dv);k*n9Bs{%SJ$ z<4ef)PWLzyIDaX{D+nEh`GI})p&7<0M)FI~DL&NQO|{P0@tGME_Kchm65aUpof)q+ z;JXv~vvX#s(YC)l5Zk=~C4+14Q95LwtHq&Ua7`a4q%ukNMRx=Omgj}zX?(;9zhHQf z1vtUQU(s1e_ahq7(lM;I4j=i%z&_Fdxw{eve}v(QT`aYLl@1Y(fErEmZk~ay){v&v zYDat#5V0jpWB%v}$}*}_wNI>H}Ce}cTP-46V!NN1sbtwu0 zB~X)h6^QkGk8=-SWM3|#*6Y%R+}z9H%p5;?<@a9Cyz9v?lZ=PBe|g@pDiraIbv$nC zj0)clvH74{6%;p8bYfEGnNR36D-JO;&0YsR)s6Zy)+1S?^(W_C_hg_#BH@c9fJOuZs7T^9;&_x6GyzdRFK&$H;NpRYTm&?%@j$!md zw4X&L^1ZyGZDPt z6_CWGXnRI^PHvbDXWitI*uU}sadffLWXle3)3M`dCkJDZm{WBBVIEWp&W*}DD4Xz6 zCK%}_G1Ldc|M5RwX}Yu-<|6IE0{VS(!Si3qW8os_k@7g^kG#+!66kHi(E$oJLs75h z&tg%S`s`2-Fj3g8{M7CI#1JJjCpA47j3biLglJ531qh5Rm4k&V5$2{Gr5m?^<$zLR zRhF^#{%aZzsKXVBl+=|!_(MWC?%>3Qq8%XeanuN@{ePDEExr) z?C_4K6Nw+h>8(o~6gZoLsO$A`5r`R&#^_MJBvjm{$U<4{03m%Qs}6jzS6SzoX`p9v zrP%Z%-dEu<>5LFwP{(|cN?0^v1c2PrYyJS5FBWbg=^pHx|}W zdYe*-WK-$3PpKg9Fnwidt+)td*iNH#>!<2Kn|KJ83R#~Gog2cip(qL_ooPUBoiq$G zOcxXCpMKx7%<^Mxu8Na0idedkK# zw8(gD2l+4%U57gNfvdqFz7h-@8wpX>5SOC23-PiWUE_R~{j2=!%Cf(BiFdp$E>-z5 zA=8fm3KCsplpNC+k@`ap`chAB;7Qh4f$H=2R4h|t*2d7!DeK&lnDx>D$J0<&|K+hV zp|gAX^j%e0CfEBsxP~6+{7?eATLWE6e@Eo5p3mKWEc9`#j1vJYwS}}g2Q`476j({; zZYArtJJV!kH%u#q`javY4#D9a3d$^wN*Rg!po+mX@FOcY8uTE+dFda-H)F3Y2p{I8 z!G#Wcw9sxc8K|{!ZE?vC3efCy=LWjGq(cZA-T7gls|?icB)k6bDYrhrhe^FWoQmE7|S*?2h3okrgjLhXdD<&8^3Tr(36lzwj`aHII13 z@Ua;vu7BeORcGGYwR?{jyqeFyn_+ws!>gHZJ7K2T4--!t`pJ{|k&D<+Nvy~rFa14{ zn;R~SYUPp`CwUlQhaVHs5=3wJXPi%^ zcX#8aZK0Rz8D{R#cCpgqb17$uooilclQ=|dX|Vj5`v;r_Qm=eM><8)Xr|6^8ixw|@ zqdPL+eWp9Ii1kvpn~y?>-C?^VBaMi%T7qeUBm3k6+i`eXH*fyJL#yR0&vNf(@v-FD z<$V98VEQas&Dt!4I-^+%>jBe+x-holpg0jMVzD;b=mfAWfM5a50*CLfJ;V(My??jN z$fSgjnSScYY$%1rTn`s}KiLH`t5+=Jb=qy@Ov1a(rB4@V+bN%1V+AZ7R~am#urjn` ztZg_P&NH=iUUvMohians<6c=;Te|f`TcX8Fwzr)q_x@Lvx839SY&6P6F%2p#8}Z?+ z?a-g^4tQluIoZbj&m@CgE1s;sg*5h|IaB!G$6 za4N%Bh(*lE1V}CA;XI);l!|}I=q@AhYlXD z_e5~Uf!*MKog63LOWt)Q%8<8Vm=BGKE*iIC3g0(R!MVqmLz~-=ANQ2s$1oaEC=Lh( zr8nOOmxbKM0bhRUKf`DTtZnrN?gkTYaQ6I(d8i+-EA{Qixknfa9h$Pm|4>f&BP$UF z(TmRn30r3U+Du=B^oUWg+ZG5N5jhe>|8fX~hJaEjvT<^e0}3ey2NZ{_cyS30!48vd zW`1-483QMWd&HcDfA>1tEwMqXqQr_9F_z8|MTF+3pwUdsQ9)$E-mf8M(8oasIYIoU zBZS&dItuSVPvt{j4Wr9f$NqVe;EbOj?&@jPkVpDhc9@zUu{7O&k~@A z{KTO6NPiS$1JQw`K-s=}9<$?wJ=`;-NY(pDD~&F|R^%<+_aJ|EP75{d7(XnIhZ?Bt z;Man;Mb*(f9pgPC_il-4Sq$GY(2IB}zYVT)Jkt0xg`BY-sSIBbPM&)~I9Z_!f_61d z*vKo`T{}uV?_0pAB*`nU@T%c&Ldx*>5%`;MAN;-FE6dG{_+ta`cO9hDzC<0%KFA>X z31rlIW$a?i)*X=Yl~>060sP&qp7q0O2cg>i-r(68^Twvd*)jiB?zKbp0=5r8b*OaB zsFjz*gwUn4M~niwM*y!SLfXj{Jf%QT&=WnxnNX}xeOvHlr_Mi%lp(F5G=0=0^NbY9 zWVEf4i$+ReH!R|{VMgFG2C@w~<^j}u@Z9~r(p$120Q^!8kbcS+Ums$=Xtm^mh2Q!$ z5n?~+t&NztFpiF8)~48Al;xtRW5zum*RMkJrj79-Eu82B2M++t0~@(KcA&no`ta^Q z!7uC5=j5-CeB+fhb#=EUTboip0`+zY&^~4DJ#@I{E7)C(qk`*?@z#K~HF-7l(YdwX z9;!pfK(8!$x+9Gf*4XK>uu13FSJ!`C#|1i@I=j+ti9?4KgpL$LaC24ljuh8+bB|E> zfH+JiQjOimJ5q@gZV3gu5V8hb2)Dkv?$34ghriwpqt3j0=MPO_DP(SKS^A1k-G-g<=0P>H#7O23RyCj0mDF9o_FM zvoXg-oCOM`U-j?|o*{XOuorOv#+Wu7@Cz<8p+(1A6u`~#$O~w6#8-!h&xQ&mfCO%OcsD!1t9!|J% zK>lDwsbxHRZYFRcnEQ8Ov!niW2YNF|4>u9xhZKLwkAo)+KdPH zrIJcS>8XKM6g@TbPqwET;Dislsl9p5bPsM0L-?6=7OKX?&L}LzW2VI^86u`+%?nfM z$Q-VzB^KPo02eO27`b92jE&Gcjwr1VL;=O4ga%tbCEryK)ooH+YmQOdMshYZ=J9Vn z^DkW>^=q1>Z!DE$q-1B(rser!iy?bOh?*AciTh8{RV^qP@TYE~+J!vng~gytg~rJx zSqQ3yY;anvOr}L$Wt*Zai)jp%t`G%QBXjsx3`LFN!J%^_PZ7_kJxke<=gr_X*j(TOBqgDZ~VY&s8|MVl)GMTVitUuw+#A^;STLK$8*E1|eB7ER< z4eQ!hO^TfV+JY^V{(WUCI5P*R1Mc}?cre@d!29aJ*J3^9_dS87&CNYSUi|4`36dsugX;h0{SkbHU{+K#5UbNVA9LRNjHc!$|nDxcb`F z+{62dI%1Ui@V<>DW&DhLIg|x#IkBT6Y*Zp;nAR*-Mk@#CndAg3OfCqAXmKAvp>0#-XY&2V#%Vdj$VlOBYz760gZ28op zCQ6)gJgvOtt*OjCa_p^<{KzVs3N>&c#TUa(>4_vmBb*Huu98WCo0(OX1H9}otzqE0 ze}F=>>Ujf8aeAP!=E&~an7#~bQ7lIIL1{lCkWea{+Imo8z?BHG&xj72rJu1+jemY1CGs=-7*Fk2KT)@ecmXGQMOV%glkqS?;5Yp~T5M>kaGXsA+=I_u0;RFRDV zwQSsUzPfw$D#4GqY8PlrW|YikwaIfEyE%sOg1jOP>|=%Y`C8ch?%ujJ(IriVWAtp# zIQI4n`GScw5P%OB&6n9ReF zTNJCYVNny4-BN)b59YtLr2lG~Y9uA9)oM6%MNf^i#E>9E#ju`Vt8*R)~SY zZ83~&5JsqE0k_Su3Zv-=^oIFeB0G4uEU~g?;ydubmtSD`U)1KAWV8!nb0Vfac;PW_ z0s%55ZLKBpJWOUVBV|g7W}j#^gDrG+erg&fIJy&Lki=}H*nj0=Tmy@EBH(B(EoE6D z-PebEdf=)yFeEzf*zuM|RBbn&NOU$fb#*7&I*mm(OtX`p{_$iu-yz+sb4E)=8)Mx+QT;<*8*7e*tHF~9y#R2ezN};y8-gCVBZ2u zD(zI@=UoMNn*r-9RUVOLJ0sGZBSJ0HO4rhKxibOgB5>!$CF_e-$=$k zf8-r16Gzv$5RMEI2d=`YS`Jo5z2^3|bm!-%+LKM4=-39>L&xZf1s5Oq1FxB+W(BCX zXJ2*g!LMqLu!JU!VMsmwVy+}8u|3ntXkHm|?JDi|@HVGzF{aQ|waX#OC`gly>yT`* z4}i<0i3vI_JI2;!ZMsZ3lCR~C1s4g#mX^p+lKu%1A263}C{CGTww>#Ll$(=BA!A~? zN!+9SP__rjmY7YqOYI0I)y-*XY3yuoZ0<^>04+6=FLp;$bK-aHNx(K{Ob&1z3~PEU z+1~sE(ghFi`_mI_UXZ_e2IG$~PAV*F!z(DnE{3Ko@NWzE0moWJlnZzm6g##>mzy2S zEKhM`T!(uqrGZpyp&`Q@{MZp5vwhP^1w`OLt|nD+37pDwi@)|L`>W$IQ4$MFw4Av= z+4MuAQIm`crfp-AotuYkC&jU&QT=q*h6G?yjinOJ?Wu@K^u+Ws!69i$i|t=p@kbxK z6_ZWJ63K{_QQ0tr@WR+LC&fCN&@;0$ky>vNrR=GuR4YamSZ}x-OZS62jEj9>k8vS> z;&tQGV{BHP>F#Vgq1H-E)3oDaK(9#@mMl8V)2Y@@z4kU~0w_yvM|`#K;j`e@c}Ae& z-_p5IDpMCG6+J;_hR}Fmd`XBfQ-fs4)^9SFK$=kfwq1=| zvx>f*_78MBf!+Xk*;9;EiY93yPikdfE+SK6|Bza2z%Pw4F`8B3jx^)942PGOka*X+ z1BGeG&&Jr*SnXeWN|m{0p@vCR!^)IPtGGv091S7g>hEMlCVa>|-$^o17QF~_4;r#cqg+V%%dtPF=O(21p2 zKzTXf2uR$f7{4!EAT5x-((J11?%b^y^A#9+!fWeFCgp_%+&W!tt7irEj%fMx_JjgE2hMWQvD6VvZ#SezS6p0AqNtjuZciEok z@`I0!O0qnYV(i+*Lbr_V0j4_=<4FX}FMlb1#`+;N1}BL^ksVx99g1WYeZRNa3;EJ{ z4W(an9c6!lr^+lq67e8yptPcjEG2o24R;uQojTd1f1|4kk@?bRNj50WV-JsroV0p5 zG%Cx1$3oy-{|jxpLCM@fk^I?74qPc^!(&qrhN`S36vATi&h@$8q)z(AoUXT^(={3i z0}<7!=~K265w^4|7D1Us5oC)Z1%%7qB?DNojkd_0P9y-n`|x0XTyZ9PKBf{S`%^Ri znHP%JQ=(20otfJY_<`286OG?Dp;u>n`wv|mj;zmwC}0E-`YpFCyLvh62{@advJS4i z2J%1G{}Kt4_qSN5P72S(e!)_rjAbs8xL7pdzWB~qs95jQ#stR-_F^eap%X~dEd*^+ zgs2EQUKhe!4^8fRIGcR~oC<=HM;Fk#n#4NU>vCx6dQp$B`+W~F76p-KI0RZIM*zvS z!y>(5TaU1=td;YoUItg*T9Qv?9P7Z*3g)cHkR`H0LHa3*j28ov!ILRd*-VYb>c5M~ zKw`!O=}{!JdJVQziF$a^bZ`RX<#eq=HbT`-cCA-Rn_)y3$}S>(;sUYR1g&}wXEPBW zmCdxN`Tep7U4ob#Gm}7G#3aL4cc<^@@JT-MXao4WGG}^OoP<5n;Atwu|v-|i6 zjcuCn9h#~_4K`-Jm_-u8(LzyRgMKvXBUPkjzF?{TO)5ubEK?yH%Q;@YcF54>MBhWT z3v&gHaG%i3pcmtG+K%wp)Fe=NIO`~qTED0aor{WoiVmnW=VZgNRRp{D>8WFCp0loT zgNM<#F}{Nr8bm?48ds%aa%jECjwmvV)d)peH%EuhRy1%zU@XJU-5-THU#HkQ1(-67 z?n!3(u0J~Hl*mwk6k`Trku`djLS+yG$Nv-UZy7q#%Lv^ji_uK@&~6I33uKcfN{wkU zoRlqFLch0~-=S&Ioi(}S5vXNM`rT2dkno@yZR@;XV8R@%J>NF&-do*>igBm%5!1+>=+WMX7``T zv6Nz(deNn7j_j*1QpoI4nSuGvQ4J^$BXp>+t6;_AY&Kvu<=L|pVOn@BuH8Fqi747Mvr pxlH!TGxAsuM>ZBc;9ZVNh_?XF)%00$NTAl0E{t3$Z4x*3e*jLjJPQB- literal 0 HcwPel00001 diff --git a/binutils/rcparse.c b/binutils/rcparse.c new file mode 100644 index 000000000..f62078165 --- /dev/null +++ b/binutils/rcparse.c @@ -0,0 +1,4584 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + BEG = 258, + END = 259, + ACCELERATORS = 260, + VIRTKEY = 261, + ASCII = 262, + NOINVERT = 263, + SHIFT = 264, + CONTROL = 265, + ALT = 266, + BITMAP = 267, + CURSOR = 268, + DIALOG = 269, + DIALOGEX = 270, + EXSTYLE = 271, + CAPTION = 272, + CLASS = 273, + STYLE = 274, + AUTO3STATE = 275, + AUTOCHECKBOX = 276, + AUTORADIOBUTTON = 277, + CHECKBOX = 278, + COMBOBOX = 279, + CTEXT = 280, + DEFPUSHBUTTON = 281, + EDITTEXT = 282, + GROUPBOX = 283, + LISTBOX = 284, + LTEXT = 285, + PUSHBOX = 286, + PUSHBUTTON = 287, + RADIOBUTTON = 288, + RTEXT = 289, + SCROLLBAR = 290, + STATE3 = 291, + USERBUTTON = 292, + BEDIT = 293, + HEDIT = 294, + IEDIT = 295, + FONT = 296, + ICON = 297, + ANICURSOR = 298, + ANIICON = 299, + DLGINCLUDE = 300, + DLGINIT = 301, + FONTDIR = 302, + HTML = 303, + MANIFEST = 304, + PLUGPLAY = 305, + VXD = 306, + TOOLBAR = 307, + BUTTON = 308, + LANGUAGE = 309, + CHARACTERISTICS = 310, + VERSIONK = 311, + MENU = 312, + MENUEX = 313, + MENUITEM = 314, + SEPARATOR = 315, + POPUP = 316, + CHECKED = 317, + GRAYED = 318, + HELP = 319, + INACTIVE = 320, + MENUBARBREAK = 321, + MENUBREAK = 322, + MESSAGETABLE = 323, + RCDATA = 324, + STRINGTABLE = 325, + VERSIONINFO = 326, + FILEVERSION = 327, + PRODUCTVERSION = 328, + FILEFLAGSMASK = 329, + FILEFLAGS = 330, + FILEOS = 331, + FILETYPE = 332, + FILESUBTYPE = 333, + BLOCKSTRINGFILEINFO = 334, + BLOCKVARFILEINFO = 335, + VALUE = 336, + BLOCK = 337, + MOVEABLE = 338, + FIXED = 339, + PURE = 340, + IMPURE = 341, + PRELOAD = 342, + LOADONCALL = 343, + DISCARDABLE = 344, + NOT = 345, + QUOTEDUNISTRING = 346, + QUOTEDSTRING = 347, + STRING = 348, + NUMBER = 349, + SIZEDUNISTRING = 350, + SIZEDSTRING = 351, + IGNORED_TOKEN = 352, + NEG = 353 + }; +#endif +/* Tokens. */ +#define BEG 258 +#define END 259 +#define ACCELERATORS 260 +#define VIRTKEY 261 +#define ASCII 262 +#define NOINVERT 263 +#define SHIFT 264 +#define CONTROL 265 +#define ALT 266 +#define BITMAP 267 +#define CURSOR 268 +#define DIALOG 269 +#define DIALOGEX 270 +#define EXSTYLE 271 +#define CAPTION 272 +#define CLASS 273 +#define STYLE 274 +#define AUTO3STATE 275 +#define AUTOCHECKBOX 276 +#define AUTORADIOBUTTON 277 +#define CHECKBOX 278 +#define COMBOBOX 279 +#define CTEXT 280 +#define DEFPUSHBUTTON 281 +#define EDITTEXT 282 +#define GROUPBOX 283 +#define LISTBOX 284 +#define LTEXT 285 +#define PUSHBOX 286 +#define PUSHBUTTON 287 +#define RADIOBUTTON 288 +#define RTEXT 289 +#define SCROLLBAR 290 +#define STATE3 291 +#define USERBUTTON 292 +#define BEDIT 293 +#define HEDIT 294 +#define IEDIT 295 +#define FONT 296 +#define ICON 297 +#define ANICURSOR 298 +#define ANIICON 299 +#define DLGINCLUDE 300 +#define DLGINIT 301 +#define FONTDIR 302 +#define HTML 303 +#define MANIFEST 304 +#define PLUGPLAY 305 +#define VXD 306 +#define TOOLBAR 307 +#define BUTTON 308 +#define LANGUAGE 309 +#define CHARACTERISTICS 310 +#define VERSIONK 311 +#define MENU 312 +#define MENUEX 313 +#define MENUITEM 314 +#define SEPARATOR 315 +#define POPUP 316 +#define CHECKED 317 +#define GRAYED 318 +#define HELP 319 +#define INACTIVE 320 +#define MENUBARBREAK 321 +#define MENUBREAK 322 +#define MESSAGETABLE 323 +#define RCDATA 324 +#define STRINGTABLE 325 +#define VERSIONINFO 326 +#define FILEVERSION 327 +#define PRODUCTVERSION 328 +#define FILEFLAGSMASK 329 +#define FILEFLAGS 330 +#define FILEOS 331 +#define FILETYPE 332 +#define FILESUBTYPE 333 +#define BLOCKSTRINGFILEINFO 334 +#define BLOCKVARFILEINFO 335 +#define VALUE 336 +#define BLOCK 337 +#define MOVEABLE 338 +#define FIXED 339 +#define PURE 340 +#define IMPURE 341 +#define PRELOAD 342 +#define LOADONCALL 343 +#define DISCARDABLE 344 +#define NOT 345 +#define QUOTEDUNISTRING 346 +#define QUOTEDSTRING 347 +#define STRING 348 +#define NUMBER 349 +#define SIZEDUNISTRING 350 +#define SIZEDSTRING 351 +#define IGNORED_TOKEN 352 +#define NEG 353 + + + + +/* Copy the first part of user declarations. */ +#line 1 "rcparse.y" + /* rcparse.y -- parser for Windows rc files + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007 + Free Software Foundation, Inc. + Written by Ian Lance Taylor, Cygnus Support. + Extended by Kai Tietz, Onevision. + + This file is part of GNU Binutils. + + 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, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + + +/* This is a parser for Windows rc files. It is based on the parser + by Gunther Ebert . */ + +#include "sysdep.h" +#include "bfd.h" +#include "bucomm.h" +#include "libiberty.h" +#include "windres.h" +#include "safe-ctype.h" + +/* The current language. */ + +static unsigned short language; + +/* The resource information during a sub statement. */ + +static rc_res_res_info sub_res_info; + +/* Dialog information. This is built by the nonterminals styles and + controls. */ + +static rc_dialog dialog; + +/* This is used when building a style. It is modified by the + nonterminal styleexpr. */ + +static unsigned long style; + +/* These are used when building a control. They are set before using + control_params. */ + +static rc_uint_type base_style; +static rc_uint_type default_style; +static rc_res_id class; +static rc_res_id res_text_field; +static unichar null_unichar; + +/* This is used for COMBOBOX, LISTBOX and EDITTEXT which + do not allow resource 'text' field in control definition. */ +static const rc_res_id res_null_text = { 1, {{0, &null_unichar}}}; + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 69 "rcparse.y" +{ + rc_accelerator acc; + rc_accelerator *pacc; + rc_dialog_control *dialog_control; + rc_menuitem *menuitem; + struct + { + rc_rcdata_item *first; + rc_rcdata_item *last; + } rcdata; + rc_rcdata_item *rcdata_item; + rc_fixed_versioninfo *fixver; + rc_ver_info *verinfo; + rc_ver_stringinfo *verstring; + rc_ver_varinfo *vervar; + rc_toolbar_item *toobar_item; + rc_res_id id; + rc_res_res_info res_info; + struct + { + rc_uint_type on; + rc_uint_type off; + } memflags; + struct + { + rc_uint_type val; + /* Nonzero if this number was explicitly specified as long. */ + int dword; + } i; + rc_uint_type il; + rc_uint_type is; + const char *s; + struct + { + rc_uint_type length; + const char *s; + } ss; + unichar *uni; + struct + { + rc_uint_type length; + const unichar *s; + } suni; +} +/* Line 187 of yacc.c. */ +#line 404 "rcparse.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 417 "rcparse.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 2 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 849 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 112 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 99 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 268 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 514 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 353 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 105, 100, 2, + 110, 111, 103, 101, 108, 102, 2, 104, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 109, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 99, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 98, 2, 106, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 107 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 4, 7, 10, 13, 16, 19, 22, + 25, 28, 31, 34, 37, 40, 43, 46, 49, 56, + 57, 60, 63, 68, 70, 72, 74, 78, 81, 83, + 85, 87, 89, 91, 93, 98, 103, 104, 118, 119, + 133, 134, 149, 150, 154, 155, 159, 163, 167, 171, + 175, 181, 188, 196, 205, 209, 213, 218, 222, 223, + 226, 227, 232, 233, 238, 239, 244, 245, 250, 251, + 256, 257, 261, 273, 286, 287, 292, 293, 298, 299, + 303, 304, 309, 310, 315, 322, 331, 342, 354, 355, + 360, 361, 365, 366, 371, 372, 377, 378, 383, 384, + 389, 390, 395, 396, 400, 401, 406, 407, 423, 430, + 439, 449, 452, 453, 456, 458, 460, 461, 465, 466, + 470, 471, 475, 476, 480, 485, 490, 494, 501, 502, + 505, 510, 513, 520, 521, 525, 528, 530, 532, 534, + 536, 538, 540, 547, 548, 551, 554, 558, 564, 567, + 573, 580, 588, 598, 603, 604, 607, 608, 610, 612, + 614, 616, 620, 624, 628, 629, 636, 637, 641, 646, + 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, + 673, 678, 687, 688, 692, 695, 702, 703, 710, 717, + 721, 725, 729, 733, 737, 738, 747, 755, 756, 762, + 763, 767, 769, 771, 773, 775, 778, 780, 783, 784, + 787, 791, 796, 800, 801, 804, 805, 808, 810, 812, + 814, 816, 818, 820, 822, 824, 826, 828, 831, 833, + 835, 837, 840, 842, 845, 847, 850, 854, 859, 861, + 865, 866, 868, 871, 873, 875, 879, 882, 885, 889, + 893, 897, 901, 905, 909, 913, 917, 920, 922, 924, + 928, 931, 935, 939, 943, 947, 951, 955, 959 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 113, 0, -1, -1, 113, 114, -1, 113, 120, -1, + 113, 121, -1, 113, 122, -1, 113, 162, -1, 113, + 163, -1, 113, 164, -1, 113, 165, -1, 113, 170, + -1, 113, 173, -1, 113, 178, -1, 113, 183, -1, + 113, 182, -1, 113, 185, -1, 113, 97, -1, 190, + 5, 193, 3, 115, 4, -1, -1, 115, 116, -1, + 117, 208, -1, 117, 208, 108, 118, -1, 92, -1, + 209, -1, 119, -1, 118, 108, 119, -1, 118, 119, + -1, 6, -1, 7, -1, 8, -1, 9, -1, 10, + -1, 11, -1, 190, 12, 195, 197, -1, 190, 13, + 194, 197, -1, -1, 190, 14, 195, 126, 209, 205, + 205, 205, 123, 127, 3, 128, 4, -1, -1, 190, + 15, 195, 126, 209, 205, 205, 205, 124, 127, 3, + 128, 4, -1, -1, 190, 15, 195, 126, 209, 205, + 205, 205, 205, 125, 127, 3, 128, 4, -1, -1, + 16, 109, 206, -1, -1, 127, 17, 198, -1, 127, + 18, 190, -1, 127, 19, 202, -1, 127, 16, 206, + -1, 127, 18, 198, -1, 127, 41, 206, 108, 198, + -1, 127, 41, 206, 108, 198, 205, -1, 127, 41, + 206, 108, 198, 205, 205, -1, 127, 41, 206, 108, + 198, 205, 205, 205, -1, 127, 57, 190, -1, 127, + 55, 206, -1, 127, 54, 206, 205, -1, 127, 56, + 206, -1, -1, 128, 129, -1, -1, 20, 153, 130, + 151, -1, -1, 21, 153, 131, 151, -1, -1, 22, + 153, 132, 151, -1, -1, 38, 153, 133, 151, -1, + -1, 23, 153, 134, 151, -1, -1, 24, 135, 151, + -1, 10, 153, 206, 152, 156, 205, 205, 205, 205, + 204, 155, -1, 10, 153, 206, 152, 156, 205, 205, + 205, 205, 205, 205, 155, -1, -1, 25, 153, 136, + 151, -1, -1, 26, 153, 137, 151, -1, -1, 27, + 138, 151, -1, -1, 28, 153, 139, 151, -1, -1, + 39, 153, 140, 151, -1, 42, 192, 206, 205, 205, + 155, -1, 42, 192, 206, 205, 205, 205, 205, 155, + -1, 42, 192, 206, 205, 205, 205, 205, 158, 204, + 155, -1, 42, 192, 206, 205, 205, 205, 205, 158, + 205, 205, 155, -1, -1, 40, 153, 141, 151, -1, + -1, 29, 142, 151, -1, -1, 30, 153, 143, 151, + -1, -1, 31, 153, 144, 151, -1, -1, 32, 153, + 145, 151, -1, -1, 33, 153, 146, 151, -1, -1, + 34, 153, 147, 151, -1, -1, 35, 148, 151, -1, + -1, 36, 153, 149, 151, -1, -1, 37, 192, 206, + 108, 206, 108, 206, 108, 206, 108, 206, 108, 150, + 202, 204, -1, 206, 205, 205, 205, 205, 155, -1, + 206, 205, 205, 205, 205, 160, 204, 155, -1, 206, + 205, 205, 205, 205, 160, 205, 205, 155, -1, 108, + 154, -1, -1, 154, 108, -1, 209, -1, 199, -1, + -1, 3, 174, 4, -1, -1, 108, 157, 202, -1, + -1, 108, 159, 202, -1, -1, 108, 161, 202, -1, + 190, 41, 194, 197, -1, 190, 42, 194, 197, -1, + 54, 206, 205, -1, 190, 57, 193, 3, 166, 4, + -1, -1, 166, 167, -1, 59, 198, 205, 168, -1, + 59, 60, -1, 61, 198, 168, 3, 166, 4, -1, + -1, 168, 108, 169, -1, 168, 169, -1, 62, -1, + 63, -1, 64, -1, 65, -1, 66, -1, 67, -1, + 190, 58, 193, 3, 171, 4, -1, -1, 171, 172, + -1, 59, 198, -1, 59, 198, 205, -1, 59, 198, + 205, 205, 204, -1, 59, 60, -1, 61, 198, 3, + 171, 4, -1, 61, 198, 205, 3, 171, 4, -1, + 61, 198, 205, 205, 3, 171, 4, -1, 61, 198, + 205, 205, 205, 204, 3, 171, 4, -1, 190, 68, + 195, 197, -1, -1, 175, 176, -1, -1, 177, -1, + 200, -1, 201, -1, 207, -1, 177, 108, 200, -1, + 177, 108, 201, -1, 177, 108, 207, -1, -1, 70, + 193, 3, 179, 180, 4, -1, -1, 180, 206, 198, + -1, 180, 206, 108, 198, -1, 190, -1, 48, -1, + 69, -1, 49, -1, 50, -1, 51, -1, 45, -1, + 46, -1, 43, -1, 44, -1, 190, 181, 193, 3, + 174, 4, -1, 190, 181, 193, 197, -1, 190, 52, + 193, 206, 205, 3, 184, 4, -1, -1, 184, 53, + 190, -1, 184, 60, -1, 190, 71, 186, 3, 187, + 4, -1, -1, 186, 72, 206, 205, 205, 205, -1, + 186, 73, 206, 205, 205, 205, -1, 186, 74, 206, + -1, 186, 75, 206, -1, 186, 76, 206, -1, 186, + 77, 206, -1, 186, 78, 206, -1, -1, 187, 79, + 3, 82, 3, 188, 4, 4, -1, 187, 80, 3, + 81, 198, 189, 4, -1, -1, 188, 81, 198, 108, + 198, -1, -1, 189, 205, 205, -1, 209, -1, 191, + -1, 199, -1, 93, -1, 209, 108, -1, 191, -1, + 191, 108, -1, -1, 193, 196, -1, 193, 55, 206, + -1, 193, 54, 206, 205, -1, 193, 56, 206, -1, + -1, 194, 196, -1, -1, 195, 196, -1, 83, -1, + 84, -1, 85, -1, 86, -1, 87, -1, 88, -1, + 89, -1, 92, -1, 93, -1, 199, -1, 198, 199, + -1, 91, -1, 92, -1, 96, -1, 200, 96, -1, + 95, -1, 201, 95, -1, 203, -1, 90, 203, -1, + 202, 98, 203, -1, 202, 98, 90, 203, -1, 94, + -1, 110, 206, 111, -1, -1, 205, -1, 108, 206, + -1, 207, -1, 94, -1, 110, 207, 111, -1, 106, + 207, -1, 102, 207, -1, 207, 103, 207, -1, 207, + 104, 207, -1, 207, 105, 207, -1, 207, 101, 207, + -1, 207, 102, 207, -1, 207, 100, 207, -1, 207, + 99, 207, -1, 207, 98, 207, -1, 108, 209, -1, + 210, -1, 94, -1, 110, 207, 111, -1, 106, 207, + -1, 210, 103, 207, -1, 210, 104, 207, -1, 210, + 105, 207, -1, 210, 101, 207, -1, 210, 102, 207, + -1, 210, 100, 207, -1, 210, 99, 207, -1, 210, + 98, 207, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 177, 177, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 199, 210, + 213, 234, 239, 251, 271, 281, 285, 290, 297, 301, + 306, 310, 314, 318, 327, 339, 353, 351, 378, 376, + 405, 403, 435, 438, 444, 446, 452, 456, 461, 465, + 469, 482, 497, 512, 527, 531, 535, 539, 545, 547, + 559, 558, 571, 570, 583, 582, 595, 594, 610, 609, + 622, 621, 635, 646, 656, 655, 668, 667, 680, 679, + 692, 691, 704, 703, 718, 723, 729, 735, 742, 741, + 757, 756, 769, 768, 781, 780, 792, 791, 804, 803, + 816, 815, 828, 827, 840, 839, 853, 851, 872, 883, + 894, 906, 917, 920, 924, 929, 939, 942, 952, 951, + 958, 957, 964, 963, 971, 983, 996, 1005, 1016, 1019, + 1036, 1040, 1044, 1052, 1055, 1059, 1066, 1070, 1074, 1078, + 1082, 1086, 1095, 1106, 1109, 1126, 1130, 1134, 1138, 1142, + 1146, 1150, 1154, 1164, 1177, 1177, 1189, 1193, 1200, 1208, + 1216, 1224, 1233, 1242, 1257, 1256, 1261, 1263, 1270, 1280, + 1284, 1289, 1294, 1299, 1304, 1309, 1314, 1319, 1324, 1335, + 1342, 1352, 1358, 1359, 1378, 1403, 1414, 1419, 1425, 1431, + 1436, 1441, 1446, 1451, 1466, 1469, 1473, 1481, 1484, 1492, + 1495, 1504, 1509, 1518, 1522, 1532, 1537, 1541, 1552, 1558, + 1564, 1569, 1574, 1585, 1590, 1602, 1607, 1619, 1624, 1629, + 1634, 1639, 1644, 1649, 1659, 1663, 1671, 1676, 1691, 1695, + 1704, 1708, 1720, 1724, 1746, 1750, 1754, 1758, 1765, 1769, + 1779, 1782, 1791, 1800, 1809, 1813, 1817, 1822, 1827, 1832, + 1837, 1842, 1847, 1852, 1857, 1862, 1873, 1882, 1893, 1897, + 1901, 1906, 1911, 1916, 1921, 1926, 1931, 1936, 1941 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "BEG", "END", "ACCELERATORS", "VIRTKEY", + "ASCII", "NOINVERT", "SHIFT", "CONTROL", "ALT", "BITMAP", "CURSOR", + "DIALOG", "DIALOGEX", "EXSTYLE", "CAPTION", "CLASS", "STYLE", + "AUTO3STATE", "AUTOCHECKBOX", "AUTORADIOBUTTON", "CHECKBOX", "COMBOBOX", + "CTEXT", "DEFPUSHBUTTON", "EDITTEXT", "GROUPBOX", "LISTBOX", "LTEXT", + "PUSHBOX", "PUSHBUTTON", "RADIOBUTTON", "RTEXT", "SCROLLBAR", "STATE3", + "USERBUTTON", "BEDIT", "HEDIT", "IEDIT", "FONT", "ICON", "ANICURSOR", + "ANIICON", "DLGINCLUDE", "DLGINIT", "FONTDIR", "HTML", "MANIFEST", + "PLUGPLAY", "VXD", "TOOLBAR", "BUTTON", "LANGUAGE", "CHARACTERISTICS", + "VERSIONK", "MENU", "MENUEX", "MENUITEM", "SEPARATOR", "POPUP", + "CHECKED", "GRAYED", "HELP", "INACTIVE", "MENUBARBREAK", "MENUBREAK", + "MESSAGETABLE", "RCDATA", "STRINGTABLE", "VERSIONINFO", "FILEVERSION", + "PRODUCTVERSION", "FILEFLAGSMASK", "FILEFLAGS", "FILEOS", "FILETYPE", + "FILESUBTYPE", "BLOCKSTRINGFILEINFO", "BLOCKVARFILEINFO", "VALUE", + "BLOCK", "MOVEABLE", "FIXED", "PURE", "IMPURE", "PRELOAD", "LOADONCALL", + "DISCARDABLE", "NOT", "QUOTEDUNISTRING", "QUOTEDSTRING", "STRING", + "NUMBER", "SIZEDUNISTRING", "SIZEDSTRING", "IGNORED_TOKEN", "'|'", "'^'", + "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "NEG", "','", "'='", + "'('", "')'", "$accept", "input", "accelerator", "acc_entries", + "acc_entry", "acc_event", "acc_options", "acc_option", "bitmap", + "cursor", "dialog", "@1", "@2", "@3", "exstyle", "styles", "controls", + "control", "@4", "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", + "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", + "@23", "@24", "control_params", "cresid", "optresidc", "resid", + "opt_control_data", "control_styleexpr", "@25", "icon_styleexpr", "@26", + "control_params_styleexpr", "@27", "font", "icon", "language", "menu", + "menuitems", "menuitem", "menuitem_flags", "menuitem_flag", "menuex", + "menuexitems", "menuexitem", "messagetable", "optrcdata_data", "@28", + "optrcdata_data_int", "rcdata_data", "stringtable", "@29", "string_data", + "rcdata_id", "user", "toolbar", "toolbar_data", "versioninfo", + "fixedverinfo", "verblocks", "vervals", "vertrans", "id", "resname", + "resref", "suboptions", "memflags_move_discard", "memflags_move", + "memflag", "file_name", "res_unicode_string_concat", + "res_unicode_string", "sizedstring", "sizedunistring", "styleexpr", + "parennumber", "optcnumexpr", "cnumexpr", "numexpr", "sizednumexpr", + "cposnumexpr", "posnumexpr", "sizedposnumexpr", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 124, 94, + 38, 43, 45, 42, 47, 37, 126, 353, 44, 61, + 40, 41 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 112, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 114, 115, + 115, 116, 116, 117, 117, 118, 118, 118, 119, 119, + 119, 119, 119, 119, 120, 121, 123, 122, 124, 122, + 125, 122, 126, 126, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, + 130, 129, 131, 129, 132, 129, 133, 129, 134, 129, + 135, 129, 129, 129, 136, 129, 137, 129, 138, 129, + 139, 129, 140, 129, 129, 129, 129, 129, 141, 129, + 142, 129, 143, 129, 144, 129, 145, 129, 146, 129, + 147, 129, 148, 129, 149, 129, 150, 129, 151, 151, + 151, 152, 153, 153, 154, 154, 155, 155, 157, 156, + 159, 158, 161, 160, 162, 163, 164, 165, 166, 166, + 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, + 169, 169, 170, 171, 171, 172, 172, 172, 172, 172, + 172, 172, 172, 173, 175, 174, 176, 176, 177, 177, + 177, 177, 177, 177, 179, 178, 180, 180, 180, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, + 182, 183, 184, 184, 184, 185, 186, 186, 186, 186, + 186, 186, 186, 186, 187, 187, 187, 188, 188, 189, + 189, 190, 190, 191, 191, 192, 192, 192, 193, 193, + 193, 193, 193, 194, 194, 195, 195, 196, 196, 196, + 196, 196, 196, 196, 197, 197, 198, 198, 199, 199, + 200, 200, 201, 201, 202, 202, 202, 202, 203, 203, + 204, 204, 205, 206, 207, 207, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 208, 209, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 6, 0, + 2, 2, 4, 1, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 4, 4, 0, 13, 0, 13, + 0, 14, 0, 3, 0, 3, 3, 3, 3, 3, + 5, 6, 7, 8, 3, 3, 4, 3, 0, 2, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 3, 11, 12, 0, 4, 0, 4, 0, 3, + 0, 4, 0, 4, 6, 8, 10, 11, 0, 4, + 0, 3, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 3, 0, 4, 0, 15, 6, 8, + 9, 2, 0, 2, 1, 1, 0, 3, 0, 3, + 0, 3, 0, 3, 4, 4, 3, 6, 0, 2, + 4, 2, 6, 0, 3, 2, 1, 1, 1, 1, + 1, 1, 6, 0, 2, 2, 3, 5, 2, 5, + 6, 7, 9, 4, 0, 2, 0, 1, 1, 1, + 1, 3, 3, 3, 0, 6, 0, 3, 4, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, + 4, 8, 0, 3, 2, 6, 0, 6, 6, 3, + 3, 3, 3, 3, 0, 8, 7, 0, 5, 0, + 3, 1, 1, 1, 1, 2, 1, 2, 0, 2, + 3, 4, 3, 0, 2, 0, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 2, 1, 2, 1, 2, 3, 4, 1, 3, + 0, 1, 2, 1, 1, 3, 2, 2, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 1, 1, 3, + 2, 3, 3, 3, 3, 3, 3, 3, 3 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 2, 0, 1, 0, 208, 228, 229, 204, 258, 17, + 0, 0, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 15, 14, 16, 0, 202, 203, 201, + 257, 244, 0, 0, 0, 0, 243, 0, 260, 0, + 208, 215, 213, 215, 215, 213, 213, 177, 178, 175, + 176, 170, 172, 173, 174, 208, 208, 208, 215, 171, + 186, 208, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 247, 246, 0, 0, 126, 0, 0, 0, 0, + 0, 0, 0, 0, 164, 0, 0, 0, 217, 218, + 219, 220, 221, 222, 223, 209, 259, 0, 0, 0, + 42, 42, 0, 0, 0, 0, 0, 0, 0, 0, + 268, 267, 266, 264, 265, 261, 262, 263, 245, 242, + 255, 254, 253, 251, 252, 248, 249, 250, 166, 0, + 210, 212, 19, 224, 225, 216, 34, 214, 35, 0, + 0, 0, 124, 125, 0, 128, 143, 153, 194, 0, + 0, 0, 0, 0, 0, 0, 154, 180, 0, 211, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 189, 190, 191, 192, 193, 0, 156, 165, 0, 18, + 23, 20, 0, 24, 43, 0, 0, 182, 127, 0, + 0, 129, 142, 0, 0, 144, 185, 0, 0, 0, + 0, 179, 232, 230, 155, 157, 158, 159, 160, 0, + 167, 226, 0, 21, 0, 0, 0, 131, 0, 133, + 148, 145, 0, 0, 0, 0, 0, 0, 231, 233, + 168, 227, 256, 0, 36, 38, 181, 0, 184, 133, + 0, 146, 143, 0, 0, 0, 187, 188, 161, 162, + 163, 28, 29, 30, 31, 32, 33, 22, 25, 44, + 44, 40, 183, 130, 128, 136, 137, 138, 139, 140, + 141, 0, 135, 240, 0, 143, 0, 197, 199, 0, + 27, 0, 0, 44, 0, 134, 147, 241, 149, 0, + 143, 240, 0, 0, 26, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 58, 0, 132, 150, 0, + 0, 0, 0, 196, 0, 0, 48, 45, 46, 49, + 203, 0, 238, 0, 47, 234, 0, 0, 55, 57, + 54, 0, 58, 151, 143, 195, 0, 200, 37, 112, + 112, 112, 112, 112, 70, 112, 112, 78, 112, 90, + 112, 112, 112, 112, 112, 102, 112, 0, 112, 112, + 112, 0, 59, 235, 0, 0, 0, 56, 39, 0, + 0, 0, 0, 0, 115, 114, 60, 62, 64, 68, + 0, 74, 76, 0, 80, 0, 92, 94, 96, 98, + 100, 0, 104, 206, 0, 0, 66, 82, 88, 0, + 239, 0, 236, 50, 41, 152, 198, 0, 113, 0, + 0, 0, 0, 71, 0, 0, 0, 79, 0, 91, + 0, 0, 0, 0, 0, 103, 0, 207, 0, 205, + 0, 0, 0, 0, 237, 51, 0, 0, 61, 63, + 65, 69, 0, 75, 77, 81, 93, 95, 97, 99, + 101, 105, 0, 67, 83, 89, 0, 52, 111, 118, + 0, 0, 0, 116, 53, 0, 0, 0, 0, 154, + 84, 0, 119, 0, 116, 0, 0, 116, 0, 122, + 108, 240, 0, 117, 120, 85, 240, 240, 0, 116, + 241, 0, 0, 116, 241, 116, 241, 123, 109, 116, + 0, 121, 86, 116, 72, 116, 110, 0, 87, 73, + 106, 0, 240, 107 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 12, 160, 181, 182, 257, 258, 13, 14, + 15, 259, 260, 283, 140, 281, 315, 362, 409, 410, + 411, 430, 412, 380, 415, 416, 383, 418, 431, 432, + 385, 420, 421, 422, 423, 424, 391, 426, 511, 413, + 437, 372, 373, 470, 460, 465, 486, 492, 481, 488, + 16, 17, 18, 19, 165, 191, 240, 272, 20, 166, + 195, 21, 175, 176, 204, 205, 22, 128, 158, 61, + 23, 24, 216, 25, 108, 167, 292, 293, 26, 27, + 394, 37, 99, 98, 95, 136, 210, 374, 206, 207, + 324, 325, 286, 287, 414, 36, 213, 375, 30 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -443 +static const yytype_int16 yypact[] = +{ + -443, 114, -443, 326, -443, -443, -443, -443, -443, -443, + 326, 326, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, 461, -443, -443, -443, + 603, -443, 326, 326, 326, -90, 640, 249, -443, 511, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, 326, 326, 326, 326, 326, 326, 326, + 326, -443, -443, 674, 326, -443, 326, 326, 326, 326, + 326, 326, 326, 326, -443, 326, 326, 326, -443, -443, + -443, -443, -443, -443, -443, -443, -443, 287, 548, 548, + 314, 314, 548, 548, 489, 402, 439, 548, 280, 226, + 732, 456, 379, -44, -44, -443, -443, -443, -443, -443, + 732, 456, 379, -44, -44, -443, -443, -443, -443, -90, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -67, + 165, 165, -443, -443, -90, -443, -443, -443, -443, 326, + 326, 326, 326, 326, 326, 326, -443, -443, 2, -443, + 13, 326, -90, -90, 50, 118, 157, 52, -90, -90, + -443, -443, -443, -443, -443, 51, 440, -443, 231, -443, + -443, -443, -38, -443, -443, -90, -90, -443, -443, 42, + -52, -443, -443, 80, -52, -443, -443, 83, 94, -90, + -90, -443, -443, -443, -443, -8, 15, 33, 640, -52, + -52, -443, 165, 27, -90, -90, 166, -443, 271, -52, + -443, 271, 7, 59, 63, -90, -90, 440, -443, -443, + -52, -443, -443, 832, -443, -90, -443, 255, -443, -443, + 1, -90, -443, 5, 153, -52, -443, -443, 15, 33, + 640, -443, -443, -443, -443, -443, -443, 19, -443, -443, + -443, -443, -443, 359, -443, -443, -443, -443, -443, -443, + -443, 782, -443, -90, 162, -443, 8, -443, -52, 832, + -443, 546, 563, -443, 171, -443, -443, -443, -443, 186, + -443, -90, 29, -2, -443, -443, 326, -52, 255, -56, + 326, 326, 326, 326, 255, -443, 589, -443, -443, 190, + 154, 158, -52, -443, -90, 653, -443, -52, -443, -52, + 62, -63, -443, 326, 69, -443, 68, -90, -443, -443, + -443, 690, -443, -443, -443, -443, 298, -443, -443, 152, + 152, 152, 152, 152, -443, 152, 152, -443, 152, -443, + 152, 152, 152, 152, 152, -443, 152, 255, 152, 152, + 152, 255, -443, -443, 67, 75, -52, -443, -443, 727, + 194, -52, 326, 72, -443, -443, -443, -443, -443, -443, + 326, -443, -443, 326, -443, 326, -443, -443, -443, -443, + -443, 326, -443, 74, 326, 78, -443, -443, -443, 326, + -443, -63, -443, 271, -443, -443, -52, 85, -443, 326, + 326, 326, 326, -443, -90, 326, 326, -443, 326, -443, + 326, 326, 326, 326, 326, -443, 326, -443, 96, -443, + 326, 326, 326, -90, -443, -90, 152, 102, -443, -443, + -443, -443, -90, -443, -443, -443, -443, -443, -443, -443, + -443, -443, 326, -443, -443, -443, -90, -90, -443, -443, + -90, -90, 105, 9, -443, -56, -90, -90, 326, -443, + -443, -90, 69, -90, 12, 106, 187, 16, -90, -443, + -443, -90, 326, -443, -443, -443, -90, -90, -56, 198, + -90, 119, -56, 198, -90, 198, -90, 69, -443, 198, + 326, 69, -443, 198, -443, 198, -443, 123, -443, -443, + -443, -56, -46, -443 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -443, -443, -443, -443, -443, -443, -443, -244, -443, -443, + -443, -443, -443, -443, 121, -246, -300, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, 238, + -443, 460, -197, 294, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -22, -443, 22, -17, -443, -239, + -443, -443, -206, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -25, -341, + -97, 230, 93, 14, 723, 487, -64, 47, 45, 49, + -442, -280, -284, -26, -3, 11, -443, 23, -443 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -227 +static const yytype_int16 yytable[] = +{ + 35, 62, 313, 274, 264, 331, 177, 310, 275, 75, + 242, 290, 469, 280, 282, 469, 393, 179, 74, 469, + 393, 38, 39, 472, 29, 251, 252, 253, 254, 255, + 256, 322, 369, 311, 321, 294, 289, 306, 322, 5, + 6, 363, 161, 71, 72, 73, 497, 323, 28, 29, + 501, 309, 365, 187, 323, 201, 196, 100, 101, 81, + 82, 83, 74, 265, 266, 267, 268, 269, 270, 512, + 212, 119, 107, 28, 110, 111, 112, 113, 114, 115, + 116, 117, 129, 130, 131, 402, 223, 120, 121, 122, + 123, 124, 125, 126, 127, 370, 31, 224, 5, 6, + 227, 144, 217, 159, 32, 180, 74, 8, 33, 271, + 312, 228, 34, 74, 2, 74, 74, 74, 164, 10, + 479, 434, 188, 11, 484, 218, 219, 279, 229, 221, + 222, 197, 198, 5, 6, 233, 185, 186, 102, 103, + 220, 244, 199, 200, 245, 230, 168, 169, 170, 171, + 172, 173, 174, -226, -226, 178, 277, 334, 184, 214, + 215, 192, 335, 162, 163, 401, 288, 365, 3, 322, + 236, 5, 6, 225, 226, 307, 366, 189, 400, 190, + 408, 278, 427, 183, 4, 323, 429, 208, 234, 235, + 308, 483, 239, 436, 333, 241, 243, 489, 405, 246, + 247, 469, 493, 495, 452, 5, 6, 7, 8, 261, + 459, 9, 262, 468, 482, 273, 193, 276, 194, 237, + 10, 193, 141, 194, 11, 211, 238, 500, 513, 156, + 189, 510, 190, 317, 319, 232, 211, 211, 250, 458, + 211, 211, 284, 5, 6, 193, 8, 194, 336, 193, + 291, 194, 84, 193, 285, 194, 211, 231, 10, 8, + 29, 263, 11, 476, 399, 231, 231, 314, 231, 231, + 97, 10, 248, 318, 0, 11, 249, 231, 0, 330, + 85, 86, 87, 148, 28, 104, 105, 106, 337, 0, + 132, 109, 211, 316, 0, 0, 0, 326, 327, 328, + 329, 367, 403, 85, 86, 87, 0, 406, 0, 88, + 89, 90, 91, 92, 93, 94, 0, 0, 133, 134, + 364, 29, 5, 6, 0, 231, 0, 29, 0, 0, + 139, 0, 88, 89, 90, 91, 92, 93, 94, 209, + 0, 85, 86, 87, 211, 320, 5, 6, 7, 8, + 0, 28, 149, 150, 151, 152, 153, 154, 155, 211, + 0, 10, 5, 6, 231, 11, 231, 0, 0, 407, + 88, 89, 90, 91, 92, 93, 94, 435, 0, 74, + 395, 0, 0, 231, 395, 0, 0, 0, 442, 5, + 6, 428, 0, 0, 0, 0, 433, 88, 89, 90, + 91, 92, 93, 94, 28, 145, 371, 456, 28, 457, + 0, 0, 0, 211, 0, 0, 461, 0, 211, 0, + 31, 265, 266, 267, 268, 269, 270, 0, 32, 0, + 463, 464, 33, 0, 466, 467, 34, 471, 0, 0, + 473, 474, 146, 0, 0, 477, 0, 478, 0, 462, + 231, 0, 487, 231, 0, 490, 85, 86, 87, 0, + 494, 496, 0, 0, 499, 475, 40, 271, 503, 0, + 505, 0, 0, 41, 42, 43, 44, 0, 0, 491, + 79, 80, 81, 82, 83, 88, 89, 90, 91, 92, + 93, 94, 0, 85, 86, 87, 0, 507, 0, 0, + 0, 0, 45, 46, 47, 48, 49, 50, 0, 51, + 52, 53, 54, 55, 0, 0, 0, 0, 56, 57, + 0, 0, 88, 89, 90, 91, 92, 93, 94, 58, + 59, 0, 60, 0, 31, 202, 203, 0, 0, 0, + 0, 0, 32, 85, 86, 87, 33, 0, 0, 295, + 34, 0, 5, 6, 7, 8, 78, 79, 80, 81, + 82, 83, 296, 297, 298, 299, 305, 10, 0, 0, + 0, 11, 88, 89, 90, 91, 92, 93, 94, 296, + 297, 298, 299, 31, 0, 0, 138, 300, 0, 142, + 143, 32, 332, 0, 147, 33, 157, 0, 0, 34, + 301, 302, 303, 304, 300, 296, 297, 298, 299, 76, + 77, 78, 79, 80, 81, 82, 83, 301, 302, 303, + 304, 417, 96, 419, 0, 0, 0, 0, 0, 425, + 300, 88, 89, 90, 91, 92, 93, 94, 0, 0, + 133, 134, 0, 301, 302, 303, 304, 438, 439, 440, + 441, 0, 0, 443, 444, 0, 445, 338, 446, 447, + 448, 449, 450, 339, 451, 0, 0, 0, 453, 454, + 455, 0, 0, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 368, 361, 0, 0, 0, 0, + 339, 63, 64, 65, 66, 67, 68, 69, 70, 0, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 404, 361, 0, 0, 0, 0, 339, 76, 77, + 78, 79, 80, 81, 82, 83, 0, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 480, 361, + 0, 485, 76, 77, 78, 79, 80, 81, 82, 83, + 0, 0, 0, 498, 0, 118, 0, 502, 0, 504, + 0, 0, 0, 506, 0, 0, 0, 508, 0, 509, + 376, 377, 378, 379, 0, 381, 382, 0, 384, 0, + 386, 387, 388, 389, 390, 0, 392, 0, 396, 397, + 398, 135, 137, 135, 135, 137, 137, 0, 0, 0, + 135, 77, 78, 79, 80, 81, 82, 83, 251, 252, + 253, 254, 255, 256, 265, 266, 267, 268, 269, 270 +}; + +static const yytype_int16 yycheck[] = +{ + 3, 26, 4, 242, 3, 305, 4, 291, 3, 35, + 3, 3, 3, 257, 260, 3, 357, 4, 108, 3, + 361, 10, 11, 465, 1, 6, 7, 8, 9, 10, + 11, 94, 332, 4, 90, 279, 275, 283, 94, 91, + 92, 321, 109, 32, 33, 34, 488, 110, 1, 26, + 492, 290, 98, 3, 110, 4, 4, 43, 44, 103, + 104, 105, 108, 62, 63, 64, 65, 66, 67, 511, + 108, 74, 58, 26, 63, 64, 65, 66, 67, 68, + 69, 70, 85, 86, 87, 365, 3, 76, 77, 78, + 79, 80, 81, 82, 83, 334, 94, 3, 91, 92, + 108, 104, 60, 129, 102, 92, 108, 94, 106, 108, + 81, 96, 110, 108, 0, 108, 108, 108, 144, 106, + 108, 401, 4, 110, 108, 189, 190, 108, 95, 193, + 194, 79, 80, 91, 92, 108, 162, 163, 45, 46, + 60, 82, 168, 169, 81, 209, 149, 150, 151, 152, + 153, 154, 155, 91, 92, 158, 3, 3, 161, 185, + 186, 4, 4, 140, 141, 90, 4, 98, 54, 94, + 4, 91, 92, 199, 200, 4, 108, 59, 111, 61, + 108, 245, 108, 160, 70, 110, 108, 176, 214, 215, + 4, 4, 218, 108, 4, 221, 222, 481, 4, 225, + 226, 3, 486, 487, 108, 91, 92, 93, 94, 235, + 108, 97, 237, 108, 108, 241, 59, 243, 61, 53, + 106, 59, 101, 61, 110, 178, 60, 108, 512, 3, + 59, 108, 61, 297, 298, 212, 189, 190, 227, 436, + 193, 194, 264, 91, 92, 59, 94, 61, 312, 59, + 276, 61, 3, 59, 271, 61, 209, 210, 106, 94, + 237, 239, 110, 469, 361, 218, 219, 293, 221, 222, + 40, 106, 227, 298, -1, 110, 227, 230, -1, 304, + 54, 55, 56, 3, 237, 55, 56, 57, 314, -1, + 3, 61, 245, 296, -1, -1, -1, 300, 301, 302, + 303, 327, 366, 54, 55, 56, -1, 371, -1, 83, + 84, 85, 86, 87, 88, 89, -1, -1, 92, 93, + 323, 298, 91, 92, -1, 278, -1, 304, -1, -1, + 16, -1, 83, 84, 85, 86, 87, 88, 89, 108, + -1, 54, 55, 56, 297, 298, 91, 92, 93, 94, + -1, 304, 72, 73, 74, 75, 76, 77, 78, 312, + -1, 106, 91, 92, 317, 110, 319, -1, -1, 372, + 83, 84, 85, 86, 87, 88, 89, 403, -1, 108, + 357, -1, -1, 336, 361, -1, -1, -1, 414, 91, + 92, 394, -1, -1, -1, -1, 399, 83, 84, 85, + 86, 87, 88, 89, 357, 3, 108, 433, 361, 435, + -1, -1, -1, 366, -1, -1, 442, -1, 371, -1, + 94, 62, 63, 64, 65, 66, 67, -1, 102, -1, + 456, 457, 106, -1, 460, 461, 110, 463, -1, -1, + 466, 467, 3, -1, -1, 471, -1, 473, -1, 452, + 403, -1, 478, 406, -1, 481, 54, 55, 56, -1, + 486, 487, -1, -1, 490, 468, 5, 108, 494, -1, + 496, -1, -1, 12, 13, 14, 15, -1, -1, 482, + 101, 102, 103, 104, 105, 83, 84, 85, 86, 87, + 88, 89, -1, 54, 55, 56, -1, 500, -1, -1, + -1, -1, 41, 42, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, -1, -1, -1, 57, 58, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 68, + 69, -1, 71, -1, 94, 95, 96, -1, -1, -1, + -1, -1, 102, 54, 55, 56, 106, -1, -1, 3, + 110, -1, 91, 92, 93, 94, 100, 101, 102, 103, + 104, 105, 16, 17, 18, 19, 3, 106, -1, -1, + -1, 110, 83, 84, 85, 86, 87, 88, 89, 16, + 17, 18, 19, 94, -1, -1, 99, 41, -1, 102, + 103, 102, 3, -1, 107, 106, 109, -1, -1, 110, + 54, 55, 56, 57, 41, 16, 17, 18, 19, 98, + 99, 100, 101, 102, 103, 104, 105, 54, 55, 56, + 57, 383, 111, 385, -1, -1, -1, -1, -1, 391, + 41, 83, 84, 85, 86, 87, 88, 89, -1, -1, + 92, 93, -1, 54, 55, 56, 57, 409, 410, 411, + 412, -1, -1, 415, 416, -1, 418, 4, 420, 421, + 422, 423, 424, 10, 426, -1, -1, -1, 430, 431, + 432, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 4, 42, -1, -1, -1, -1, + 10, 98, 99, 100, 101, 102, 103, 104, 105, -1, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 4, 42, -1, -1, -1, -1, 10, 98, 99, + 100, 101, 102, 103, 104, 105, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 474, 42, + -1, 477, 98, 99, 100, 101, 102, 103, 104, 105, + -1, -1, -1, 489, -1, 111, -1, 493, -1, 495, + -1, -1, -1, 499, -1, -1, -1, 503, -1, 505, + 340, 341, 342, 343, -1, 345, 346, -1, 348, -1, + 350, 351, 352, 353, 354, -1, 356, -1, 358, 359, + 360, 98, 99, 100, 101, 102, 103, -1, -1, -1, + 107, 99, 100, 101, 102, 103, 104, 105, 6, 7, + 8, 9, 10, 11, 62, 63, 64, 65, 66, 67 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 113, 0, 54, 70, 91, 92, 93, 94, 97, + 106, 110, 114, 120, 121, 122, 162, 163, 164, 165, + 170, 173, 178, 182, 183, 185, 190, 191, 199, 209, + 210, 94, 102, 106, 110, 206, 207, 193, 207, 207, + 5, 12, 13, 14, 15, 41, 42, 43, 44, 45, + 46, 48, 49, 50, 51, 52, 57, 58, 68, 69, + 71, 181, 190, 98, 99, 100, 101, 102, 103, 104, + 105, 207, 207, 207, 108, 205, 98, 99, 100, 101, + 102, 103, 104, 105, 3, 54, 55, 56, 83, 84, + 85, 86, 87, 88, 89, 196, 111, 193, 195, 194, + 195, 195, 194, 194, 193, 193, 193, 195, 186, 193, + 207, 207, 207, 207, 207, 207, 207, 207, 111, 206, + 207, 207, 207, 207, 207, 207, 207, 207, 179, 206, + 206, 206, 3, 92, 93, 196, 197, 196, 197, 16, + 126, 126, 197, 197, 206, 3, 3, 197, 3, 72, + 73, 74, 75, 76, 77, 78, 3, 197, 180, 205, + 115, 109, 209, 209, 205, 166, 171, 187, 206, 206, + 206, 206, 206, 206, 206, 174, 175, 4, 206, 4, + 92, 116, 117, 209, 206, 205, 205, 3, 4, 59, + 61, 167, 4, 59, 61, 172, 4, 79, 80, 205, + 205, 4, 95, 96, 176, 177, 200, 201, 207, 108, + 198, 199, 108, 208, 205, 205, 184, 60, 198, 198, + 60, 198, 198, 3, 3, 205, 205, 108, 96, 95, + 198, 199, 209, 108, 205, 205, 4, 53, 60, 205, + 168, 205, 3, 205, 82, 81, 205, 205, 200, 201, + 207, 6, 7, 8, 9, 10, 11, 118, 119, 123, + 124, 205, 190, 168, 3, 62, 63, 64, 65, 66, + 67, 108, 169, 205, 171, 3, 205, 3, 198, 108, + 119, 127, 127, 125, 166, 169, 204, 205, 4, 171, + 3, 205, 188, 189, 119, 3, 16, 17, 18, 19, + 41, 54, 55, 56, 57, 3, 127, 4, 4, 171, + 204, 4, 81, 4, 205, 128, 206, 198, 190, 198, + 199, 90, 94, 110, 202, 203, 206, 206, 206, 206, + 190, 128, 3, 4, 3, 4, 198, 205, 4, 10, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 42, 129, 203, 206, 98, 108, 205, 4, 128, + 171, 108, 153, 154, 199, 209, 153, 153, 153, 153, + 135, 153, 153, 138, 153, 142, 153, 153, 153, 153, + 153, 148, 153, 191, 192, 209, 153, 153, 153, 192, + 111, 90, 203, 198, 4, 4, 198, 206, 108, 130, + 131, 132, 134, 151, 206, 136, 137, 151, 139, 151, + 143, 144, 145, 146, 147, 151, 149, 108, 206, 108, + 133, 140, 141, 206, 203, 205, 108, 152, 151, 151, + 151, 151, 205, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 108, 151, 151, 151, 205, 205, 154, 108, + 156, 205, 206, 205, 205, 157, 205, 205, 108, 3, + 155, 205, 202, 205, 205, 206, 174, 205, 205, 108, + 155, 160, 108, 4, 108, 155, 158, 205, 161, 204, + 205, 206, 159, 204, 205, 204, 205, 202, 155, 205, + 108, 202, 155, 205, 155, 205, 155, 206, 155, 155, + 108, 150, 202, 204 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 18: +#line 200 "rcparse.y" + { + define_accelerator ((yyvsp[(1) - (6)].id), &(yyvsp[(3) - (6)].res_info), (yyvsp[(5) - (6)].pacc)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 19: +#line 210 "rcparse.y" + { + (yyval.pacc) = NULL; + } + break; + + case 20: +#line 214 "rcparse.y" + { + rc_accelerator *a; + + a = (rc_accelerator *) res_alloc (sizeof *a); + *a = (yyvsp[(2) - (2)].acc); + if ((yyvsp[(1) - (2)].pacc) == NULL) + (yyval.pacc) = a; + else + { + rc_accelerator **pp; + + for (pp = &(yyvsp[(1) - (2)].pacc)->next; *pp != NULL; pp = &(*pp)->next) + ; + *pp = a; + (yyval.pacc) = (yyvsp[(1) - (2)].pacc); + } + } + break; + + case 21: +#line 235 "rcparse.y" + { + (yyval.acc) = (yyvsp[(1) - (2)].acc); + (yyval.acc).id = (yyvsp[(2) - (2)].il); + } + break; + + case 22: +#line 240 "rcparse.y" + { + (yyval.acc) = (yyvsp[(1) - (4)].acc); + (yyval.acc).id = (yyvsp[(2) - (4)].il); + (yyval.acc).flags |= (yyvsp[(4) - (4)].is); + if (((yyval.acc).flags & ACC_VIRTKEY) == 0 + && ((yyval.acc).flags & (ACC_SHIFT | ACC_CONTROL)) != 0) + rcparse_warning (_("inappropriate modifiers for non-VIRTKEY")); + } + break; + + case 23: +#line 252 "rcparse.y" + { + const char *s = (yyvsp[(1) - (1)].s); + char ch; + + (yyval.acc).next = NULL; + (yyval.acc).id = 0; + ch = *s; + if (ch != '^') + (yyval.acc).flags = 0; + else + { + (yyval.acc).flags = ACC_CONTROL | ACC_VIRTKEY; + ++s; + ch = TOUPPER (s[0]); + } + (yyval.acc).key = ch; + if (s[1] != '\0') + rcparse_warning (_("accelerator should only be one character")); + } + break; + + case 24: +#line 272 "rcparse.y" + { + (yyval.acc).next = NULL; + (yyval.acc).flags = 0; + (yyval.acc).id = 0; + (yyval.acc).key = (yyvsp[(1) - (1)].il); + } + break; + + case 25: +#line 282 "rcparse.y" + { + (yyval.is) = (yyvsp[(1) - (1)].is); + } + break; + + case 26: +#line 286 "rcparse.y" + { + (yyval.is) = (yyvsp[(1) - (3)].is) | (yyvsp[(3) - (3)].is); + } + break; + + case 27: +#line 291 "rcparse.y" + { + (yyval.is) = (yyvsp[(1) - (2)].is) | (yyvsp[(2) - (2)].is); + } + break; + + case 28: +#line 298 "rcparse.y" + { + (yyval.is) = ACC_VIRTKEY; + } + break; + + case 29: +#line 302 "rcparse.y" + { + /* This is just the absence of VIRTKEY. */ + (yyval.is) = 0; + } + break; + + case 30: +#line 307 "rcparse.y" + { + (yyval.is) = ACC_NOINVERT; + } + break; + + case 31: +#line 311 "rcparse.y" + { + (yyval.is) = ACC_SHIFT; + } + break; + + case 32: +#line 315 "rcparse.y" + { + (yyval.is) = ACC_CONTROL; + } + break; + + case 33: +#line 319 "rcparse.y" + { + (yyval.is) = ACC_ALT; + } + break; + + case 34: +#line 328 "rcparse.y" + { + define_bitmap ((yyvsp[(1) - (4)].id), &(yyvsp[(3) - (4)].res_info), (yyvsp[(4) - (4)].s)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 35: +#line 340 "rcparse.y" + { + define_cursor ((yyvsp[(1) - (4)].id), &(yyvsp[(3) - (4)].res_info), (yyvsp[(4) - (4)].s)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 36: +#line 353 "rcparse.y" + { + memset (&dialog, 0, sizeof dialog); + dialog.x = (yyvsp[(5) - (8)].il); + dialog.y = (yyvsp[(6) - (8)].il); + dialog.width = (yyvsp[(7) - (8)].il); + dialog.height = (yyvsp[(8) - (8)].il); + dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; + dialog.exstyle = (yyvsp[(4) - (8)].il); + dialog.menu.named = 1; + dialog.class.named = 1; + dialog.font = NULL; + dialog.ex = NULL; + dialog.controls = NULL; + sub_res_info = (yyvsp[(3) - (8)].res_info); + style = 0; + } + break; + + case 37: +#line 370 "rcparse.y" + { + define_dialog ((yyvsp[(1) - (13)].id), &sub_res_info, &dialog); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 38: +#line 378 "rcparse.y" + { + memset (&dialog, 0, sizeof dialog); + dialog.x = (yyvsp[(5) - (8)].il); + dialog.y = (yyvsp[(6) - (8)].il); + dialog.width = (yyvsp[(7) - (8)].il); + dialog.height = (yyvsp[(8) - (8)].il); + dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; + dialog.exstyle = (yyvsp[(4) - (8)].il); + dialog.menu.named = 1; + dialog.class.named = 1; + dialog.font = NULL; + dialog.ex = ((rc_dialog_ex *) + res_alloc (sizeof (rc_dialog_ex))); + memset (dialog.ex, 0, sizeof (rc_dialog_ex)); + dialog.controls = NULL; + sub_res_info = (yyvsp[(3) - (8)].res_info); + style = 0; + } + break; + + case 39: +#line 397 "rcparse.y" + { + define_dialog ((yyvsp[(1) - (13)].id), &sub_res_info, &dialog); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 40: +#line 405 "rcparse.y" + { + memset (&dialog, 0, sizeof dialog); + dialog.x = (yyvsp[(5) - (9)].il); + dialog.y = (yyvsp[(6) - (9)].il); + dialog.width = (yyvsp[(7) - (9)].il); + dialog.height = (yyvsp[(8) - (9)].il); + dialog.style = WS_POPUP | WS_BORDER | WS_SYSMENU; + dialog.exstyle = (yyvsp[(4) - (9)].il); + dialog.menu.named = 1; + dialog.class.named = 1; + dialog.font = NULL; + dialog.ex = ((rc_dialog_ex *) + res_alloc (sizeof (rc_dialog_ex))); + memset (dialog.ex, 0, sizeof (rc_dialog_ex)); + dialog.ex->help = (yyvsp[(9) - (9)].il); + dialog.controls = NULL; + sub_res_info = (yyvsp[(3) - (9)].res_info); + style = 0; + } + break; + + case 41: +#line 425 "rcparse.y" + { + define_dialog ((yyvsp[(1) - (14)].id), &sub_res_info, &dialog); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 42: +#line 435 "rcparse.y" + { + (yyval.il) = 0; + } + break; + + case 43: +#line 439 "rcparse.y" + { + (yyval.il) = (yyvsp[(3) - (3)].il); + } + break; + + case 45: +#line 447 "rcparse.y" + { + dialog.style |= WS_CAPTION; + style |= WS_CAPTION; + dialog.caption = (yyvsp[(3) - (3)].uni); + } + break; + + case 46: +#line 453 "rcparse.y" + { + dialog.class = (yyvsp[(3) - (3)].id); + } + break; + + case 47: +#line 458 "rcparse.y" + { + dialog.style = style; + } + break; + + case 48: +#line 462 "rcparse.y" + { + dialog.exstyle = (yyvsp[(3) - (3)].il); + } + break; + + case 49: +#line 466 "rcparse.y" + { + res_unistring_to_id (& dialog.class, (yyvsp[(3) - (3)].uni)); + } + break; + + case 50: +#line 470 "rcparse.y" + { + dialog.style |= DS_SETFONT; + style |= DS_SETFONT; + dialog.pointsize = (yyvsp[(3) - (5)].il); + dialog.font = (yyvsp[(5) - (5)].uni); + if (dialog.ex != NULL) + { + dialog.ex->weight = 0; + dialog.ex->italic = 0; + dialog.ex->charset = 1; + } + } + break; + + case 51: +#line 483 "rcparse.y" + { + dialog.style |= DS_SETFONT; + style |= DS_SETFONT; + dialog.pointsize = (yyvsp[(3) - (6)].il); + dialog.font = (yyvsp[(5) - (6)].uni); + if (dialog.ex == NULL) + rcparse_warning (_("extended FONT requires DIALOGEX")); + else + { + dialog.ex->weight = (yyvsp[(6) - (6)].il); + dialog.ex->italic = 0; + dialog.ex->charset = 1; + } + } + break; + + case 52: +#line 498 "rcparse.y" + { + dialog.style |= DS_SETFONT; + style |= DS_SETFONT; + dialog.pointsize = (yyvsp[(3) - (7)].il); + dialog.font = (yyvsp[(5) - (7)].uni); + if (dialog.ex == NULL) + rcparse_warning (_("extended FONT requires DIALOGEX")); + else + { + dialog.ex->weight = (yyvsp[(6) - (7)].il); + dialog.ex->italic = (yyvsp[(7) - (7)].il); + dialog.ex->charset = 1; + } + } + break; + + case 53: +#line 513 "rcparse.y" + { + dialog.style |= DS_SETFONT; + style |= DS_SETFONT; + dialog.pointsize = (yyvsp[(3) - (8)].il); + dialog.font = (yyvsp[(5) - (8)].uni); + if (dialog.ex == NULL) + rcparse_warning (_("extended FONT requires DIALOGEX")); + else + { + dialog.ex->weight = (yyvsp[(6) - (8)].il); + dialog.ex->italic = (yyvsp[(7) - (8)].il); + dialog.ex->charset = (yyvsp[(8) - (8)].il); + } + } + break; + + case 54: +#line 528 "rcparse.y" + { + dialog.menu = (yyvsp[(3) - (3)].id); + } + break; + + case 55: +#line 532 "rcparse.y" + { + sub_res_info.characteristics = (yyvsp[(3) - (3)].il); + } + break; + + case 56: +#line 536 "rcparse.y" + { + sub_res_info.language = (yyvsp[(3) - (4)].il) | ((yyvsp[(4) - (4)].il) << SUBLANG_SHIFT); + } + break; + + case 57: +#line 540 "rcparse.y" + { + sub_res_info.version = (yyvsp[(3) - (3)].il); + } + break; + + case 59: +#line 548 "rcparse.y" + { + rc_dialog_control **pp; + + for (pp = &dialog.controls; *pp != NULL; pp = &(*pp)->next) + ; + *pp = (yyvsp[(2) - (2)].dialog_control); + } + break; + + case 60: +#line 559 "rcparse.y" + { + default_style = BS_AUTO3STATE | WS_TABSTOP; + base_style = BS_AUTO3STATE; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 61: +#line 567 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 62: +#line 571 "rcparse.y" + { + default_style = BS_AUTOCHECKBOX | WS_TABSTOP; + base_style = BS_AUTOCHECKBOX; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 63: +#line 579 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 64: +#line 583 "rcparse.y" + { + default_style = BS_AUTORADIOBUTTON | WS_TABSTOP; + base_style = BS_AUTORADIOBUTTON; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 65: +#line 591 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 66: +#line 595 "rcparse.y" + { + default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + class.named = 0; + class.u.id = CTL_EDIT; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 67: +#line 603 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + if (dialog.ex == NULL) + rcparse_warning (_("BEDIT requires DIALOGEX")); + res_string_to_id (&(yyval.dialog_control)->class, "BEDIT"); + } + break; + + case 68: +#line 610 "rcparse.y" + { + default_style = BS_CHECKBOX | WS_TABSTOP; + base_style = BS_CHECKBOX | WS_TABSTOP; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 69: +#line 618 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 70: +#line 622 "rcparse.y" + { + /* This is as per MSDN documentation. With some (???) + versions of MS rc.exe their is no default style. */ + default_style = CBS_SIMPLE | WS_TABSTOP; + base_style = 0; + class.named = 0; + class.u.id = CTL_COMBOBOX; + res_text_field = res_null_text; + } + break; + + case 71: +#line 632 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(3) - (3)].dialog_control); + } + break; + + case 72: +#line 637 "rcparse.y" + { + (yyval.dialog_control) = define_control ((yyvsp[(2) - (11)].id), (yyvsp[(3) - (11)].il), (yyvsp[(6) - (11)].il), (yyvsp[(7) - (11)].il), (yyvsp[(8) - (11)].il), (yyvsp[(9) - (11)].il), (yyvsp[(4) - (11)].id), style, (yyvsp[(10) - (11)].il)); + if ((yyvsp[(11) - (11)].rcdata_item) != NULL) + { + if (dialog.ex == NULL) + rcparse_warning (_("control data requires DIALOGEX")); + (yyval.dialog_control)->data = (yyvsp[(11) - (11)].rcdata_item); + } + } + break; + + case 73: +#line 648 "rcparse.y" + { + (yyval.dialog_control) = define_control ((yyvsp[(2) - (12)].id), (yyvsp[(3) - (12)].il), (yyvsp[(6) - (12)].il), (yyvsp[(7) - (12)].il), (yyvsp[(8) - (12)].il), (yyvsp[(9) - (12)].il), (yyvsp[(4) - (12)].id), style, (yyvsp[(10) - (12)].il)); + if (dialog.ex == NULL) + rcparse_warning (_("help ID requires DIALOGEX")); + (yyval.dialog_control)->help = (yyvsp[(11) - (12)].il); + (yyval.dialog_control)->data = (yyvsp[(12) - (12)].rcdata_item); + } + break; + + case 74: +#line 656 "rcparse.y" + { + default_style = SS_CENTER | WS_GROUP; + base_style = SS_CENTER; + class.named = 0; + class.u.id = CTL_STATIC; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 75: +#line 664 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 76: +#line 668 "rcparse.y" + { + default_style = BS_DEFPUSHBUTTON | WS_TABSTOP; + base_style = BS_DEFPUSHBUTTON | WS_TABSTOP; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 77: +#line 676 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 78: +#line 680 "rcparse.y" + { + default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + class.named = 0; + class.u.id = CTL_EDIT; + res_text_field = res_null_text; + } + break; + + case 79: +#line 688 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(3) - (3)].dialog_control); + } + break; + + case 80: +#line 692 "rcparse.y" + { + default_style = BS_GROUPBOX; + base_style = BS_GROUPBOX; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 81: +#line 700 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 82: +#line 704 "rcparse.y" + { + default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + class.named = 0; + class.u.id = CTL_EDIT; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 83: +#line 712 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + if (dialog.ex == NULL) + rcparse_warning (_("IEDIT requires DIALOGEX")); + res_string_to_id (&(yyval.dialog_control)->class, "HEDIT"); + } + break; + + case 84: +#line 719 "rcparse.y" + { + (yyval.dialog_control) = define_icon_control ((yyvsp[(2) - (6)].id), (yyvsp[(3) - (6)].il), (yyvsp[(4) - (6)].il), (yyvsp[(5) - (6)].il), 0, 0, 0, (yyvsp[(6) - (6)].rcdata_item), + dialog.ex); + } + break; + + case 85: +#line 725 "rcparse.y" + { + (yyval.dialog_control) = define_icon_control ((yyvsp[(2) - (8)].id), (yyvsp[(3) - (8)].il), (yyvsp[(4) - (8)].il), (yyvsp[(5) - (8)].il), 0, 0, 0, (yyvsp[(8) - (8)].rcdata_item), + dialog.ex); + } + break; + + case 86: +#line 731 "rcparse.y" + { + (yyval.dialog_control) = define_icon_control ((yyvsp[(2) - (10)].id), (yyvsp[(3) - (10)].il), (yyvsp[(4) - (10)].il), (yyvsp[(5) - (10)].il), style, (yyvsp[(9) - (10)].il), 0, (yyvsp[(10) - (10)].rcdata_item), + dialog.ex); + } + break; + + case 87: +#line 737 "rcparse.y" + { + (yyval.dialog_control) = define_icon_control ((yyvsp[(2) - (11)].id), (yyvsp[(3) - (11)].il), (yyvsp[(4) - (11)].il), (yyvsp[(5) - (11)].il), style, (yyvsp[(9) - (11)].il), (yyvsp[(10) - (11)].il), (yyvsp[(11) - (11)].rcdata_item), + dialog.ex); + } + break; + + case 88: +#line 742 "rcparse.y" + { + default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + base_style = ES_LEFT | WS_BORDER | WS_TABSTOP; + class.named = 0; + class.u.id = CTL_EDIT; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 89: +#line 750 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + if (dialog.ex == NULL) + rcparse_warning (_("IEDIT requires DIALOGEX")); + res_string_to_id (&(yyval.dialog_control)->class, "IEDIT"); + } + break; + + case 90: +#line 757 "rcparse.y" + { + default_style = LBS_NOTIFY | WS_BORDER; + base_style = LBS_NOTIFY | WS_BORDER; + class.named = 0; + class.u.id = CTL_LISTBOX; + res_text_field = res_null_text; + } + break; + + case 91: +#line 765 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(3) - (3)].dialog_control); + } + break; + + case 92: +#line 769 "rcparse.y" + { + default_style = SS_LEFT | WS_GROUP; + base_style = SS_LEFT; + class.named = 0; + class.u.id = CTL_STATIC; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 93: +#line 777 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 94: +#line 781 "rcparse.y" + { + default_style = BS_PUSHBOX | WS_TABSTOP; + base_style = BS_PUSHBOX; + class.named = 0; + class.u.id = CTL_BUTTON; + } + break; + + case 95: +#line 788 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 96: +#line 792 "rcparse.y" + { + default_style = BS_PUSHBUTTON | WS_TABSTOP; + base_style = BS_PUSHBUTTON | WS_TABSTOP; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 97: +#line 800 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 98: +#line 804 "rcparse.y" + { + default_style = BS_RADIOBUTTON | WS_TABSTOP; + base_style = BS_RADIOBUTTON; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 99: +#line 812 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 100: +#line 816 "rcparse.y" + { + default_style = SS_RIGHT | WS_GROUP; + base_style = SS_RIGHT; + class.named = 0; + class.u.id = CTL_STATIC; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 101: +#line 824 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 102: +#line 828 "rcparse.y" + { + default_style = SBS_HORZ; + base_style = 0; + class.named = 0; + class.u.id = CTL_SCROLLBAR; + res_text_field = res_null_text; + } + break; + + case 103: +#line 836 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(3) - (3)].dialog_control); + } + break; + + case 104: +#line 840 "rcparse.y" + { + default_style = BS_3STATE | WS_TABSTOP; + base_style = BS_3STATE; + class.named = 0; + class.u.id = CTL_BUTTON; + res_text_field = (yyvsp[(2) - (2)].id); + } + break; + + case 105: +#line 848 "rcparse.y" + { + (yyval.dialog_control) = (yyvsp[(4) - (4)].dialog_control); + } + break; + + case 106: +#line 853 "rcparse.y" + { style = WS_CHILD | WS_VISIBLE; } + break; + + case 107: +#line 855 "rcparse.y" + { + rc_res_id cid; + cid.named = 0; + cid.u.id = CTL_BUTTON; + (yyval.dialog_control) = define_control ((yyvsp[(2) - (15)].id), (yyvsp[(3) - (15)].il), (yyvsp[(5) - (15)].il), (yyvsp[(7) - (15)].il), (yyvsp[(9) - (15)].il), (yyvsp[(11) - (15)].il), cid, + style, (yyvsp[(15) - (15)].il)); + } + break; + + case 108: +#line 873 "rcparse.y" + { + (yyval.dialog_control) = define_control (res_text_field, (yyvsp[(1) - (6)].il), (yyvsp[(2) - (6)].il), (yyvsp[(3) - (6)].il), (yyvsp[(4) - (6)].il), (yyvsp[(5) - (6)].il), class, + default_style | WS_CHILD | WS_VISIBLE, 0); + if ((yyvsp[(6) - (6)].rcdata_item) != NULL) + { + if (dialog.ex == NULL) + rcparse_warning (_("control data requires DIALOGEX")); + (yyval.dialog_control)->data = (yyvsp[(6) - (6)].rcdata_item); + } + } + break; + + case 109: +#line 885 "rcparse.y" + { + (yyval.dialog_control) = define_control (res_text_field, (yyvsp[(1) - (8)].il), (yyvsp[(2) - (8)].il), (yyvsp[(3) - (8)].il), (yyvsp[(4) - (8)].il), (yyvsp[(5) - (8)].il), class, style, (yyvsp[(7) - (8)].il)); + if ((yyvsp[(8) - (8)].rcdata_item) != NULL) + { + if (dialog.ex == NULL) + rcparse_warning (_("control data requires DIALOGEX")); + (yyval.dialog_control)->data = (yyvsp[(8) - (8)].rcdata_item); + } + } + break; + + case 110: +#line 896 "rcparse.y" + { + (yyval.dialog_control) = define_control (res_text_field, (yyvsp[(1) - (9)].il), (yyvsp[(2) - (9)].il), (yyvsp[(3) - (9)].il), (yyvsp[(4) - (9)].il), (yyvsp[(5) - (9)].il), class, style, (yyvsp[(7) - (9)].il)); + if (dialog.ex == NULL) + rcparse_warning (_("help ID requires DIALOGEX")); + (yyval.dialog_control)->help = (yyvsp[(8) - (9)].il); + (yyval.dialog_control)->data = (yyvsp[(9) - (9)].rcdata_item); + } + break; + + case 111: +#line 907 "rcparse.y" + { + if ((yyvsp[(2) - (2)].id).named) + res_unistring_to_id (&(yyval.id), (yyvsp[(2) - (2)].id).u.n.name); + else + (yyval.id)=(yyvsp[(2) - (2)].id); + } + break; + + case 112: +#line 917 "rcparse.y" + { + res_string_to_id (&(yyval.id), ""); + } + break; + + case 113: +#line 920 "rcparse.y" + { (yyval.id)=(yyvsp[(1) - (2)].id); } + break; + + case 114: +#line 925 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = (yyvsp[(1) - (1)].il); + } + break; + + case 115: +#line 930 "rcparse.y" + { + (yyval.id).named = 1; + (yyval.id).u.n.name = (yyvsp[(1) - (1)].uni); + (yyval.id).u.n.length = unichar_len ((yyvsp[(1) - (1)].uni)); + } + break; + + case 116: +#line 939 "rcparse.y" + { + (yyval.rcdata_item) = NULL; + } + break; + + case 117: +#line 943 "rcparse.y" + { + (yyval.rcdata_item) = (yyvsp[(2) - (3)].rcdata).first; + } + break; + + case 118: +#line 952 "rcparse.y" + { style = WS_CHILD | WS_VISIBLE; } + break; + + case 120: +#line 958 "rcparse.y" + { style = SS_ICON | WS_CHILD | WS_VISIBLE; } + break; + + case 122: +#line 964 "rcparse.y" + { style = base_style | WS_CHILD | WS_VISIBLE; } + break; + + case 124: +#line 972 "rcparse.y" + { + define_font ((yyvsp[(1) - (4)].id), &(yyvsp[(3) - (4)].res_info), (yyvsp[(4) - (4)].s)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 125: +#line 984 "rcparse.y" + { + define_icon ((yyvsp[(1) - (4)].id), &(yyvsp[(3) - (4)].res_info), (yyvsp[(4) - (4)].s)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 126: +#line 997 "rcparse.y" + { + language = (yyvsp[(2) - (3)].il) | ((yyvsp[(3) - (3)].il) << SUBLANG_SHIFT); + } + break; + + case 127: +#line 1006 "rcparse.y" + { + define_menu ((yyvsp[(1) - (6)].id), &(yyvsp[(3) - (6)].res_info), (yyvsp[(5) - (6)].menuitem)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 128: +#line 1016 "rcparse.y" + { + (yyval.menuitem) = NULL; + } + break; + + case 129: +#line 1020 "rcparse.y" + { + if ((yyvsp[(1) - (2)].menuitem) == NULL) + (yyval.menuitem) = (yyvsp[(2) - (2)].menuitem); + else + { + rc_menuitem **pp; + + for (pp = &(yyvsp[(1) - (2)].menuitem)->next; *pp != NULL; pp = &(*pp)->next) + ; + *pp = (yyvsp[(2) - (2)].menuitem); + (yyval.menuitem) = (yyvsp[(1) - (2)].menuitem); + } + } + break; + + case 130: +#line 1037 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (4)].uni), (yyvsp[(3) - (4)].il), (yyvsp[(4) - (4)].is), 0, 0, NULL); + } + break; + + case 131: +#line 1041 "rcparse.y" + { + (yyval.menuitem) = define_menuitem (NULL, 0, 0, 0, 0, NULL); + } + break; + + case 132: +#line 1045 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (6)].uni), 0, (yyvsp[(3) - (6)].is), 0, 0, (yyvsp[(5) - (6)].menuitem)); + } + break; + + case 133: +#line 1052 "rcparse.y" + { + (yyval.is) = 0; + } + break; + + case 134: +#line 1056 "rcparse.y" + { + (yyval.is) = (yyvsp[(1) - (3)].is) | (yyvsp[(3) - (3)].is); + } + break; + + case 135: +#line 1060 "rcparse.y" + { + (yyval.is) = (yyvsp[(1) - (2)].is) | (yyvsp[(2) - (2)].is); + } + break; + + case 136: +#line 1067 "rcparse.y" + { + (yyval.is) = MENUITEM_CHECKED; + } + break; + + case 137: +#line 1071 "rcparse.y" + { + (yyval.is) = MENUITEM_GRAYED; + } + break; + + case 138: +#line 1075 "rcparse.y" + { + (yyval.is) = MENUITEM_HELP; + } + break; + + case 139: +#line 1079 "rcparse.y" + { + (yyval.is) = MENUITEM_INACTIVE; + } + break; + + case 140: +#line 1083 "rcparse.y" + { + (yyval.is) = MENUITEM_MENUBARBREAK; + } + break; + + case 141: +#line 1087 "rcparse.y" + { + (yyval.is) = MENUITEM_MENUBREAK; + } + break; + + case 142: +#line 1096 "rcparse.y" + { + define_menu ((yyvsp[(1) - (6)].id), &(yyvsp[(3) - (6)].res_info), (yyvsp[(5) - (6)].menuitem)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 143: +#line 1106 "rcparse.y" + { + (yyval.menuitem) = NULL; + } + break; + + case 144: +#line 1110 "rcparse.y" + { + if ((yyvsp[(1) - (2)].menuitem) == NULL) + (yyval.menuitem) = (yyvsp[(2) - (2)].menuitem); + else + { + rc_menuitem **pp; + + for (pp = &(yyvsp[(1) - (2)].menuitem)->next; *pp != NULL; pp = &(*pp)->next) + ; + *pp = (yyvsp[(2) - (2)].menuitem); + (yyval.menuitem) = (yyvsp[(1) - (2)].menuitem); + } + } + break; + + case 145: +#line 1127 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (2)].uni), 0, 0, 0, 0, NULL); + } + break; + + case 146: +#line 1131 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (3)].uni), (yyvsp[(3) - (3)].il), 0, 0, 0, NULL); + } + break; + + case 147: +#line 1135 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (5)].uni), (yyvsp[(3) - (5)].il), (yyvsp[(4) - (5)].il), (yyvsp[(5) - (5)].il), 0, NULL); + } + break; + + case 148: +#line 1139 "rcparse.y" + { + (yyval.menuitem) = define_menuitem (NULL, 0, 0, 0, 0, NULL); + } + break; + + case 149: +#line 1143 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (5)].uni), 0, 0, 0, 0, (yyvsp[(4) - (5)].menuitem)); + } + break; + + case 150: +#line 1147 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (6)].uni), (yyvsp[(3) - (6)].il), 0, 0, 0, (yyvsp[(5) - (6)].menuitem)); + } + break; + + case 151: +#line 1151 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (7)].uni), (yyvsp[(3) - (7)].il), (yyvsp[(4) - (7)].il), 0, 0, (yyvsp[(6) - (7)].menuitem)); + } + break; + + case 152: +#line 1156 "rcparse.y" + { + (yyval.menuitem) = define_menuitem ((yyvsp[(2) - (9)].uni), (yyvsp[(3) - (9)].il), (yyvsp[(4) - (9)].il), (yyvsp[(5) - (9)].il), (yyvsp[(6) - (9)].il), (yyvsp[(8) - (9)].menuitem)); + } + break; + + case 153: +#line 1165 "rcparse.y" + { + define_messagetable ((yyvsp[(1) - (4)].id), &(yyvsp[(3) - (4)].res_info), (yyvsp[(4) - (4)].s)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 154: +#line 1177 "rcparse.y" + { + rcparse_rcdata (); + } + break; + + case 155: +#line 1181 "rcparse.y" + { + rcparse_normal (); + (yyval.rcdata) = (yyvsp[(2) - (2)].rcdata); + } + break; + + case 156: +#line 1189 "rcparse.y" + { + (yyval.rcdata).first = NULL; + (yyval.rcdata).last = NULL; + } + break; + + case 157: +#line 1194 "rcparse.y" + { + (yyval.rcdata) = (yyvsp[(1) - (1)].rcdata); + } + break; + + case 158: +#line 1201 "rcparse.y" + { + rc_rcdata_item *ri; + + ri = define_rcdata_string ((yyvsp[(1) - (1)].ss).s, (yyvsp[(1) - (1)].ss).length); + (yyval.rcdata).first = ri; + (yyval.rcdata).last = ri; + } + break; + + case 159: +#line 1209 "rcparse.y" + { + rc_rcdata_item *ri; + + ri = define_rcdata_unistring ((yyvsp[(1) - (1)].suni).s, (yyvsp[(1) - (1)].suni).length); + (yyval.rcdata).first = ri; + (yyval.rcdata).last = ri; + } + break; + + case 160: +#line 1217 "rcparse.y" + { + rc_rcdata_item *ri; + + ri = define_rcdata_number ((yyvsp[(1) - (1)].i).val, (yyvsp[(1) - (1)].i).dword); + (yyval.rcdata).first = ri; + (yyval.rcdata).last = ri; + } + break; + + case 161: +#line 1225 "rcparse.y" + { + rc_rcdata_item *ri; + + ri = define_rcdata_string ((yyvsp[(3) - (3)].ss).s, (yyvsp[(3) - (3)].ss).length); + (yyval.rcdata).first = (yyvsp[(1) - (3)].rcdata).first; + (yyvsp[(1) - (3)].rcdata).last->next = ri; + (yyval.rcdata).last = ri; + } + break; + + case 162: +#line 1234 "rcparse.y" + { + rc_rcdata_item *ri; + + ri = define_rcdata_unistring ((yyvsp[(3) - (3)].suni).s, (yyvsp[(3) - (3)].suni).length); + (yyval.rcdata).first = (yyvsp[(1) - (3)].rcdata).first; + (yyvsp[(1) - (3)].rcdata).last->next = ri; + (yyval.rcdata).last = ri; + } + break; + + case 163: +#line 1243 "rcparse.y" + { + rc_rcdata_item *ri; + + ri = define_rcdata_number ((yyvsp[(3) - (3)].i).val, (yyvsp[(3) - (3)].i).dword); + (yyval.rcdata).first = (yyvsp[(1) - (3)].rcdata).first; + (yyvsp[(1) - (3)].rcdata).last->next = ri; + (yyval.rcdata).last = ri; + } + break; + + case 164: +#line 1257 "rcparse.y" + { sub_res_info = (yyvsp[(2) - (3)].res_info); } + break; + + case 167: +#line 1264 "rcparse.y" + { + define_stringtable (&sub_res_info, (yyvsp[(2) - (3)].il), (yyvsp[(3) - (3)].uni)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 168: +#line 1271 "rcparse.y" + { + define_stringtable (&sub_res_info, (yyvsp[(2) - (4)].il), (yyvsp[(4) - (4)].uni)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 169: +#line 1281 "rcparse.y" + { + (yyval.id)=(yyvsp[(1) - (1)].id); + } + break; + + case 170: +#line 1285 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = 23; + } + break; + + case 171: +#line 1290 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_RCDATA; + } + break; + + case 172: +#line 1295 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_MANIFEST; + } + break; + + case 173: +#line 1300 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_PLUGPLAY; + } + break; + + case 174: +#line 1305 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_VXD; + } + break; + + case 175: +#line 1310 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_DLGINCLUDE; + } + break; + + case 176: +#line 1315 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_DLGINIT; + } + break; + + case 177: +#line 1320 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_ANICURSOR; + } + break; + + case 178: +#line 1325 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = RT_ANIICON; + } + break; + + case 179: +#line 1336 "rcparse.y" + { + define_user_data ((yyvsp[(1) - (6)].id), (yyvsp[(2) - (6)].id), &(yyvsp[(3) - (6)].res_info), (yyvsp[(5) - (6)].rcdata).first); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 180: +#line 1343 "rcparse.y" + { + define_user_file ((yyvsp[(1) - (4)].id), (yyvsp[(2) - (4)].id), &(yyvsp[(3) - (4)].res_info), (yyvsp[(4) - (4)].s)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 181: +#line 1353 "rcparse.y" + { + define_toolbar ((yyvsp[(1) - (8)].id), &(yyvsp[(3) - (8)].res_info), (yyvsp[(4) - (8)].il), (yyvsp[(5) - (8)].il), (yyvsp[(7) - (8)].toobar_item)); + } + break; + + case 182: +#line 1358 "rcparse.y" + { (yyval.toobar_item)= NULL; } + break; + + case 183: +#line 1360 "rcparse.y" + { + rc_toolbar_item *c,*n; + c = (yyvsp[(1) - (3)].toobar_item); + n= (rc_toolbar_item *) + res_alloc (sizeof (rc_toolbar_item)); + if (c != NULL) + while (c->next != NULL) + c = c->next; + n->prev = c; + n->next = NULL; + if (c != NULL) + c->next = n; + n->id = (yyvsp[(3) - (3)].id); + if ((yyvsp[(1) - (3)].toobar_item) == NULL) + (yyval.toobar_item) = n; + else + (yyval.toobar_item) = (yyvsp[(1) - (3)].toobar_item); + } + break; + + case 184: +#line 1379 "rcparse.y" + { + rc_toolbar_item *c,*n; + c = (yyvsp[(1) - (2)].toobar_item); + n= (rc_toolbar_item *) + res_alloc (sizeof (rc_toolbar_item)); + if (c != NULL) + while (c->next != NULL) + c = c->next; + n->prev = c; + n->next = NULL; + if (c != NULL) + c->next = n; + n->id.named = 0; + n->id.u.id = 0; + if ((yyvsp[(1) - (2)].toobar_item) == NULL) + (yyval.toobar_item) = n; + else + (yyval.toobar_item) = (yyvsp[(1) - (2)].toobar_item); + } + break; + + case 185: +#line 1404 "rcparse.y" + { + define_versioninfo ((yyvsp[(1) - (6)].id), language, (yyvsp[(3) - (6)].fixver), (yyvsp[(5) - (6)].verinfo)); + if (yychar != YYEMPTY) + YYERROR; + rcparse_discard_strings (); + } + break; + + case 186: +#line 1414 "rcparse.y" + { + (yyval.fixver) = ((rc_fixed_versioninfo *) + res_alloc (sizeof (rc_fixed_versioninfo))); + memset ((yyval.fixver), 0, sizeof (rc_fixed_versioninfo)); + } + break; + + case 187: +#line 1420 "rcparse.y" + { + (yyvsp[(1) - (6)].fixver)->file_version_ms = ((yyvsp[(3) - (6)].il) << 16) | (yyvsp[(4) - (6)].il); + (yyvsp[(1) - (6)].fixver)->file_version_ls = ((yyvsp[(5) - (6)].il) << 16) | (yyvsp[(6) - (6)].il); + (yyval.fixver) = (yyvsp[(1) - (6)].fixver); + } + break; + + case 188: +#line 1426 "rcparse.y" + { + (yyvsp[(1) - (6)].fixver)->product_version_ms = ((yyvsp[(3) - (6)].il) << 16) | (yyvsp[(4) - (6)].il); + (yyvsp[(1) - (6)].fixver)->product_version_ls = ((yyvsp[(5) - (6)].il) << 16) | (yyvsp[(6) - (6)].il); + (yyval.fixver) = (yyvsp[(1) - (6)].fixver); + } + break; + + case 189: +#line 1432 "rcparse.y" + { + (yyvsp[(1) - (3)].fixver)->file_flags_mask = (yyvsp[(3) - (3)].il); + (yyval.fixver) = (yyvsp[(1) - (3)].fixver); + } + break; + + case 190: +#line 1437 "rcparse.y" + { + (yyvsp[(1) - (3)].fixver)->file_flags = (yyvsp[(3) - (3)].il); + (yyval.fixver) = (yyvsp[(1) - (3)].fixver); + } + break; + + case 191: +#line 1442 "rcparse.y" + { + (yyvsp[(1) - (3)].fixver)->file_os = (yyvsp[(3) - (3)].il); + (yyval.fixver) = (yyvsp[(1) - (3)].fixver); + } + break; + + case 192: +#line 1447 "rcparse.y" + { + (yyvsp[(1) - (3)].fixver)->file_type = (yyvsp[(3) - (3)].il); + (yyval.fixver) = (yyvsp[(1) - (3)].fixver); + } + break; + + case 193: +#line 1452 "rcparse.y" + { + (yyvsp[(1) - (3)].fixver)->file_subtype = (yyvsp[(3) - (3)].il); + (yyval.fixver) = (yyvsp[(1) - (3)].fixver); + } + break; + + case 194: +#line 1466 "rcparse.y" + { + (yyval.verinfo) = NULL; + } + break; + + case 195: +#line 1470 "rcparse.y" + { + (yyval.verinfo) = append_ver_stringfileinfo ((yyvsp[(1) - (8)].verinfo), (yyvsp[(4) - (8)].s), (yyvsp[(6) - (8)].verstring)); + } + break; + + case 196: +#line 1474 "rcparse.y" + { + (yyval.verinfo) = append_ver_varfileinfo ((yyvsp[(1) - (7)].verinfo), (yyvsp[(5) - (7)].uni), (yyvsp[(6) - (7)].vervar)); + } + break; + + case 197: +#line 1481 "rcparse.y" + { + (yyval.verstring) = NULL; + } + break; + + case 198: +#line 1485 "rcparse.y" + { + (yyval.verstring) = append_verval ((yyvsp[(1) - (5)].verstring), (yyvsp[(3) - (5)].uni), (yyvsp[(5) - (5)].uni)); + } + break; + + case 199: +#line 1492 "rcparse.y" + { + (yyval.vervar) = NULL; + } + break; + + case 200: +#line 1496 "rcparse.y" + { + (yyval.vervar) = append_vertrans ((yyvsp[(1) - (3)].vervar), (yyvsp[(2) - (3)].il), (yyvsp[(3) - (3)].il)); + } + break; + + case 201: +#line 1505 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = (yyvsp[(1) - (1)].il); + } + break; + + case 202: +#line 1510 "rcparse.y" + { + res_unistring_to_id (&(yyval.id), (yyvsp[(1) - (1)].uni)); + } + break; + + case 203: +#line 1519 "rcparse.y" + { + (yyval.uni) = (yyvsp[(1) - (1)].uni); + } + break; + + case 204: +#line 1523 "rcparse.y" + { + unichar *h = NULL; + unicode_from_ascii ((rc_uint_type *) NULL, &h, (yyvsp[(1) - (1)].s)); + (yyval.uni) = h; + } + break; + + case 205: +#line 1533 "rcparse.y" + { + (yyval.id).named = 0; + (yyval.id).u.id = (yyvsp[(1) - (2)].il); + } + break; + + case 206: +#line 1538 "rcparse.y" + { + res_unistring_to_id (&(yyval.id), (yyvsp[(1) - (1)].uni)); + } + break; + + case 207: +#line 1542 "rcparse.y" + { + res_unistring_to_id (&(yyval.id), (yyvsp[(1) - (2)].uni)); + } + break; + + case 208: +#line 1552 "rcparse.y" + { + memset (&(yyval.res_info), 0, sizeof (rc_res_res_info)); + (yyval.res_info).language = language; + /* FIXME: Is this the right default? */ + (yyval.res_info).memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE; + } + break; + + case 209: +#line 1559 "rcparse.y" + { + (yyval.res_info) = (yyvsp[(1) - (2)].res_info); + (yyval.res_info).memflags |= (yyvsp[(2) - (2)].memflags).on; + (yyval.res_info).memflags &=~ (yyvsp[(2) - (2)].memflags).off; + } + break; + + case 210: +#line 1565 "rcparse.y" + { + (yyval.res_info) = (yyvsp[(1) - (3)].res_info); + (yyval.res_info).characteristics = (yyvsp[(3) - (3)].il); + } + break; + + case 211: +#line 1570 "rcparse.y" + { + (yyval.res_info) = (yyvsp[(1) - (4)].res_info); + (yyval.res_info).language = (yyvsp[(3) - (4)].il) | ((yyvsp[(4) - (4)].il) << SUBLANG_SHIFT); + } + break; + + case 212: +#line 1575 "rcparse.y" + { + (yyval.res_info) = (yyvsp[(1) - (3)].res_info); + (yyval.res_info).version = (yyvsp[(3) - (3)].il); + } + break; + + case 213: +#line 1585 "rcparse.y" + { + memset (&(yyval.res_info), 0, sizeof (rc_res_res_info)); + (yyval.res_info).language = language; + (yyval.res_info).memflags = MEMFLAG_MOVEABLE | MEMFLAG_DISCARDABLE; + } + break; + + case 214: +#line 1591 "rcparse.y" + { + (yyval.res_info) = (yyvsp[(1) - (2)].res_info); + (yyval.res_info).memflags |= (yyvsp[(2) - (2)].memflags).on; + (yyval.res_info).memflags &=~ (yyvsp[(2) - (2)].memflags).off; + } + break; + + case 215: +#line 1602 "rcparse.y" + { + memset (&(yyval.res_info), 0, sizeof (rc_res_res_info)); + (yyval.res_info).language = language; + (yyval.res_info).memflags = MEMFLAG_MOVEABLE | MEMFLAG_PURE | MEMFLAG_DISCARDABLE; + } + break; + + case 216: +#line 1608 "rcparse.y" + { + (yyval.res_info) = (yyvsp[(1) - (2)].res_info); + (yyval.res_info).memflags |= (yyvsp[(2) - (2)].memflags).on; + (yyval.res_info).memflags &=~ (yyvsp[(2) - (2)].memflags).off; + } + break; + + case 217: +#line 1620 "rcparse.y" + { + (yyval.memflags).on = MEMFLAG_MOVEABLE; + (yyval.memflags).off = 0; + } + break; + + case 218: +#line 1625 "rcparse.y" + { + (yyval.memflags).on = 0; + (yyval.memflags).off = MEMFLAG_MOVEABLE; + } + break; + + case 219: +#line 1630 "rcparse.y" + { + (yyval.memflags).on = MEMFLAG_PURE; + (yyval.memflags).off = 0; + } + break; + + case 220: +#line 1635 "rcparse.y" + { + (yyval.memflags).on = 0; + (yyval.memflags).off = MEMFLAG_PURE; + } + break; + + case 221: +#line 1640 "rcparse.y" + { + (yyval.memflags).on = MEMFLAG_PRELOAD; + (yyval.memflags).off = 0; + } + break; + + case 222: +#line 1645 "rcparse.y" + { + (yyval.memflags).on = 0; + (yyval.memflags).off = MEMFLAG_PRELOAD; + } + break; + + case 223: +#line 1650 "rcparse.y" + { + (yyval.memflags).on = MEMFLAG_DISCARDABLE; + (yyval.memflags).off = 0; + } + break; + + case 224: +#line 1660 "rcparse.y" + { + (yyval.s) = (yyvsp[(1) - (1)].s); + } + break; + + case 225: +#line 1664 "rcparse.y" + { + (yyval.s) = (yyvsp[(1) - (1)].s); + } + break; + + case 226: +#line 1672 "rcparse.y" + { + (yyval.uni) = (yyvsp[(1) - (1)].uni); + } + break; + + case 227: +#line 1677 "rcparse.y" + { + rc_uint_type l1 = unichar_len ((yyvsp[(1) - (2)].uni)); + rc_uint_type l2 = unichar_len ((yyvsp[(2) - (2)].uni)); + unichar *h = (unichar *) res_alloc ((l1 + l2 + 1) * sizeof (unichar)); + if (l1 != 0) + memcpy (h, (yyvsp[(1) - (2)].uni), l1 * sizeof (unichar)); + if (l2 != 0) + memcpy (h + l1, (yyvsp[(2) - (2)].uni), l2 * sizeof (unichar)); + h[l1 + l2] = 0; + (yyval.uni) = h; + } + break; + + case 228: +#line 1692 "rcparse.y" + { + (yyval.uni) = unichar_dup ((yyvsp[(1) - (1)].uni)); + } + break; + + case 229: +#line 1696 "rcparse.y" + { + unichar *h = NULL; + unicode_from_ascii ((rc_uint_type *) NULL, &h, (yyvsp[(1) - (1)].s)); + (yyval.uni) = h; + } + break; + + case 230: +#line 1705 "rcparse.y" + { + (yyval.ss) = (yyvsp[(1) - (1)].ss); + } + break; + + case 231: +#line 1709 "rcparse.y" + { + rc_uint_type l = (yyvsp[(1) - (2)].ss).length + (yyvsp[(2) - (2)].ss).length; + char *h = (char *) res_alloc (l); + memcpy (h, (yyvsp[(1) - (2)].ss).s, (yyvsp[(1) - (2)].ss).length); + memcpy (h + (yyvsp[(1) - (2)].ss).length, (yyvsp[(2) - (2)].ss).s, (yyvsp[(2) - (2)].ss).length); + (yyval.ss).s = h; + (yyval.ss).length = l; + } + break; + + case 232: +#line 1721 "rcparse.y" + { + (yyval.suni) = (yyvsp[(1) - (1)].suni); + } + break; + + case 233: +#line 1725 "rcparse.y" + { + rc_uint_type l = (yyvsp[(1) - (2)].suni).length + (yyvsp[(2) - (2)].suni).length; + unichar *h = (unichar *) res_alloc (l * sizeof (unichar)); + memcpy (h, (yyvsp[(1) - (2)].suni).s, (yyvsp[(1) - (2)].suni).length * sizeof (unichar)); + memcpy (h + (yyvsp[(1) - (2)].suni).length, (yyvsp[(2) - (2)].suni).s, (yyvsp[(2) - (2)].suni).length * sizeof (unichar)); + (yyval.suni).s = h; + (yyval.suni).length = l; + } + break; + + case 234: +#line 1747 "rcparse.y" + { + style |= (yyvsp[(1) - (1)].il); + } + break; + + case 235: +#line 1751 "rcparse.y" + { + style &=~ (yyvsp[(2) - (2)].il); + } + break; + + case 236: +#line 1755 "rcparse.y" + { + style |= (yyvsp[(3) - (3)].il); + } + break; + + case 237: +#line 1759 "rcparse.y" + { + style &=~ (yyvsp[(4) - (4)].il); + } + break; + + case 238: +#line 1766 "rcparse.y" + { + (yyval.il) = (yyvsp[(1) - (1)].i).val; + } + break; + + case 239: +#line 1770 "rcparse.y" + { + (yyval.il) = (yyvsp[(2) - (3)].il); + } + break; + + case 240: +#line 1779 "rcparse.y" + { + (yyval.il) = 0; + } + break; + + case 241: +#line 1783 "rcparse.y" + { + (yyval.il) = (yyvsp[(1) - (1)].il); + } + break; + + case 242: +#line 1792 "rcparse.y" + { + (yyval.il) = (yyvsp[(2) - (2)].il); + } + break; + + case 243: +#line 1801 "rcparse.y" + { + (yyval.il) = (yyvsp[(1) - (1)].i).val; + } + break; + + case 244: +#line 1810 "rcparse.y" + { + (yyval.i) = (yyvsp[(1) - (1)].i); + } + break; + + case 245: +#line 1814 "rcparse.y" + { + (yyval.i) = (yyvsp[(2) - (3)].i); + } + break; + + case 246: +#line 1818 "rcparse.y" + { + (yyval.i).val = ~ (yyvsp[(2) - (2)].i).val; + (yyval.i).dword = (yyvsp[(2) - (2)].i).dword; + } + break; + + case 247: +#line 1823 "rcparse.y" + { + (yyval.i).val = - (yyvsp[(2) - (2)].i).val; + (yyval.i).dword = (yyvsp[(2) - (2)].i).dword; + } + break; + + case 248: +#line 1828 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val * (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 249: +#line 1833 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val / (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 250: +#line 1838 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val % (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 251: +#line 1843 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val + (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 252: +#line 1848 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val - (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 253: +#line 1853 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val & (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 254: +#line 1858 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val ^ (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 255: +#line 1863 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val | (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 256: +#line 1874 "rcparse.y" + { + (yyval.il) = (yyvsp[(2) - (2)].il); + } + break; + + case 257: +#line 1883 "rcparse.y" + { + (yyval.il) = (yyvsp[(1) - (1)].i).val; + } + break; + + case 258: +#line 1894 "rcparse.y" + { + (yyval.i) = (yyvsp[(1) - (1)].i); + } + break; + + case 259: +#line 1898 "rcparse.y" + { + (yyval.i) = (yyvsp[(2) - (3)].i); + } + break; + + case 260: +#line 1902 "rcparse.y" + { + (yyval.i).val = ~ (yyvsp[(2) - (2)].i).val; + (yyval.i).dword = (yyvsp[(2) - (2)].i).dword; + } + break; + + case 261: +#line 1907 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val * (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 262: +#line 1912 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val / (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 263: +#line 1917 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val % (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 264: +#line 1922 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val + (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 265: +#line 1927 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val - (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 266: +#line 1932 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val & (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 267: +#line 1937 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val ^ (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + case 268: +#line 1942 "rcparse.y" + { + (yyval.i).val = (yyvsp[(1) - (3)].i).val | (yyvsp[(3) - (3)].i).val; + (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; + } + break; + + +/* Line 1267 of yacc.c. */ +#line 4361 "rcparse.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 1948 "rcparse.y" + + +/* Set the language from the command line. */ + +void +rcparse_set_language (int lang) +{ + language = lang; +} + diff --git a/binutils/rcparse.h b/binutils/rcparse.h new file mode 100644 index 000000000..a2991316e --- /dev/null +++ b/binutils/rcparse.h @@ -0,0 +1,297 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + BEG = 258, + END = 259, + ACCELERATORS = 260, + VIRTKEY = 261, + ASCII = 262, + NOINVERT = 263, + SHIFT = 264, + CONTROL = 265, + ALT = 266, + BITMAP = 267, + CURSOR = 268, + DIALOG = 269, + DIALOGEX = 270, + EXSTYLE = 271, + CAPTION = 272, + CLASS = 273, + STYLE = 274, + AUTO3STATE = 275, + AUTOCHECKBOX = 276, + AUTORADIOBUTTON = 277, + CHECKBOX = 278, + COMBOBOX = 279, + CTEXT = 280, + DEFPUSHBUTTON = 281, + EDITTEXT = 282, + GROUPBOX = 283, + LISTBOX = 284, + LTEXT = 285, + PUSHBOX = 286, + PUSHBUTTON = 287, + RADIOBUTTON = 288, + RTEXT = 289, + SCROLLBAR = 290, + STATE3 = 291, + USERBUTTON = 292, + BEDIT = 293, + HEDIT = 294, + IEDIT = 295, + FONT = 296, + ICON = 297, + ANICURSOR = 298, + ANIICON = 299, + DLGINCLUDE = 300, + DLGINIT = 301, + FONTDIR = 302, + HTML = 303, + MANIFEST = 304, + PLUGPLAY = 305, + VXD = 306, + TOOLBAR = 307, + BUTTON = 308, + LANGUAGE = 309, + CHARACTERISTICS = 310, + VERSIONK = 311, + MENU = 312, + MENUEX = 313, + MENUITEM = 314, + SEPARATOR = 315, + POPUP = 316, + CHECKED = 317, + GRAYED = 318, + HELP = 319, + INACTIVE = 320, + MENUBARBREAK = 321, + MENUBREAK = 322, + MESSAGETABLE = 323, + RCDATA = 324, + STRINGTABLE = 325, + VERSIONINFO = 326, + FILEVERSION = 327, + PRODUCTVERSION = 328, + FILEFLAGSMASK = 329, + FILEFLAGS = 330, + FILEOS = 331, + FILETYPE = 332, + FILESUBTYPE = 333, + BLOCKSTRINGFILEINFO = 334, + BLOCKVARFILEINFO = 335, + VALUE = 336, + BLOCK = 337, + MOVEABLE = 338, + FIXED = 339, + PURE = 340, + IMPURE = 341, + PRELOAD = 342, + LOADONCALL = 343, + DISCARDABLE = 344, + NOT = 345, + QUOTEDUNISTRING = 346, + QUOTEDSTRING = 347, + STRING = 348, + NUMBER = 349, + SIZEDUNISTRING = 350, + SIZEDSTRING = 351, + IGNORED_TOKEN = 352, + NEG = 353 + }; +#endif +/* Tokens. */ +#define BEG 258 +#define END 259 +#define ACCELERATORS 260 +#define VIRTKEY 261 +#define ASCII 262 +#define NOINVERT 263 +#define SHIFT 264 +#define CONTROL 265 +#define ALT 266 +#define BITMAP 267 +#define CURSOR 268 +#define DIALOG 269 +#define DIALOGEX 270 +#define EXSTYLE 271 +#define CAPTION 272 +#define CLASS 273 +#define STYLE 274 +#define AUTO3STATE 275 +#define AUTOCHECKBOX 276 +#define AUTORADIOBUTTON 277 +#define CHECKBOX 278 +#define COMBOBOX 279 +#define CTEXT 280 +#define DEFPUSHBUTTON 281 +#define EDITTEXT 282 +#define GROUPBOX 283 +#define LISTBOX 284 +#define LTEXT 285 +#define PUSHBOX 286 +#define PUSHBUTTON 287 +#define RADIOBUTTON 288 +#define RTEXT 289 +#define SCROLLBAR 290 +#define STATE3 291 +#define USERBUTTON 292 +#define BEDIT 293 +#define HEDIT 294 +#define IEDIT 295 +#define FONT 296 +#define ICON 297 +#define ANICURSOR 298 +#define ANIICON 299 +#define DLGINCLUDE 300 +#define DLGINIT 301 +#define FONTDIR 302 +#define HTML 303 +#define MANIFEST 304 +#define PLUGPLAY 305 +#define VXD 306 +#define TOOLBAR 307 +#define BUTTON 308 +#define LANGUAGE 309 +#define CHARACTERISTICS 310 +#define VERSIONK 311 +#define MENU 312 +#define MENUEX 313 +#define MENUITEM 314 +#define SEPARATOR 315 +#define POPUP 316 +#define CHECKED 317 +#define GRAYED 318 +#define HELP 319 +#define INACTIVE 320 +#define MENUBARBREAK 321 +#define MENUBREAK 322 +#define MESSAGETABLE 323 +#define RCDATA 324 +#define STRINGTABLE 325 +#define VERSIONINFO 326 +#define FILEVERSION 327 +#define PRODUCTVERSION 328 +#define FILEFLAGSMASK 329 +#define FILEFLAGS 330 +#define FILEOS 331 +#define FILETYPE 332 +#define FILESUBTYPE 333 +#define BLOCKSTRINGFILEINFO 334 +#define BLOCKVARFILEINFO 335 +#define VALUE 336 +#define BLOCK 337 +#define MOVEABLE 338 +#define FIXED 339 +#define PURE 340 +#define IMPURE 341 +#define PRELOAD 342 +#define LOADONCALL 343 +#define DISCARDABLE 344 +#define NOT 345 +#define QUOTEDUNISTRING 346 +#define QUOTEDSTRING 347 +#define STRING 348 +#define NUMBER 349 +#define SIZEDUNISTRING 350 +#define SIZEDSTRING 351 +#define IGNORED_TOKEN 352 +#define NEG 353 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 69 "rcparse.y" +{ + rc_accelerator acc; + rc_accelerator *pacc; + rc_dialog_control *dialog_control; + rc_menuitem *menuitem; + struct + { + rc_rcdata_item *first; + rc_rcdata_item *last; + } rcdata; + rc_rcdata_item *rcdata_item; + rc_fixed_versioninfo *fixver; + rc_ver_info *verinfo; + rc_ver_stringinfo *verstring; + rc_ver_varinfo *vervar; + rc_toolbar_item *toobar_item; + rc_res_id id; + rc_res_res_info res_info; + struct + { + rc_uint_type on; + rc_uint_type off; + } memflags; + struct + { + rc_uint_type val; + /* Nonzero if this number was explicitly specified as long. */ + int dword; + } i; + rc_uint_type il; + rc_uint_type is; + const char *s; + struct + { + rc_uint_type length; + const char *s; + } ss; + unichar *uni; + struct + { + rc_uint_type length; + const unichar *s; + } suni; +} +/* Line 1489 of yacc.c. */ +#line 290 "rcparse.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/binutils/sysinfo.c b/binutils/sysinfo.c new file mode 100644 index 000000000..f1c7a4bf1 --- /dev/null +++ b/binutils/sysinfo.c @@ -0,0 +1,1968 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + COND = 258, + REPEAT = 259, + TYPE = 260, + NAME = 261, + NUMBER = 262, + UNIT = 263 + }; +#endif +/* Tokens. */ +#define COND 258 +#define REPEAT 259 +#define TYPE 260 +#define NAME 261 +#define NUMBER 262 +#define UNIT 263 + + + + +/* Copy the first part of user declarations. */ +#line 21 "sysinfo.y" + +#include +#include + +static char writecode; +static char *it; +static int code; +static char * repeat; +static char *oldrepeat; +static char *name; +static int rdepth; +static char *names[] = {" ","[n]","[n][m]"}; +static char *pnames[]= {"","*","**"}; + +static int yyerror (char *s); +extern int yylex (void); + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 40 "sysinfo.y" +{ + int i; + char *s; +} +/* Line 187 of yacc.c. */ +#line 135 "sysinfo.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 148 "sysinfo.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 38 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 11 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 19 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 27 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 55 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 263 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 5, 6, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 7, 8, 9, 10 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 4, 7, 10, 11, 12, 19, 22, + 25, 28, 29, 30, 37, 38, 45, 46, 57, 59, + 60, 64, 67, 71, 72, 73, 77, 78 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 12, 0, -1, -1, 13, 14, -1, 15, 14, -1, + -1, -1, 5, 8, 9, 16, 17, 6, -1, 22, + 17, -1, 20, 17, -1, 18, 17, -1, -1, -1, + 5, 4, 8, 19, 17, 6, -1, -1, 5, 3, + 8, 21, 17, 6, -1, -1, 5, 25, 5, 24, + 26, 6, 27, 23, 28, 6, -1, 7, -1, -1, + 5, 8, 6, -1, 9, 10, -1, 5, 8, 6, + -1, -1, -1, 5, 29, 6, -1, -1, 29, 5, + 8, 8, 6, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 54, 54, 54, 92, 93, 98, 97, 175, 176, + 177, 178, 182, 181, 229, 228, 256, 255, 363, 364, + 368, 373, 379, 380, 383, 384, 386, 388 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "COND", "REPEAT", "'('", "')'", "TYPE", + "NAME", "NUMBER", "UNIT", "$accept", "top", "@1", "it_list", "it", "@2", + "it_field_list", "repeat_it_field", "@3", "cond_it_field", "@4", + "it_field", "@5", "attr_type", "attr_desc", "attr_size", "attr_id", + "enums", "enum_list", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 40, 41, 260, 261, 262, + 263 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 11, 13, 12, 14, 14, 16, 15, 17, 17, + 17, 17, 19, 18, 21, 20, 23, 22, 24, 24, + 25, 26, 27, 27, 28, 28, 29, 29 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 2, 2, 0, 0, 6, 2, 2, + 2, 0, 0, 6, 0, 6, 0, 10, 1, 0, + 3, 2, 3, 0, 0, 3, 0, 5 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 2, 0, 5, 1, 0, 3, 5, 0, 4, 6, + 11, 0, 0, 11, 11, 11, 0, 0, 0, 0, + 7, 10, 9, 8, 14, 12, 0, 19, 11, 11, + 20, 18, 0, 0, 0, 0, 0, 15, 13, 21, + 23, 0, 16, 0, 24, 22, 26, 0, 0, 17, + 0, 25, 0, 0, 27 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 1, 2, 5, 6, 10, 12, 13, 29, 14, + 28, 15, 44, 32, 19, 36, 42, 47, 48 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -14 +static const yytype_int8 yypact[] = +{ + -14, 8, 4, -14, 2, -14, 4, 3, -14, -14, + 6, 0, 7, 6, 6, 6, 9, 10, 11, 15, + -14, -14, -14, -14, -14, -14, 16, 14, 6, 6, + -14, -14, 5, 17, 18, 19, 20, -14, -14, -14, + 22, 23, -14, 24, 27, -14, -14, 28, 1, -14, + 25, -14, 29, 30, -14 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -14, -14, -14, 32, -14, -14, -13, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 21, 22, 23, 16, 17, 18, 50, 51, 3, 4, + 7, 11, 9, 20, 35, 33, 34, 24, 25, 26, + 27, 31, 30, 37, 38, 0, 40, 41, 0, 39, + 45, 43, 46, 52, 49, 0, 54, 53, 8 +}; + +static const yytype_int8 yycheck[] = +{ + 13, 14, 15, 3, 4, 5, 5, 6, 0, 5, + 8, 5, 9, 6, 9, 28, 29, 8, 8, 8, + 5, 7, 6, 6, 6, -1, 6, 5, -1, 10, + 6, 8, 5, 8, 6, -1, 6, 8, 6 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 12, 13, 0, 5, 14, 15, 8, 14, 9, + 16, 5, 17, 18, 20, 22, 3, 4, 5, 25, + 6, 17, 17, 17, 8, 8, 8, 5, 21, 19, + 6, 7, 24, 17, 17, 9, 26, 6, 6, 10, + 6, 5, 27, 8, 23, 6, 5, 28, 29, 6, + 5, 6, 8, 8, 6 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 54 "sysinfo.y" + { + switch (writecode) + { + case 'i': + printf("#ifdef SYSROFF_SWAP_IN\n"); + break; + case 'p': + printf("#ifdef SYSROFF_p\n"); + break; + case 'd': + break; + case 'g': + printf("#ifdef SYSROFF_SWAP_OUT\n"); + break; + case 'c': + printf("#ifdef SYSROFF_PRINT\n"); + printf("#include \n"); + printf("#include \n"); + printf("#include \n"); + break; + } + } + break; + + case 3: +#line 76 "sysinfo.y" + { + switch (writecode) { + case 'i': + case 'p': + case 'g': + case 'c': + printf("#endif\n"); + break; + case 'd': + break; + } +} + break; + + case 6: +#line 98 "sysinfo.y" + { + it = (yyvsp[(2) - (3)].s); code = (yyvsp[(3) - (3)].i); + switch (writecode) + { + case 'd': + printf("\n\n\n#define IT_%s_CODE 0x%x\n", it,code); + printf("struct IT_%s;\n", it); + printf("extern void sysroff_swap_%s_in PARAMS ((struct IT_%s *));\n", + (yyvsp[(2) - (3)].s), it); + printf("extern void sysroff_swap_%s_out PARAMS ((FILE *, struct IT_%s *));\n", + (yyvsp[(2) - (3)].s), it); + printf("extern void sysroff_print_%s_out PARAMS ((struct IT_%s *));\n", + (yyvsp[(2) - (3)].s), it); + printf("struct IT_%s { \n", it); + break; + case 'i': + printf("void sysroff_swap_%s_in(ptr)\n",(yyvsp[(2) - (3)].s)); + printf("struct IT_%s *ptr;\n", it); + printf("{\n"); + printf("unsigned char raw[255];\n"); + printf("\tint idx = 0 ;\n"); + printf("\tint size;\n"); + printf("memset(raw,0,255);\n"); + printf("memset(ptr,0,sizeof(*ptr));\n"); + printf("size = fillup(raw);\n"); + break; + case 'g': + printf("void sysroff_swap_%s_out(file,ptr)\n",(yyvsp[(2) - (3)].s)); + printf("FILE * file;\n"); + printf("struct IT_%s *ptr;\n", it); + printf("{\n"); + printf("\tunsigned char raw[255];\n"); + printf("\tint idx = 16 ;\n"); + printf("\tmemset (raw, 0, 255);\n"); + printf("\tcode = IT_%s_CODE;\n", it); + break; + case 'o': + printf("void sysroff_swap_%s_out(abfd,ptr)\n",(yyvsp[(2) - (3)].s)); + printf("bfd * abfd;\n"); + printf("struct IT_%s *ptr;\n",it); + printf("{\n"); + printf("int idx = 0 ;\n"); + break; + case 'c': + printf("void sysroff_print_%s_out(ptr)\n",(yyvsp[(2) - (3)].s)); + printf("struct IT_%s *ptr;\n", it); + printf("{\n"); + printf("itheader(\"%s\", IT_%s_CODE);\n",(yyvsp[(2) - (3)].s),(yyvsp[(2) - (3)].s)); + break; + + case 't': + break; + } + + } + break; + + case 7: +#line 155 "sysinfo.y" + { + switch (writecode) { + case 'd': + printf("};\n"); + break; + case 'g': + printf("\tchecksum(file,raw, idx, IT_%s_CODE);\n", it); + + case 'i': + + case 'o': + case 'c': + printf("}\n"); + } +} + break; + + case 12: +#line 182 "sysinfo.y" + { + rdepth++; + switch (writecode) + { + case 'c': + if (rdepth==1) + printf("\tprintf(\"repeat %%d\\n\", %s);\n",(yyvsp[(3) - (3)].s)); + if (rdepth==2) + printf("\tprintf(\"repeat %%d\\n\", %s[n]);\n",(yyvsp[(3) - (3)].s)); + case 'i': + case 'g': + case 'o': + + if (rdepth==1) + { + printf("\t{ int n; for (n = 0; n < %s; n++) {\n", (yyvsp[(3) - (3)].s)); + } + if (rdepth == 2) { + printf("\t{ int m; for (m = 0; m < %s[n]; m++) {\n", (yyvsp[(3) - (3)].s)); + } + + break; + } + + oldrepeat = repeat; + repeat = (yyvsp[(3) - (3)].s); + } + break; + + case 13: +#line 212 "sysinfo.y" + { + repeat = oldrepeat; + oldrepeat =0; + rdepth--; + switch (writecode) + { + case 'i': + case 'g': + case 'o': + case 'c': + printf("\t}}\n"); + } + } + break; + + case 14: +#line 229 "sysinfo.y" + { + switch (writecode) + { + case 'i': + case 'g': + case 'o': + case 'c': + printf("\tif (%s) {\n", (yyvsp[(3) - (3)].s)); + break; + } + } + break; + + case 15: +#line 242 "sysinfo.y" + { + switch (writecode) + { + case 'i': + case 'g': + case 'o': + case 'c': + printf("\t}\n"); + } + } + break; + + case 16: +#line 256 "sysinfo.y" + {name = (yyvsp[(7) - (7)].s); } + break; + + case 17: +#line 258 "sysinfo.y" + { + char *desc = (yyvsp[(2) - (10)].s); + char *type = (yyvsp[(4) - (10)].s); + int size = (yyvsp[(5) - (10)].i); + char *id = (yyvsp[(7) - (10)].s); +char *p = names[rdepth]; +char *ptr = pnames[rdepth]; + switch (writecode) + { + case 'g': + if (size % 8) + { + + printf("\twriteBITS(ptr->%s%s,raw,&idx,%d);\n", + id, + names[rdepth], size); + + } + else { + printf("\twrite%s(ptr->%s%s,raw,&idx,%d,file);\n", + type, + id, + names[rdepth],size/8); + } + break; + case 'i': + { + + if (rdepth >= 1) + + { + printf("if (!ptr->%s) ptr->%s = (%s*)xcalloc(%s, sizeof(ptr->%s[0]));\n", + id, + id, + type, + repeat, + id); + } + + if (rdepth == 2) + { + printf("if (!ptr->%s[n]) ptr->%s[n] = (%s**)xcalloc(%s[n], sizeof(ptr->%s[n][0]));\n", + id, + id, + type, + repeat, + id); + } + + } + + if (size % 8) + { + printf("\tptr->%s%s = getBITS(raw,&idx, %d,size);\n", + id, + names[rdepth], + size); + } + else { + printf("\tptr->%s%s = get%s(raw,&idx, %d,size);\n", + id, + names[rdepth], + type, + size/8); + } + break; + case 'o': + printf("\tput%s(raw,%d,%d,&idx,ptr->%s%s);\n", type,size/8,size%8,id,names[rdepth]); + break; + case 'd': + if (repeat) + printf("\t/* repeat %s */\n", repeat); + + if (type[0] == 'I') { + printf("\tint %s%s; \t/* %s */\n",ptr,id, desc); + } + else if (type[0] =='C') { + printf("\tchar %s*%s;\t /* %s */\n",ptr,id, desc); + } + else { + printf("\tbarray %s%s;\t /* %s */\n",ptr,id, desc); + } + break; + case 'c': + printf("tabout();\n"); + printf("\tprintf(\"/*%-30s*/ ptr->%s = \");\n", desc, id); + + if (type[0] == 'I') + printf("\tprintf(\"%%d\\n\",ptr->%s%s);\n", id,p); + else if (type[0] == 'C') + printf("\tprintf(\"%%s\\n\",ptr->%s%s);\n", id,p); + + else if (type[0] == 'B') + { + printf("\tpbarray(&ptr->%s%s);\n", id,p); + } + else abort(); + break; + } + } + break; + + case 18: +#line 363 "sysinfo.y" + { (yyval.s) = (yyvsp[(1) - (1)].s); } + break; + + case 19: +#line 364 "sysinfo.y" + { (yyval.s) = "INT";} + break; + + case 20: +#line 369 "sysinfo.y" + { (yyval.s) = (yyvsp[(2) - (3)].s); } + break; + + case 21: +#line 374 "sysinfo.y" + { (yyval.i) = (yyvsp[(1) - (2)].i) * (yyvsp[(2) - (2)].i); } + break; + + case 22: +#line 379 "sysinfo.y" + { (yyval.s) = (yyvsp[(2) - (3)].s); } + break; + + case 23: +#line 380 "sysinfo.y" + { (yyval.s) = "dummy";} + break; + + case 27: +#line 388 "sysinfo.y" + { + switch (writecode) + { + case 'd': + printf("#define %s %s\n", (yyvsp[(3) - (5)].s),(yyvsp[(4) - (5)].s)); + break; + case 'c': + printf("if (ptr->%s%s == %s) { tabout(); printf(\"%s\\n\");}\n", name, names[rdepth],(yyvsp[(4) - (5)].s),(yyvsp[(3) - (5)].s)); + } + } + break; + + +/* Line 1267 of yacc.c. */ +#line 1721 "sysinfo.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 403 "sysinfo.y" + +/* four modes + + -d write structure definitions for sysroff in host format + -i write functions to swap into sysroff format in + -o write functions to swap into sysroff format out + -c write code to print info in human form */ + +int yydebug; + +int +main (int ac, char **av) +{ + yydebug=0; + if (ac > 1) + writecode = av[1][1]; +if (writecode == 'd') + { + printf("typedef struct { unsigned char *data; int len; } barray; \n"); + printf("typedef int INT;\n"); + printf("typedef char * CHARS;\n"); + + } + yyparse(); +return 0; +} + +static int +yyerror (char *s) +{ + fprintf(stderr, "%s\n" , s); + return 0; +} + diff --git a/binutils/sysinfo.h b/binutils/sysinfo.h new file mode 100644 index 000000000..16bbbbacf --- /dev/null +++ b/binutils/sysinfo.h @@ -0,0 +1,77 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + COND = 258, + REPEAT = 259, + TYPE = 260, + NAME = 261, + NUMBER = 262, + UNIT = 263 + }; +#endif +/* Tokens. */ +#define COND 258 +#define REPEAT 259 +#define TYPE 260 +#define NAME 261 +#define NUMBER 262 +#define UNIT 263 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 40 "sysinfo.y" +{ + int i; + char *s; +} +/* Line 1489 of yacc.c. */ +#line 70 "sysinfo.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/binutils/syslex.c b/binutils/syslex.c new file mode 100644 index 000000000..aba400abb --- /dev/null +++ b/binutils/syslex.c @@ -0,0 +1,1903 @@ + +#line 3 "syslex.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#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. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +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 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - 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). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +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 realloc() it to grow it, and should free() 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; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* 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 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* 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". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* 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 = 0; /* 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 (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (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 = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 25 +#define YY_END_OF_BUFFER 26 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[81] = + { 0, + 0, 0, 26, 25, 7, 8, 5, 25, 1, 2, + 11, 11, 6, 3, 4, 25, 25, 25, 25, 25, + 25, 25, 0, 9, 11, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, + 13, 0, 0, 0, 0, 16, 0, 0, 0, 0, + 0, 12, 15, 0, 23, 0, 0, 0, 0, 0, + 0, 14, 18, 0, 0, 0, 0, 0, 17, 0, + 24, 0, 0, 0, 20, 22, 0, 21, 19, 0 + } ; + +static yyconst flex_int32_t 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, 1, 5, 1, 1, 1, 1, 1, 6, + 7, 1, 1, 1, 1, 1, 1, 8, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 1, 10, 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, + 11, 1, 12, 1, 1, 1, 13, 14, 15, 16, + + 17, 18, 19, 20, 21, 1, 1, 22, 1, 23, + 24, 25, 1, 26, 27, 28, 29, 30, 1, 31, + 32, 33, 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, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[34] = + { 0, + 1, 1, 2, 1, 1, 1, 1, 3, 3, 1, + 1, 1, 3, 3, 3, 3, 3, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[84] = + { 0, + 0, 0, 100, 101, 101, 101, 101, 94, 101, 101, + 26, 28, 0, 101, 101, 82, 26, 18, 74, 79, + 78, 81, 88, 101, 32, 0, 0, 76, 65, 62, + 61, 75, 20, 59, 61, 66, 58, 0, 57, 56, + 54, 63, 53, 62, 54, 101, 59, 48, 53, 46, + 59, 101, 44, 43, 101, 41, 55, 46, 53, 44, + 31, 101, 101, 39, 27, 21, 39, 19, 101, 35, + 101, 33, 26, 29, 101, 101, 28, 101, 101, 101, + 58, 61, 41 + } ; + +static yyconst flex_int16_t yy_def[84] = + { 0, + 80, 1, 80, 80, 80, 80, 80, 81, 80, 80, + 80, 80, 82, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 81, 80, 80, 83, 82, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 83, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, + 80, 80, 80 + } ; + +static yyconst flex_int16_t yy_nxt[135] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 4, 4, 4, 4, 4, + 19, 4, 4, 4, 4, 20, 21, 4, 4, 22, + 4, 4, 4, 25, 25, 25, 25, 32, 29, 25, + 25, 33, 44, 38, 79, 78, 30, 77, 45, 76, + 75, 74, 73, 72, 71, 70, 26, 31, 23, 23, + 23, 27, 69, 27, 68, 67, 66, 65, 64, 63, + 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, + 52, 51, 50, 49, 48, 47, 46, 43, 42, 41, + 40, 39, 24, 37, 36, 35, 34, 28, 24, 80, + + 3, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80 + } ; + +static yyconst flex_int16_t yy_chk[135] = + { 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, 11, 11, 12, 12, 18, 17, 25, + 25, 18, 33, 83, 77, 74, 17, 73, 33, 72, + 70, 68, 67, 66, 65, 64, 11, 17, 81, 81, + 81, 82, 61, 82, 60, 59, 58, 57, 56, 54, + 53, 51, 50, 49, 48, 47, 45, 44, 43, 42, + 41, 40, 39, 37, 36, 35, 34, 32, 31, 30, + 29, 28, 23, 22, 21, 20, 19, 16, 8, 3, + + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* 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 "syslex.l" +#line 2 "syslex.l" +/* Copyright 2001, 2003, 2005, 2007 Free Software Foundation, Inc. + + This file is part of GNU Binutils. + + 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, 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 GLD; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#include "config.h" +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif +#include "sysinfo.h" + +#define YY_NO_UNPUT + +#ifndef yywrap +static int yywrap (void) { return 1; } +#endif + +extern int yylex (void); +#line 542 "syslex.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#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_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t 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 \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#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 + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* 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 + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 39 "syslex.l" + +#line 697 "syslex.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#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 ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + 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 >= 81 ) + 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] != 101 ); + +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 40 "syslex.l" +{ return '(';} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 41 "syslex.l" +{ return ')';} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 42 "syslex.l" +{ return '[';} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 43 "syslex.l" +{ return ']';} + YY_BREAK +case 5: +YY_RULE_SETUP +#line 44 "syslex.l" +{ ; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 45 "syslex.l" +{ ; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 46 "syslex.l" +{ ; } + YY_BREAK +case 8: +/* rule 8 can match eol */ +YY_RULE_SETUP +#line 47 "syslex.l" +{ ; } + YY_BREAK +case 9: +/* rule 9 can match eol */ +YY_RULE_SETUP +#line 48 "syslex.l" +{ + yylval.s = malloc (yyleng - 1); + memcpy (yylval.s, yytext + 1, yyleng - 2); + yylval.s[yyleng - 2] = '\0'; + return NAME; + } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 55 "syslex.l" +{ + yylval.i = strtol(yytext,0,16); + return NUMBER; + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 60 "syslex.l" +{ + yylval.i = atoi(yytext); + return NUMBER; + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 66 "syslex.l" +{ yylval.i =1 ;return UNIT;} + YY_BREAK +case 13: +YY_RULE_SETUP +#line 67 "syslex.l" +{ yylval.i = 1; return UNIT;} + YY_BREAK +case 14: +YY_RULE_SETUP +#line 68 "syslex.l" +{ yylval.i= 8; return UNIT;} + YY_BREAK +case 15: +YY_RULE_SETUP +#line 69 "syslex.l" +{ yylval.i = 8; return UNIT;} + YY_BREAK +case 16: +YY_RULE_SETUP +#line 71 "syslex.l" +{ yylval.s = "INT"; return TYPE;} + YY_BREAK +case 17: +YY_RULE_SETUP +#line 72 "syslex.l" +{ yylval.s = "BARRAY"; return TYPE;} + YY_BREAK +case 18: +YY_RULE_SETUP +#line 73 "syslex.l" +{ yylval.s = "CHARS"; return TYPE;} + YY_BREAK +case 19: +YY_RULE_SETUP +#line 74 "syslex.l" +{ yylval.i = 0; return NUMBER;} + YY_BREAK +case 20: +YY_RULE_SETUP +#line 75 "syslex.l" +{ yylval.i = -4; return NUMBER;} + YY_BREAK +case 21: +YY_RULE_SETUP +#line 76 "syslex.l" +{ yylval.i = -2; return NUMBER; } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 77 "syslex.l" +{ yylval.i = -1; return NUMBER; } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 78 "syslex.l" +{ return COND;} + YY_BREAK +case 24: +YY_RULE_SETUP +#line 79 "syslex.l" +{ return REPEAT;} + YY_BREAK +case 25: +YY_RULE_SETUP +#line 80 "syslex.l" +ECHO; + YY_BREAK +#line 918 "syslex.c" +case YY_STATE_EOF(INITIAL): + 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_LVALUE->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_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->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 (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* 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. */ + yyrealloc((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_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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 (void) +{ + 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 >= 81 ) + 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 ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + 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 >= 81 ) + 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 == 80); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#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_LVALUE->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 ); + + /*FALLTHROUGH*/ + + 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 /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + 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_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = 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; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(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 *) yyalloc(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; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + 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( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + 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) yyalloc(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; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_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; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (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. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* 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 *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 80 "syslex.l" diff --git a/etc/configure.info b/etc/configure.info new file mode 100644 index 000000000..78cc7eba3 --- /dev/null +++ b/etc/configure.info @@ -0,0 +1,2773 @@ +This is configure.info, produced by makeinfo version 4.8 from +.././etc/configure.texi. + +INFO-DIR-SECTION GNU admin +START-INFO-DIR-ENTRY +* configure: (configure). The GNU configure and build system +END-INFO-DIR-ENTRY + + This file documents the GNU configure and build system. + + Copyright (C) 1998 Cygnus Solutions. + + 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 and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: configure.info, Node: Top, Next: Introduction, Up: (dir) + +GNU configure and build system +****************************** + +The GNU configure and build system. + +* Menu: + +* Introduction:: Introduction. +* Getting Started:: Getting Started. +* Files:: Files. +* Configuration Names:: Configuration Names. +* Cross Compilation Tools:: Cross Compilation Tools. +* Canadian Cross:: Canadian Cross. +* Cygnus Configure:: Cygnus Configure. +* Multilibs:: Multilibs. +* FAQ:: Frequently Asked Questions. +* Index:: Index. + + +File: configure.info, Node: Introduction, Next: Getting Started, Prev: Top, Up: Top + +1 Introduction +************** + +This document describes the GNU configure and build systems. It +describes how autoconf, automake, libtool, and make fit together. It +also includes a discussion of the older Cygnus configure system. + + This document does not describe in detail how to use each of the +tools; see the respective manuals for that. Instead, it describes +which files the developer must write, which files are machine generated +and how they are generated, and where certain common problems should be +addressed. + + This document draws on several sources, including the autoconf +manual by David MacKenzie (*note autoconf overview: (autoconf)Top.), +the automake manual by David MacKenzie and Tom Tromey (*note automake +overview: (automake)Top.), the libtool manual by Gordon Matzigkeit +(*note libtool overview: (libtool)Top.), and the Cygnus configure +manual by K. Richard Pixley. + +* Menu: + +* Goals:: Goals. +* Tools:: The tools. +* History:: History. +* Building:: Building. + + +File: configure.info, Node: Goals, Next: Tools, Up: Introduction + +1.1 Goals +========= + +The GNU configure and build system has two main goals. + + The first is to simplify the development of portable programs. The +system permits the developer to concentrate on writing the program, +simplifying many details of portability across Unix and even Windows +systems, and permitting the developer to describe how to build the +program using simple rules rather than complex Makefiles. + + The second is to simplify the building of programs distributed as +source code. All programs are built using a simple, standardized, two +step process. The program builder need not install any special tools in +order to build the program. + + +File: configure.info, Node: Tools, Next: History, Prev: Goals, Up: Introduction + +1.2 Tools +========= + +The GNU configure and build system is comprised of several different +tools. Program developers must build and install all of these tools. + + People who just want to build programs from distributed sources +normally do not need any special tools beyond a Unix shell, a make +program, and a C compiler. + +autoconf + provides a general portability framework, based on testing the + features of the host system at build time. + +automake + a system for describing how to build a program, permitting the + developer to write a simplified `Makefile'. + +libtool + a standardized approach to building shared libraries. + +gettext + provides a framework for translation of text messages into other + languages; not really discussed in this document. + +m4 + autoconf requires the GNU version of m4; the standard Unix m4 does + not suffice. + +perl + automake requires perl. + + +File: configure.info, Node: History, Next: Building, Prev: Tools, Up: Introduction + +1.3 History +=========== + +This is a very brief and probably inaccurate history. + + As the number of Unix variants increased during the 1980s, it became +harder to write programs which could run on all variants. While it was +often possible to use `#ifdef' to identify particular systems, +developers frequently did not have access to every system, and the +characteristics of some systems changed from version to version. + + By 1992, at least three different approaches had been developed: + * The Metaconfig program, by Larry Wall, Harlan Stenn, and Raphael + Manfredi. + + * The Cygnus configure script, by K. Richard Pixley, and the gcc + configure script, by Richard Stallman. These use essentially the + same approach, and the developers communicated regularly. + + * The autoconf program, by David MacKenzie. + + The Metaconfig program is still used for Perl and a few other +programs. It is part of the Dist package. I do not know if it is +being developed. + + In 1994, David MacKenzie and others modified autoconf to incorporate +all the features of Cygnus configure. Since then, there has been a +slow but steady conversion of GNU programs from Cygnus configure to +autoconf. gcc has been converted, eliminating the gcc configure script. + + GNU autoconf was regularly maintained until late 1996. As of this +writing in June, 1998, it has no public maintainer. + + Most programs are built using the make program, which requires the +developer to write Makefiles describing how to build the programs. +Since most programs are built in pretty much the same way, this led to a +lot of duplication. + + The X Window system is built using the imake tool, which uses a +database of rules to eliminate the duplication. However, building a +tool which was developed using imake requires that the builder have +imake installed, violating one of the goals of the GNU system. + + The new BSD make provides a standard library of Makefile fragments, +which permits developers to write very simple Makefiles. However, this +requires that the builder install the new BSD make program. + + In 1994, David MacKenzie wrote the first version of automake, which +permitted writing a simple build description which was converted into a +Makefile which could be used by the standard make program. In 1995, Tom +Tromey completely rewrote automake in Perl, and he continues to enhance +it. + + Various free packages built libraries, and by around 1995 several +included support to build shared libraries on various platforms. +However, there was no consistent approach. In early 1996, Gordon +Matzigkeit began working on libtool, which provided a standardized +approach to building shared libraries. This was integrated into +automake from the start. + + The development of automake and libtool was driven by the GNITS +project, a group of GNU maintainers who designed standardized tools to +help meet the GNU coding standards. + + +File: configure.info, Node: Building, Prev: History, Up: Introduction + +1.4 Building +============ + +Most readers of this document should already know how to build a tool by +running `configure' and `make'. This section may serve as a quick +introduction or reminder. + + Building a tool is normally as simple as running `configure' +followed by `make'. You should normally run `configure' from an empty +directory, using some path to refer to the `configure' script in the +source directory. The directory in which you run `configure' is called +the "object directory". + + In order to use a object directory which is different from the source +directory, you must be using the GNU version of `make', which has the +required `VPATH' support. Despite this restriction, using a different +object directory is highly recommended: + * It keeps the files generated during the build from cluttering up + your sources. + + * It permits you to remove the built files by simply removing the + entire build directory. + + * It permits you to build from the same sources with several sets of + configure options simultaneously. + + If you don't have GNU `make', you will have to run `configure' in +the source directory. All GNU packages should support this; in +particular, GNU packages should not assume the presence of GNU `make'. + + After running `configure', you can build the tools by running `make'. + + To install the tools, run `make install'. Installing the tools will +copy the programs and any required support files to the "installation +directory". The location of the installation directory is controlled +by `configure' options, as described below. + + In the Cygnus tree at present, the info files are built and +installed as a separate step. To build them, run `make info'. To +install them, run `make install-info'. The equivalent html files are +also built and installed in a separate step. To build the html files, +run `make html'. To install the html files run `make install-html'. + + All `configure' scripts support a wide variety of options. The most +interesting ones are `--with' and `--enable' options which are +generally specific to particular tools. You can usually use the +`--help' option to get a list of interesting options for a particular +configure script. + + The only generic options you are likely to use are the `--prefix' +and `--exec-prefix' options. These options are used to specify the +installation directory. + + The directory named by the `--prefix' option will hold machine +independent files such as info files. + + The directory named by the `--exec-prefix' option, which is normally +a subdirectory of the `--prefix' directory, will hold machine dependent +files such as executables. + + The default for `--prefix' is `/usr/local'. The default for +`--exec-prefix' is the value used for `--prefix'. + + The convention used in Cygnus releases is to use a `--prefix' option +of `/usr/cygnus/RELEASE', where RELEASE is the name of the release, and +to use a `--exec-prefix' option of `/usr/cygnus/RELEASE/H-HOST', where +HOST is the configuration name of the host system (*note Configuration +Names::). + + Do not use either the source or the object directory as the +installation directory. That will just lead to confusion. + + +File: configure.info, Node: Getting Started, Next: Files, Prev: Introduction, Up: Top + +2 Getting Started +***************** + +To start using the GNU configure and build system with your software +package, you must write three files, and you must run some tools to +manually generate additional files. + +* Menu: + +* Write configure.in:: Write configure.in. +* Write Makefile.am:: Write Makefile.am. +* Write acconfig.h:: Write acconfig.h. +* Generate files:: Generate files. +* Getting Started Example:: Example. + + +File: configure.info, Node: Write configure.in, Next: Write Makefile.am, Up: Getting Started + +2.1 Write configure.in +====================== + +You must first write the file `configure.in'. This is an autoconf +input file, and the autoconf manual describes in detail what this file +should look like. + + You will write tests in your `configure.in' file to check for +conditions that may change from one system to another, such as the +presence of particular header files or functions. + + For example, not all systems support the `gettimeofday' function. +If you want to use the `gettimeofday' function when it is available, +and to use some other function when it is not, you would check for this +by putting `AC_CHECK_FUNCS(gettimeofday)' in `configure.in'. + + When the configure script is run at build time, this will arrange to +define the preprocessor macro `HAVE_GETTIMEOFDAY' to the value 1 if the +`gettimeofday' function is available, and to not define the macro at +all if the function is not available. Your code can then use `#ifdef' +to test whether it is safe to call `gettimeofday'. + + If you have an existing body of code, the `autoscan' program may +help identify potential portability problems, and hence configure tests +that you will want to use. *Note Invoking autoscan: (autoconf)Invoking +autoscan. + + Another handy tool for an existing body of code is `ifnames'. This +will show you all the preprocessor conditionals that the code already +uses. *Note Invoking ifnames: (autoconf)Invoking ifnames. + + Besides the portability tests which are specific to your particular +package, every `configure.in' file should contain the following macros. + +`AC_INIT' + This macro takes a single argument, which is the name of a file in + your package. For example, `AC_INIT(foo.c)'. + +`AC_PREREQ(VERSION)' + This macro is optional. It may be used to indicate the version of + `autoconf' that you are using. This will prevent users from + running an earlier version of `autoconf' and perhaps getting an + invalid `configure' script. For example, `AC_PREREQ(2.12)'. + +`AM_INIT_AUTOMAKE' + This macro takes two arguments: the name of the package, and a + version number. For example, `AM_INIT_AUTOMAKE(foo, 1.0)'. (This + macro is not needed if you are not using automake). + +`AM_CONFIG_HEADER' + This macro names the header file which will hold the preprocessor + macro definitions at run time. Normally this should be + `config.h'. Your sources would then use `#include "config.h"' to + include it. + + This macro may optionally name the input file for that header + file; by default, this is `config.h.in', but that file name works + poorly on DOS filesystems. Therefore, it is often better to name + it explicitly as `config.in'. + + This is what you should normally put in `configure.in': + AM_CONFIG_HEADER(config.h:config.in) + + (If you are not using automake, use `AC_CONFIG_HEADER' rather than + `AM_CONFIG_HEADER'). + +`AM_MAINTAINER_MODE' + This macro always appears in Cygnus configure scripts. Other + programs may or may not use it. + + If this macro is used, the `--enable-maintainer-mode' option is + required to enable automatic rebuilding of generated files used by + the configure system. This of course requires that developers be + aware of, and use, that option. + + If this macro is not used, then the generated files will always be + rebuilt automatically. This will cause problems if the wrong + versions of autoconf, automake, or others are in the builder's + `PATH'. + + (If you are not using automake, you do not need to use this macro). + +`AC_EXEEXT' + Either this macro or `AM_EXEEXT' always appears in Cygnus configure + files. Other programs may or may not use one of them. + + This macro looks for the executable suffix used on the host + system. On Unix systems, this is the empty string. On Windows + systems, this is `.exe'. This macro directs automake to use the + executable suffix as appropriate when creating programs. This + macro does not take any arguments. + + The `AC_EXEEXT' form is new, and is part of a Cygnus patch to + autoconf to support compiling with Visual C++. Older programs use + `AM_EXEEXT' instead. + + (Programs which do not use automake use neither `AC_EXEEXT' nor + `AM_EXEEXT'). + +`AC_PROG_CC' + If you are writing C code, you will normally want to use this + macro. It locates the C compiler to use. It does not take any + arguments. + + However, if this `configure.in' file is for a library which is to + be compiled by a cross compiler which may not fully work, then you + will not want to use `AC_PROG_CC'. Instead, you will want to use a + variant which does not call the macro `AC_PROG_CC_WORKS'. Examples + can be found in various `configure.in' files for libraries that are + compiled with cross compilers, such as libiberty or libgloss. + This is essentially a bug in autoconf, and there will probably be + a better workaround at some point. + +`AC_PROG_CXX' + If you are writing C++ code, you will want to use this macro. It + locates the C++ compiler to use. It does not take any arguments. + The same cross compiler comments apply as for `AC_PROG_CC'. + +`AM_PROG_LIBTOOL' + If you want to build libraries, and you want to permit them to be + shared, or you want to link against libraries which were built + using libtool, then you will need this macro. This macro is + required in order to use libtool. + + By default, this will cause all libraries to be built as shared + libraries. To prevent this-to change the default-use + `AM_DISABLE_SHARED' before `AM_PROG_LIBTOOL'. The configure + options `--enable-shared' and `--disable-shared' may be used to + override the default at build time. + +`AC_DEFINE(_GNU_SOURCE)' + GNU packages should normally include this line before any other + feature tests. This defines the macro `_GNU_SOURCE' when + compiling, which directs the libc header files to provide the + standard GNU system interfaces including all GNU extensions. If + this macro is not defined, certain GNU extensions may not be + available. + +`AC_OUTPUT' + This macro takes a list of file names which the configure process + should produce. This is normally a list of one or more `Makefile' + files in different directories. If your package lives entirely in + a single directory, you would use simply `AC_OUTPUT(Makefile)'. + If you also have, for example, a `lib' subdirectory, you would use + `AC_OUTPUT(Makefile lib/Makefile)'. + + If you want to use locally defined macros in your `configure.in' +file, then you will need to write a `acinclude.m4' file which defines +them (if not using automake, this file is called `aclocal.m4'). +Alternatively, you can put separate macros in an `m4' subdirectory, and +put `ACLOCAL_AMFLAGS = -I m4' in your `Makefile.am' file so that the +`aclocal' program will be able to find them. + + The different macro prefixes indicate which tool defines the macro. +Macros which start with `AC_' are part of autoconf. Macros which start +with `AM_' are provided by automake or libtool. + + +File: configure.info, Node: Write Makefile.am, Next: Write acconfig.h, Prev: Write configure.in, Up: Getting Started + +2.2 Write Makefile.am +===================== + +You must write the file `Makefile.am'. This is an automake input file, +and the automake manual describes in detail what this file should look +like. + + The automake commands in `Makefile.am' mostly look like variable +assignments in a `Makefile'. automake recognizes special variable +names, and automatically add make rules to the output as needed. + + There will be one `Makefile.am' file for each directory in your +package. For each directory with subdirectories, the `Makefile.am' +file should contain the line + SUBDIRS = DIR DIR ... + where each DIR is the name of a subdirectory. + + For each `Makefile.am', there should be a corresponding `Makefile' +in the `AC_OUTPUT' macro in `configure.in'. + + Every `Makefile.am' written at Cygnus should contain the line + AUTOMAKE_OPTIONS = cygnus + This puts automake into Cygnus mode. See the automake manual for +details. + + You may to include the version number of `automake' that you are +using on the `AUTOMAKE_OPTIONS' line. For example, + AUTOMAKE_OPTIONS = cygnus 1.3 + This will prevent users from running an earlier version of +`automake' and perhaps getting an invalid `Makefile.in'. + + If your package builds a program, then in the directory where that +program is built you will normally want a line like + bin_PROGRAMS = PROGRAM + where PROGRAM is the name of the program. You will then want a line +like + PROGRAM_SOURCES = FILE FILE ... + where each FILE is the name of a source file to link into the +program (e.g., `foo.c'). + + If your package builds a library, and you do not want the library to +ever be built as a shared library, then in the directory where that +library is built you will normally want a line like + lib_LIBRARIES = libNAME.a + where `libNAME.a' is the name of the library. You will then want a +line like + libNAME_a_SOURCES = FILE FILE ... + where each FILE is the name of a source file to add to the library. + + If your package builds a library, and you want to permit building the +library as a shared library, then in the directory where that library is +built you will normally want a line like + lib_LTLIBRARIES = libNAME.la + The use of `LTLIBRARIES', and the `.la' extension, indicate a +library to be built using libtool. As usual, you will then want a line +like + libNAME_la_SOURCES = FILE FILE ... + + The strings `bin' and `lib' that appear above in `bin_PROGRAMS' and +`lib_LIBRARIES' are not arbitrary. They refer to particular +directories, which may be set by the `--bindir' and `--libdir' options +to `configure'. If those options are not used, the default values are +based on the `--prefix' or `--exec-prefix' options to `configure'. It +is possible to use other names if the program or library should be +installed in some other directory. + + The `Makefile.am' file may also contain almost anything that may +appear in a normal `Makefile'. automake also supports many other +special variables, as well as conditionals. + + See the automake manual for more information. + + +File: configure.info, Node: Write acconfig.h, Next: Generate files, Prev: Write Makefile.am, Up: Getting Started + +2.3 Write acconfig.h +==================== + +If you are generating a portability header file, (i.e., you are using +`AM_CONFIG_HEADER' in `configure.in'), then you will have to write a +`acconfig.h' file. It will have to contain the following lines. + + /* Name of package. */ + #undef PACKAGE + + /* Version of package. */ + #undef VERSION + + This requirement is really a bug in the system, and the requirement +may be eliminated at some later date. + + The `acconfig.h' file will also similar comment and `#undef' lines +for any unusual macros in the `configure.in' file, including any macro +which appears in a `AC_DEFINE' macro. + + In particular, if you are writing a GNU package and therefore include +`AC_DEFINE(_GNU_SOURCE)' in `configure.in' as suggested above, you will +need lines like this in `acconfig.h': + /* Enable GNU extensions. */ + #undef _GNU_SOURCE + + Normally the `autoheader' program will inform you of any such +requirements by printing an error message when it is run. However, if +you do anything particular odd in your `configure.in' file, you will +have to make sure that the right entries appear in `acconfig.h', since +otherwise the results of the tests may not be available in the +`config.h' file which your code will use. + + (Thee `PACKAGE' and `VERSION' lines are not required if you are not +using automake, and in that case you may not need a `acconfig.h' file +at all). + + +File: configure.info, Node: Generate files, Next: Getting Started Example, Prev: Write acconfig.h, Up: Getting Started + +2.4 Generate files +================== + +Once you have written `configure.in', `Makefile.am', `acconfig.h', and +possibly `acinclude.m4', you must use autoconf and automake programs to +produce the first versions of the generated files. This is done by +executing the following sequence of commands. + + aclocal + autoconf + autoheader + automake + + The `aclocal' and `automake' commands are part of the automake +package, and the `autoconf' and `autoheader' commands are part of the +autoconf package. + + If you are using a `m4' subdirectory for your macros, you will need +to use the `-I m4' option when you run `aclocal'. + + If you are not using the Cygnus tree, use the `-a' option when +running `automake' command in order to copy the required support files +into your source directory. + + If you are using libtool, you must build and install the libtool +package with the same `--prefix' and `--exec-prefix' options as you +used with the autoconf and automake packages. You must do this before +running any of the above commands. If you are not using the Cygnus +tree, you will need to run the `libtoolize' program to copy the libtool +support files into your directory. + + Once you have managed to run these commands without getting any +errors, you should create a new empty directory, and run the `configure' +script which will have been created by `autoconf' with the +`--enable-maintainer-mode' option. This will give you a set of +Makefiles which will include rules to automatically rebuild all the +generated files. + + After doing that, whenever you have changed some of the input files +and want to regenerated the other files, go to your object directory +and run `make'. Doing this is more reliable than trying to rebuild the +files manually, because there are complex order dependencies and it is +easy to forget something. + + +File: configure.info, Node: Getting Started Example, Prev: Generate files, Up: Getting Started + +2.5 Example +=========== + +Let's consider a trivial example. + + Suppose we want to write a simple version of `touch'. Our program, +which we will call `poke', will take a single file name argument, and +use the `utime' system call to set the modification and access times of +the file to the current time. We want this program to be highly +portable. + + We'll first see what this looks like without using autoconf and +automake, and then see what it looks like with them. + +* Menu: + +* Getting Started Example 1:: First Try. +* Getting Started Example 2:: Second Try. +* Getting Started Example 3:: Third Try. +* Generate Files in Example:: Generate Files. + + +File: configure.info, Node: Getting Started Example 1, Next: Getting Started Example 2, Up: Getting Started Example + +2.5.1 First Try +--------------- + +Here is our first try at `poke.c'. Note that we've written it without +ANSI/ISO C prototypes, since we want it to be highly portable. + + #include + #include + #include + #include + + int + main (argc, argv) + int argc; + char **argv; + { + if (argc != 2) + { + fprintf (stderr, "Usage: poke file\n"); + exit (1); + } + + if (utime (argv[1], NULL) < 0) + { + perror ("utime"); + exit (1); + } + + exit (0); + } + + We also write a simple `Makefile'. + + CC = gcc + CFLAGS = -g -O2 + + all: poke + + poke: poke.o + $(CC) -o poke $(CFLAGS) $(LDFLAGS) poke.o + + So far, so good. + + Unfortunately, there are a few problems. + + On older Unix systems derived from BSD 4.3, the `utime' system call +does not accept a second argument of `NULL'. On those systems, we need +to pass a pointer to `struct utimbuf' structure. Unfortunately, even +older systems don't define that structure; on those systems, we need to +pass an array of two `long' values. + + The header file `stdlib.h' was invented by ANSI C, and older systems +don't have a copy. We included it above to get a declaration of `exit'. + + We can find some of these portability problems by running +`autoscan', which will create a `configure.scan' file which we can use +as a prototype for our `configure.in' file. I won't show the output, +but it will notice the potential problems with `utime' and `stdlib.h'. + + In our `Makefile', we don't provide any way to install the program. +This doesn't matter much for such a simple example, but a real program +will need an `install' target. For that matter, we will also want a +`clean' target. + + +File: configure.info, Node: Getting Started Example 2, Next: Getting Started Example 3, Prev: Getting Started Example 1, Up: Getting Started Example + +2.5.2 Second Try +---------------- + +Here is our second try at this program. + + We modify `poke.c' to use preprocessor macros to control what +features are available. (I've cheated a bit by using the same macro +names which autoconf will use). + + #include + + #ifdef STDC_HEADERS + #include + #endif + + #include + + #ifdef HAVE_UTIME_H + #include + #endif + + #ifndef HAVE_UTIME_NULL + + #include + + #ifndef HAVE_STRUCT_UTIMBUF + + struct utimbuf + { + long actime; + long modtime; + }; + + #endif + + static int + utime_now (file) + char *file; + { + struct utimbuf now; + + now.actime = now.modtime = time (NULL); + return utime (file, &now); + } + + #define utime(f, p) utime_now (f) + + #endif /* HAVE_UTIME_NULL */ + + int + main (argc, argv) + int argc; + char **argv; + { + if (argc != 2) + { + fprintf (stderr, "Usage: poke file\n"); + exit (1); + } + + if (utime (argv[1], NULL) < 0) + { + perror ("utime"); + exit (1); + } + + exit (0); + } + + Here is the associated `Makefile'. We've added support for the +preprocessor flags we use. We've also added `install' and `clean' +targets. + + # Set this to your installation directory. + bindir = /usr/local/bin + + # Uncomment this if you have the standard ANSI/ISO C header files. + # STDC_HDRS = -DSTDC_HEADERS + + # Uncomment this if you have utime.h. + # UTIME_H = -DHAVE_UTIME_H + + # Uncomment this if utime (FILE, NULL) works on your system. + # UTIME_NULL = -DHAVE_UTIME_NULL + + # Uncomment this if struct utimbuf is defined in utime.h. + # UTIMBUF = -DHAVE_STRUCT_UTIMBUF + + CC = gcc + CFLAGS = -g -O2 + + ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS) + + all: poke + + poke: poke.o + $(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o + + .c.o: + $(CC) -c $(ALL_CFLAGS) poke.c + + install: poke + cp poke $(bindir)/poke + + clean: + rm poke poke.o + + Some problems with this approach should be clear. + + Users who want to compile poke will have to know how `utime' works +on their systems, so that they can uncomment the `Makefile' correctly. + + The installation is done using `cp', but many systems have an +`install' program which may be used, and which supports optional +features such as stripping debugging information out of the installed +binary. + + The use of `Makefile' variables like `CC', `CFLAGS' and `LDFLAGS' +follows the requirements of the GNU standards. This is convenient for +all packages, since it reduces surprises for users. However, it is +easy to get the details wrong, and wind up with a slightly nonstandard +distribution. + + +File: configure.info, Node: Getting Started Example 3, Next: Generate Files in Example, Prev: Getting Started Example 2, Up: Getting Started Example + +2.5.3 Third Try +--------------- + +For our third try at this program, we will write a `configure.in' +script to discover the configuration features on the host system, rather +than requiring the user to edit the `Makefile'. We will also write a +`Makefile.am' rather than a `Makefile'. + + The only change to `poke.c' is to add a line at the start of the +file: + #include "config.h" + + The new `configure.in' file is as follows. + + AC_INIT(poke.c) + AM_INIT_AUTOMAKE(poke, 1.0) + AM_CONFIG_HEADER(config.h:config.in) + AC_PROG_CC + AC_HEADER_STDC + AC_CHECK_HEADERS(utime.h) + AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF)) + AC_FUNC_UTIME_NULL + AC_OUTPUT(Makefile) + + The first four macros in this file, and the last one, were described +above; see *Note Write configure.in::. If we omit these macros, then +when we run `automake' we will get a reminder that we need them. + + The other macros are standard autoconf macros. + +`AC_HEADER_STDC' + Check for standard C headers. + +`AC_CHECK_HEADERS' + Check whether a particular header file exists. + +`AC_EGREP_HEADER' + Check for a particular string in a particular header file, in this + case checking for `utimbuf' in `utime.h'. + +`AC_FUNC_UTIME_NULL' + Check whether `utime' accepts a NULL second argument to set the + file change time to the current time. + + See the autoconf manual for a more complete description. + + The new `Makefile.am' file is as follows. Note how simple this is +compared to our earlier `Makefile'. + + bin_PROGRAMS = poke + + poke_SOURCES = poke.c + + This means that we should build a single program name `poke'. It +should be installed in the binary directory, which we called `bindir' +earlier. The program `poke' is built from the source file `poke.c'. + + We must also write a `acconfig.h' file. Besides `PACKAGE' and +`VERSION', which must be mentioned for all packages which use automake, +we must include `HAVE_STRUCT_UTIMBUF', since we mentioned it in an +`AC_DEFINE'. + + /* Name of package. */ + #undef PACKAGE + + /* Version of package. */ + #undef VERSION + + /* Whether utime.h defines struct utimbuf. */ + #undef HAVE_STRUCT_UTIMBUF + + +File: configure.info, Node: Generate Files in Example, Prev: Getting Started Example 3, Up: Getting Started Example + +2.5.4 Generate Files +-------------------- + +We must now generate the other files, using the following commands. + + aclocal + autoconf + autoheader + automake + + When we run `autoheader', it will remind us of any macros we forgot +to add to `acconfig.h'. + + When we run `automake', it will want to add some files to our +distribution. It will add them automatically if we use the +`--add-missing' option. + + By default, `automake' will run in GNU mode, which means that it +will want us to create certain additional files; as of this writing, it +will want `NEWS', `README', `AUTHORS', and `ChangeLog', all of which +are files which should appear in a standard GNU distribution. We can +either add those files, or run `automake' with the `--foreign' option. + + Running these tools will generate the following files, all of which +are described in the next chapter. + + * `aclocal.m4' + + * `configure' + + * `config.in' + + * `Makefile.in' + + * `stamp-h.in' + + +File: configure.info, Node: Files, Next: Configuration Names, Prev: Getting Started, Up: Top + +3 Files +******* + +As was seen in the previous chapter, the GNU configure and build system +uses a number of different files. The developer must write a few files. +The others are generated by various tools. + + The system is rather flexible, and can be used in many different +ways. In describing the files that it uses, I will describe the common +case, and mention some other cases that may arise. + +* Menu: + +* Developer Files:: Developer Files. +* Build Files:: Build Files. +* Support Files:: Support Files. + + +File: configure.info, Node: Developer Files, Next: Build Files, Up: Files + +3.1 Developer Files +=================== + +This section describes the files written or generated by the developer +of a package. + +* Menu: + +* Developer Files Picture:: Developer Files Picture. +* Written Developer Files:: Written Developer Files. +* Generated Developer Files:: Generated Developer Files. + + +File: configure.info, Node: Developer Files Picture, Next: Written Developer Files, Up: Developer Files + +3.1.1 Developer Files Picture +----------------------------- + +Here is a picture of the files which are written by the developer, the +generated files which would be included with a complete source +distribution, and the tools which create those files. The file names +are plain text and the tool names are enclosed by `*' characters (e.g., +`autoheader' is the name of a tool, not the name of a file). + + acconfig.h configure.in Makefile.am + | | | + | --------------+---------------------- | + | | | | | + v v | acinclude.m4 | | + *autoheader* | | v v + | | v --->*automake* + v |--->*aclocal* | | + config.in | | | v + | v | Makefile.in + | aclocal.m4--- + | | + v v + *autoconf* + | + v + configure + + +File: configure.info, Node: Written Developer Files, Next: Generated Developer Files, Prev: Developer Files Picture, Up: Developer Files + +3.1.2 Written Developer Files +----------------------------- + +The following files would be written by the developer. + +`configure.in' + This is the configuration script. This script contains + invocations of autoconf macros. It may also contain ordinary + shell script code. This file will contain feature tests for + portability issues. The last thing in the file will normally be + an `AC_OUTPUT' macro listing which files to create when the + builder runs the configure script. This file is always required + when using the GNU configure system. *Note Write configure.in::. + +`Makefile.am' + This is the automake input file. It describes how the code should + be built. It consists of definitions of automake variables. It + may also contain ordinary Makefile targets. This file is only + needed when using automake (newer tools normally use automake, but + there are still older tools which have not been converted, in + which the developer writes `Makefile.in' directly). *Note Write + Makefile.am::. + +`acconfig.h' + When the configure script creates a portability header file, by + using `AM_CONFIG_HEADER' (or, if not using automake, + `AC_CONFIG_HEADER'), this file is used to describe macros which are + not recognized by the `autoheader' command. This is normally a + fairly uninteresting file, consisting of a collection of `#undef' + lines with comments. Normally any call to `AC_DEFINE' in + `configure.in' will require a line in this file. *Note Write + acconfig.h::. + +`acinclude.m4' + This file is not always required. It defines local autoconf + macros. These macros may then be used in `configure.in'. If you + don't need any local autoconf macros, then you don't need this + file at all. In fact, in general, you never need local autoconf + macros, since you can put everything in `configure.in', but + sometimes a local macro is convenient. + + Newer tools may omit `acinclude.m4', and instead use a + subdirectory, typically named `m4', and define `ACLOCAL_AMFLAGS = + -I m4' in `Makefile.am' to force `aclocal' to look there for macro + definitions. The macro definitions are then placed in separate + files in that directory. + + The `acinclude.m4' file is only used when using automake; in older + tools, the developer writes `aclocal.m4' directly, if it is needed. + + +File: configure.info, Node: Generated Developer Files, Prev: Written Developer Files, Up: Developer Files + +3.1.3 Generated Developer Files +------------------------------- + +The following files would be generated by the developer. + + When using automake, these files are normally not generated manually +after the first time. Instead, the generated `Makefile' contains rules +to automatically rebuild the files as required. When +`AM_MAINTAINER_MODE' is used in `configure.in' (the normal case in +Cygnus code), the automatic rebuilding rules will only be defined if +you configure using the `--enable-maintainer-mode' option. + + When using automatic rebuilding, it is important to ensure that all +the various tools have been built and installed on your `PATH'. Using +automatic rebuilding is highly recommended, so much so that I'm not +going to explain what you have to do if you don't use it. + +`configure' + This is the configure script which will be run when building the + package. This is generated by `autoconf' from `configure.in' and + `aclocal.m4'. This is a shell script. + +`Makefile.in' + This is the file which the configure script will turn into the + `Makefile' at build time. This file is generated by `automake' + from `Makefile.am'. If you aren't using automake, you must write + this file yourself. This file is pretty much a normal `Makefile', + with some configure substitutions for certain variables. + +`aclocal.m4' + This file is created by the `aclocal' program, based on the + contents of `configure.in' and `acinclude.m4' (or, as noted in the + description of `acinclude.m4' above, on the contents of an `m4' + subdirectory). This file contains definitions of autoconf macros + which `autoconf' will use when generating the file `configure'. + These autoconf macros may be defined by you in `acinclude.m4' or + they may be defined by other packages such as automake, libtool or + gettext. If you aren't using automake, you will normally write + this file yourself; in that case, if `configure.in' uses only + standard autoconf macros, this file will not be needed at all. + +`config.in' + This file is created by `autoheader' based on `acconfig.h' and + `configure.in'. At build time, the configure script will define + some of the macros in it to create `config.h', which may then be + included by your program. This permits your C code to use + preprocessor conditionals to change its behaviour based on the + characteristics of the host system. This file may also be called + `config.h.in'. + +`stamp.h-in' + This rather uninteresting file, which I omitted from the picture, + is generated by `automake'. It always contains the string + `timestamp'. It is used as a timestamp file indicating whether + `config.in' is up to date. Using a timestamp file means that + `config.in' can be marked as up to date without actually changing + its modification time. This is useful since `config.in' depends + upon `configure.in', but it is easy to change `configure.in' in a + way which does not affect `config.in'. + + +File: configure.info, Node: Build Files, Next: Support Files, Prev: Developer Files, Up: Files + +3.2 Build Files +=============== + +This section describes the files which are created at configure and +build time. These are the files which somebody who builds the package +will see. + + Of course, the developer will also build the package. The +distinction between developer files and build files is not that the +developer does not see the build files, but that somebody who only +builds the package does not have to worry about the developer files. + +* Menu: + +* Build Files Picture:: Build Files Picture. +* Build Files Description:: Build Files Description. + + +File: configure.info, Node: Build Files Picture, Next: Build Files Description, Up: Build Files + +3.2.1 Build Files Picture +------------------------- + +Here is a picture of the files which will be created at build time. +`config.status' is both a created file and a shell script which is run +to create other files, and the picture attempts to show that. + + config.in *configure* Makefile.in + | | | + | v | + | config.status | + | | | + *config.status*<======+==========>*config.status* + | | + v v + config.h Makefile + + +File: configure.info, Node: Build Files Description, Prev: Build Files Picture, Up: Build Files + +3.2.2 Build Files Description +----------------------------- + +This is a description of the files which are created at build time. + +`config.status' + The first step in building a package is to run the `configure' + script. The `configure' script will create the file + `config.status', which is itself a shell script. When you first + run `configure', it will automatically run `config.status'. An + `Makefile' derived from an automake generated `Makefile.in' will + contain rules to automatically run `config.status' again when + necessary to recreate certain files if their inputs change. + +`Makefile' + This is the file which make will read to build the program. The + `config.status' script will transform `Makefile.in' into + `Makefile'. + +`config.h' + This file defines C preprocessor macros which C code can use to + adjust its behaviour on different systems. The `config.status' + script will transform `config.in' into `config.h'. + +`config.cache' + This file did not fit neatly into the picture, and I omitted it. + It is used by the `configure' script to cache results between + runs. This can be an important speedup. If you modify + `configure.in' in such a way that the results of old tests should + change (perhaps you have added a new library to `LDFLAGS'), then + you will have to remove `config.cache' to force the tests to be + rerun. + + The autoconf manual explains how to set up a site specific cache + file. This can speed up running `configure' scripts on your + system. + +`stamp.h' + This file, which I omitted from the picture, is similar to + `stamp-h.in'. It is used as a timestamp file indicating whether + `config.h' is up to date. This is useful since `config.h' depends + upon `config.status', but it is easy for `config.status' to change + in a way which does not affect `config.h'. + + +File: configure.info, Node: Support Files, Prev: Build Files, Up: Files + +3.3 Support Files +================= + +The GNU configure and build system requires several support files to be +included with your distribution. You do not normally need to concern +yourself with these. If you are using the Cygnus tree, most are already +present. Otherwise, they will be installed with your source by +`automake' (with the `--add-missing' option) and `libtoolize'. + + You don't have to put the support files in the top level directory. +You can put them in a subdirectory, and use the `AC_CONFIG_AUX_DIR' +macro in `configure.in' to tell `automake' and the `configure' script +where they are. + + In this section, I describe the support files, so that you can know +what they are and why they are there. + +`ABOUT-NLS' + Added by automake if you are using gettext. This is a + documentation file about the gettext project. + +`ansi2knr.c' + Used by an automake generated `Makefile' if you put `ansi2knr' in + `AUTOMAKE_OPTIONS' in `Makefile.am'. This permits compiling ANSI + C code with a K&R C compiler. + +`ansi2knr.1' + The man page which goes with `ansi2knr.c'. + +`config.guess' + A shell script which determines the configuration name for the + system on which it is run. + +`config.sub' + A shell script which canonicalizes a configuration name entered by + a user. + +`elisp-comp' + Used to compile Emacs LISP files. + +`install-sh' + A shell script which installs a program. This is used if the + configure script can not find an install binary. + +`ltconfig' + Used by libtool. This is a shell script which configures libtool + for the particular system on which it is used. + +`ltmain.sh' + Used by libtool. This is the actual libtool script which is used, + after it is configured by `ltconfig' to build a library. + +`mdate-sh' + A shell script used by an automake generated `Makefile' to pretty + print the modification time of a file. This is used to maintain + version numbers for texinfo files. + +`missing' + A shell script used if some tool is missing entirely. This is + used by an automake generated `Makefile' to avoid certain sorts of + timestamp problems. + +`mkinstalldirs' + A shell script which creates a directory, including all parent + directories. This is used by an automake generated `Makefile' + during installation. + +`texinfo.tex' + Required if you have any texinfo files. This is used when + converting Texinfo files into DVI using `texi2dvi' and TeX. + +`ylwrap' + A shell script used by an automake generated `Makefile' to run + programs like `bison', `yacc', `flex', and `lex'. These programs + default to producing output files with a fixed name, and the + `ylwrap' script runs them in a subdirectory to avoid file name + conflicts when using a parallel make program. + + +File: configure.info, Node: Configuration Names, Next: Cross Compilation Tools, Prev: Files, Up: Top + +4 Configuration Names +********************* + +The GNU configure system names all systems using a "configuration +name". All such names used to be triplets (they may now contain four +parts in certain cases), and the term "configuration triplet" is still +seen. + +* Menu: + +* Configuration Name Definition:: Configuration Name Definition. +* Using Configuration Names:: Using Configuration Names. + + +File: configure.info, Node: Configuration Name Definition, Next: Using Configuration Names, Up: Configuration Names + +4.1 Configuration Name Definition +================================= + +This is a string of the form CPU-MANUFACTURER-OPERATING_SYSTEM. In +some cases, this is extended to a four part form: +CPU-MANUFACTURER-KERNEL-OPERATING_SYSTEM. + + When using a configuration name in a configure option, it is normally +not necessary to specify an entire name. In particular, the +MANUFACTURER field is often omitted, leading to strings such as +`i386-linux' or `sparc-sunos'. The shell script `config.sub' will +translate these shortened strings into the canonical form. autoconf +will arrange for `config.sub' to be run automatically when it is needed. + + The fields of a configuration name are as follows: + +CPU + The type of processor. This is typically something like `i386' or + `sparc'. More specific variants are used as well, such as + `mipsel' to indicate a little endian MIPS processor. + +MANUFACTURER + A somewhat freeform field which indicates the manufacturer of the + system. This is often simply `unknown'. Other common strings are + `pc' for an IBM PC compatible system, or the name of a workstation + vendor, such as `sun'. + +OPERATING_SYSTEM + The name of the operating system which is run on the system. This + will be something like `solaris2.5' or `irix6.3'. There is no + particular restriction on the version number, and strings like + `aix4.1.4.0' are seen. For an embedded system, which has no + operating system, this field normally indicates the type of object + file format, such as `elf' or `coff'. + +KERNEL + This is used mainly for GNU/Linux. A typical GNU/Linux + configuration name is `i586-pc-linux-gnulibc1'. In this case the + kernel, `linux', is separated from the operating system, + `gnulibc1'. + + The shell script `config.guess' will normally print the correct +configuration name for the system on which it is run. It does by +running `uname' and by examining other characteristics of the system. + + Because `config.guess' can normally determine the configuration name +for a machine, it is normally only necessary to specify a configuration +name when building a cross-compiler or when building using a +cross-compiler. + + +File: configure.info, Node: Using Configuration Names, Prev: Configuration Name Definition, Up: Configuration Names + +4.2 Using Configuration Names +============================= + +A configure script will sometimes have to make a decision based on a +configuration name. You will need to do this if you have to compile +code differently based on something which can not be tested using a +standard autoconf feature test. + + It is normally better to test for particular features, rather than to +test for a particular system. This is because as Unix evolves, +different systems copy features from one another. Even if you need to +determine whether the feature is supported based on a configuration +name, you should define a macro which describes the feature, rather than +defining a macro which describes the particular system you are on. + + Testing for a particular system is normally done using a case +statement in `configure.in'. The case statement might look something +like the following, assuming that `host' is a shell variable holding a +canonical configuration name (which will be the case if `configure.in' +uses the `AC_CANONICAL_HOST' or `AC_CANONICAL_SYSTEM' macro). + + case "${host}" in + i[3-7]86-*-linux-gnu*) do something ;; + sparc*-sun-solaris2.[56789]*) do something ;; + sparc*-sun-solaris*) do something ;; + mips*-*-elf*) do something ;; + esac + + It is particularly important to use `*' after the operating system +field, in order to match the version number which will be generated by +`config.guess'. + + In most cases you must be careful to match a range of processor +types. For most processor families, a trailing `*' suffices, as in +`mips*' above. For the i386 family, something along the lines of +`i[3-7]86' suffices at present. For the m68k family, you will need +something like `m68*'. Of course, if you do not need to match on the +processor, it is simpler to just replace the entire field by a `*', as +in `*-*-irix*'. + + +File: configure.info, Node: Cross Compilation Tools, Next: Canadian Cross, Prev: Configuration Names, Up: Top + +5 Cross Compilation Tools +************************* + +The GNU configure and build system can be used to build "cross +compilation" tools. A cross compilation tool is a tool which runs on +one system and produces code which runs on another system. + +* Menu: + +* Cross Compilation Concepts:: Cross Compilation Concepts. +* Host and Target:: Host and Target. +* Using the Host Type:: Using the Host Type. +* Specifying the Target:: Specifying the Target. +* Using the Target Type:: Using the Target Type. +* Cross Tools in the Cygnus Tree:: Cross Tools in the Cygnus Tree + + +File: configure.info, Node: Cross Compilation Concepts, Next: Host and Target, Up: Cross Compilation Tools + +5.1 Cross Compilation Concepts +============================== + +A compiler which produces programs which run on a different system is a +cross compilation compiler, or simply a "cross compiler". Similarly, +we speak of cross assemblers, cross linkers, etc. + + In the normal case, a compiler produces code which runs on the same +system as the one on which the compiler runs. When it is necessary to +distinguish this case from the cross compilation case, such a compiler +is called a "native compiler". Similarly, we speak of native +assemblers, etc. + + Although the debugger is not strictly speaking a compilation tool, +it is nevertheless meaningful to speak of a cross debugger: a debugger +which is used to debug code which runs on another system. Everything +that is said below about configuring cross compilation tools applies to +the debugger as well. + + +File: configure.info, Node: Host and Target, Next: Using the Host Type, Prev: Cross Compilation Concepts, Up: Cross Compilation Tools + +5.2 Host and Target +=================== + +When building cross compilation tools, there are two different systems +involved: the system on which the tools will run, and the system for +which the tools generate code. + + The system on which the tools will run is called the "host" system. + + The system for which the tools generate code is called the "target" +system. + + For example, suppose you have a compiler which runs on a GNU/Linux +system and generates ELF programs for a MIPS embedded system. In this +case the GNU/Linux system is the host, and the MIPS ELF system is the +target. Such a compiler could be called a GNU/Linux cross MIPS ELF +compiler, or, equivalently, a `i386-linux-gnu' cross `mips-elf' +compiler. + + Naturally, most programs are not cross compilation tools. For those +programs, it does not make sense to speak of a target. It only makes +sense to speak of a target for tools like `gcc' or the `binutils' which +actually produce running code. For example, it does not make sense to +speak of the target of a tool like `bison' or `make'. + + Most cross compilation tools can also serve as native tools. For a +native compilation tool, it is still meaningful to speak of a target. +For a native tool, the target is the same as the host. For example, for +a GNU/Linux native compiler, the host is GNU/Linux, and the target is +also GNU/Linux. + + +File: configure.info, Node: Using the Host Type, Next: Specifying the Target, Prev: Host and Target, Up: Cross Compilation Tools + +5.3 Using the Host Type +======================= + +In almost all cases the host system is the system on which you run the +`configure' script, and on which you build the tools (for the case when +they differ, *note Canadian Cross::). + + If your configure script needs to know the configuration name of the +host system, and the package is not a cross compilation tool and +therefore does not have a target, put `AC_CANONICAL_HOST' in +`configure.in'. This macro will arrange to define a few shell +variables when the `configure' script is run. + +`host' + The canonical configuration name of the host. This will normally + be determined by running the `config.guess' shell script, although + the user is permitted to override this by using an explicit + `--host' option. + +`host_alias' + In the unusual case that the user used an explicit `--host' option, + this will be the argument to `--host'. In the normal case, this + will be the same as the `host' variable. + +`host_cpu' +`host_vendor' +`host_os' + The first three parts of the canonical configuration name. + + The shell variables may be used by putting shell code in +`configure.in'. For an example, see *Note Using Configuration Names::. + + +File: configure.info, Node: Specifying the Target, Next: Using the Target Type, Prev: Using the Host Type, Up: Cross Compilation Tools + +5.4 Specifying the Target +========================= + +By default, the `configure' script will assume that the target is the +same as the host. This is the more common case; for example, it leads +to a native compiler rather than a cross compiler. + + If you want to build a cross compilation tool, you must specify the +target explicitly by using the `--target' option when you run +`configure'. The argument to `--target' is the configuration name of +the system for which you wish to generate code. *Note Configuration +Names::. + + For example, to build tools which generate code for a MIPS ELF +embedded system, you would use `--target mips-elf'. + + +File: configure.info, Node: Using the Target Type, Next: Cross Tools in the Cygnus Tree, Prev: Specifying the Target, Up: Cross Compilation Tools + +5.5 Using the Target Type +========================= + +When writing `configure.in' for a cross compilation tool, you will need +to use information about the target. To do this, put +`AC_CANONICAL_SYSTEM' in `configure.in'. + + `AC_CANONICAL_SYSTEM' will look for a `--target' option and +canonicalize it using the `config.sub' shell script. It will also run +`AC_CANONICAL_HOST' (*note Using the Host Type::). + + The target type will be recorded in the following shell variables. +Note that the host versions of these variables will also be defined by +`AC_CANONICAL_HOST'. + +`target' + The canonical configuration name of the target. + +`target_alias' + The argument to the `--target' option. If the user did not specify + a `--target' option, this will be the same as `host_alias'. + +`target_cpu' +`target_vendor' +`target_os' + The first three parts of the canonical target configuration name. + + Note that if `host' and `target' are the same string, you can assume +a native configuration. If they are different, you can assume a cross +configuration. + + It is arguably possible for `host' and `target' to represent the +same system, but for the strings to not be identical. For example, if +`config.guess' returns `sparc-sun-sunos4.1.4', and somebody configures +with `--target sparc-sun-sunos4.1', then the slight differences between +the two versions of SunOS may be unimportant for your tool. However, +in the general case it can be quite difficult to determine whether the +differences between two configuration names are significant or not. +Therefore, by convention, if the user specifies a `--target' option +without specifying a `--host' option, it is assumed that the user wants +to configure a cross compilation tool. + + The variables `target' and `target_alias' should be handled +differently. + + In general, whenever the user may actually see a string, +`target_alias' should be used. This includes anything which may appear +in the file system, such as a directory name or part of a tool name. +It also includes any tool output, unless it is clearly labelled as the +canonical target configuration name. This permits the user to use the +`--target' option to specify how the tool will appear to the outside +world. + + On the other hand, when checking for characteristics of the target +system, `target' should be used. This is because a wide variety of +`--target' options may map into the same canonical configuration name. +You should not attempt to duplicate the canonicalization done by +`config.sub' in your own code. + + By convention, cross tools are installed with a prefix of the +argument used with the `--target' option, also known as `target_alias' +(*note Using the Target Type::). If the user does not use the +`--target' option, and thus is building a native tool, no prefix is +used. + + For example, if gcc is configured with `--target mips-elf', then the +installed binary will be named `mips-elf-gcc'. If gcc is configured +without a `--target' option, then the installed binary will be named +`gcc'. + + The autoconf macro `AC_ARG_PROGRAM' will handle this for you. If +you are using automake, no more need be done; the programs will +automatically be installed with the correct prefixes. Otherwise, see +the autoconf documentation for `AC_ARG_PROGRAM'. + + +File: configure.info, Node: Cross Tools in the Cygnus Tree, Prev: Using the Target Type, Up: Cross Compilation Tools + +5.6 Cross Tools in the Cygnus Tree +================================== + +The Cygnus tree is used for various packages including gdb, the GNU +binutils, and egcs. It is also, of course, used for Cygnus releases. + + In the Cygnus tree, the top level `configure' script uses the old +Cygnus configure system, not autoconf. The top level `Makefile.in' is +written to build packages based on what is in the source tree, and +supports building a large number of tools in a single +`configure'/`make' step. + + The Cygnus tree may be configured with a `--target' option. The +`--target' option applies recursively to every subdirectory, and +permits building an entire set of cross tools at once. + +* Menu: + +* Host and Target Libraries:: Host and Target Libraries. +* Target Library Configure Scripts:: Target Library Configure Scripts. +* Make Targets in Cygnus Tree:: Make Targets in Cygnus Tree. +* Target libiberty:: Target libiberty + + +File: configure.info, Node: Host and Target Libraries, Next: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree + +5.6.1 Host and Target Libraries +------------------------------- + +The Cygnus tree distinguishes host libraries from target libraries. + + Host libraries are built with the compiler used to build the programs +which run on the host, which is called the host compiler. This includes +libraries such as `bfd' and `tcl'. These libraries are built with the +host compiler, and are linked into programs like the binutils or gcc +which run on the host. + + Target libraries are built with the target compiler. If gcc is +present in the source tree, then the target compiler is the gcc that is +built using the host compiler. Target libraries are libraries such as +`newlib' and `libstdc++'. These libraries are not linked into the host +programs, but are instead made available for use with programs built +with the target compiler. + + For the rest of this section, assume that gcc is present in the +source tree, so that it will be used to build the target libraries. + + There is a complication here. The configure process needs to know +which compiler you are going to use to build a tool; otherwise, the +feature tests will not work correctly. The Cygnus tree handles this by +not configuring the target libraries until the target compiler is +built. In order to permit everything to build using a single +`configure'/`make', the configuration of the target libraries is +actually triggered during the make step. + + When the target libraries are configured, the `--target' option is +not used. Instead, the `--host' option is used with the argument of +the `--target' option for the overall configuration. If no `--target' +option was used for the overall configuration, the `--host' option will +be passed with the output of the `config.guess' shell script. Any +`--build' option is passed down unchanged. + + This translation of configuration options is done because since the +target libraries are compiled with the target compiler, they are being +built in order to run on the target of the overall configuration. By +the definition of host, this means that their host system is the same as +the target system of the overall configuration. + + The same process is used for both a native configuration and a cross +configuration. Even when using a native configuration, the target +libraries will be configured and built using the newly built compiler. +This is particularly important for the C++ libraries, since there is no +reason to assume that the C++ compiler used to build the host tools (if +there even is one) uses the same ABI as the g++ compiler which will be +used to build the target libraries. + + There is one difference between a native configuration and a cross +configuration. In a native configuration, the target libraries are +normally configured and built as siblings of the host tools. In a cross +configuration, the target libraries are normally built in a subdirectory +whose name is the argument to `--target'. This is mainly for +historical reasons. + + To summarize, running `configure' in the Cygnus tree configures all +the host libraries and tools, but does not configure any of the target +libraries. Running `make' then does the following steps: + + * Build the host libraries. + + * Build the host programs, including gcc. Note that we call gcc + both a host program (since it runs on the host) and a target + compiler (since it generates code for the target). + + * Using the newly built target compiler, configure the target + libraries. + + * Build the target libraries. + + The steps need not be done in precisely this order, since they are +actually controlled by `Makefile' targets. + + +File: configure.info, Node: Target Library Configure Scripts, Next: Make Targets in Cygnus Tree, Prev: Host and Target Libraries, Up: Cross Tools in the Cygnus Tree + +5.6.2 Target Library Configure Scripts +-------------------------------------- + +There are a few things you must know in order to write a configure +script for a target library. This is just a quick sketch, and beginners +shouldn't worry if they don't follow everything here. + + The target libraries are configured and built using a newly built +target compiler. There may not be any startup files or libraries for +this target compiler. In fact, those files will probably be built as +part of some target library, which naturally means that they will not +exist when your target library is configured. + + This means that the configure script for a target library may not use +any test which requires doing a link. This unfortunately includes many +useful autoconf macros, such as `AC_CHECK_FUNCS'. autoconf macros +which do a compile but not a link, such as `AC_CHECK_HEADERS', may be +used. + + This is a severe restriction, but normally not a fatal one, as target +libraries can often assume the presence of other target libraries, and +thus know which functions will be available. + + As of this writing, the autoconf macro `AC_PROG_CC' does a link to +make sure that the compiler works. This may fail in a target library, +so target libraries must use a different set of macros to locate the +compiler. See the `configure.in' file in a directory like `libiberty' +or `libgloss' for an example. + + As noted in the previous section, target libraries are sometimes +built in directories which are siblings to the host tools, and are +sometimes built in a subdirectory. The `--with-target-subdir' configure +option will be passed when the library is configured. Its value will be +an empty string if the target library is a sibling. Its value will be +the name of the subdirectory if the target library is in a subdirectory. + + If the overall build is not a native build (i.e., the overall +configure used the `--target' option), then the library will be +configured with the `--with-cross-host' option. The value of this +option will be the host system of the overall build. Recall that the +host system of the library will be the target of the overall build. If +the overall build is a native build, the `--with-cross-host' option +will not be used. + + A library which can be built both standalone and as a target library +may want to install itself into different directories depending upon the +case. When built standalone, or when built native, the library should +be installed in `$(libdir)'. When built as a target library which is +not native, the library should be installed in `$(tooldir)/lib'. The +`--with-cross-host' option may be used to distinguish these cases. + + This same test of `--with-cross-host' may be used to see whether it +is OK to use link tests in the configure script. If the +`--with-cross-host' option is not used, then the library is being built +either standalone or native, and a link should work. + + +File: configure.info, Node: Make Targets in Cygnus Tree, Next: Target libiberty, Prev: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree + +5.6.3 Make Targets in Cygnus Tree +--------------------------------- + +The top level `Makefile' in the Cygnus tree defines targets for every +known subdirectory. + + For every subdirectory DIR which holds a host library or program, +the `Makefile' target `all-DIR' will build that library or program. + + There are dependencies among host tools. For example, building gcc +requires first building gas, because the gcc build process invokes the +target assembler. These dependencies are reflected in the top level +`Makefile'. + + For every subdirectory DIR which holds a target library, the +`Makefile' target `configure-target-DIR' will configure that library. +The `Makefile' target `all-target-DIR' will build that library. + + Every `configure-target-DIR' target depends upon `all-gcc', since +gcc, the target compiler, is required to configure the tool. Every +`all-target-DIR' target depends upon the corresponding +`configure-target-DIR' target. + + There are several other targets which may be of interest for each +directory: `install-DIR', `clean-DIR', and `check-DIR'. There are also +corresponding `target' versions of these for the target libraries , +such as `install-target-DIR'. + + +File: configure.info, Node: Target libiberty, Prev: Make Targets in Cygnus Tree, Up: Cross Tools in the Cygnus Tree + +5.6.4 Target libiberty +---------------------- + +The `libiberty' subdirectory is currently a special case, in that it is +the only directory which is built both using the host compiler and +using the target compiler. + + This is because the files in `libiberty' are used when building the +host tools, and they are also incorporated into the `libstdc++' target +library as support code. + + This duality does not pose any particular difficulties. It means +that there are targets for both `all-libiberty' and +`all-target-libiberty'. + + In a native configuration, when target libraries are not built in a +subdirectory, the same objects are normally used as both the host build +and the target build. This is normally OK, since libiberty contains +only C code, and in a native configuration the results of the host +compiler and the target compiler are normally interoperable. + + Irix 6 is again an exception here, since the SGI native compiler +defaults to using the `O32' ABI, and gcc defaults to using the `N32' +ABI. On Irix 6, the target libraries are built in a subdirectory even +for a native configuration, avoiding this problem. + + There are currently no other libraries built for both the host and +the target, but there is no conceptual problem with adding more. + + +File: configure.info, Node: Canadian Cross, Next: Cygnus Configure, Prev: Cross Compilation Tools, Up: Top + +6 Canadian Cross +**************** + +It is possible to use the GNU configure and build system to build a +program which will run on a system which is different from the system on +which the tools are built. In other words, it is possible to build +programs using a cross compiler. + + This is referred to as a "Canadian Cross". + +* Menu: + +* Canadian Cross Example:: Canadian Cross Example. +* Canadian Cross Concepts:: Canadian Cross Concepts. +* Build Cross Host Tools:: Build Cross Host Tools. +* Build and Host Options:: Build and Host Options. +* CCross not in Cygnus Tree:: Canadian Cross not in Cygnus Tree. +* CCross in Cygnus Tree:: Canadian Cross in Cygnus Tree. +* Supporting Canadian Cross:: Supporting Canadian Cross. + + +File: configure.info, Node: Canadian Cross Example, Next: Canadian Cross Concepts, Up: Canadian Cross + +6.1 Canadian Cross Example +========================== + +Here is an example of a Canadian Cross. + + While running on a GNU/Linux, you can build a program which will run +on a Solaris system. You would use a GNU/Linux cross Solaris compiler +to build the program. + + Of course, you could not run the resulting program on your GNU/Linux +system. You would have to copy it over to a Solaris system before you +would run it. + + Of course, you could also simply build the programs on the Solaris +system in the first place. However, perhaps the Solaris system is not +available for some reason; perhaps you actually don't have one, but you +want to build the tools for somebody else to use. Or perhaps your +GNU/Linux system is much faster than your Solaris system. + + A Canadian Cross build is most frequently used when building +programs to run on a non-Unix system, such as DOS or Windows. It may +be simpler to configure and build on a Unix system than to support the +configuration machinery on a non-Unix system. + + +File: configure.info, Node: Canadian Cross Concepts, Next: Build Cross Host Tools, Prev: Canadian Cross Example, Up: Canadian Cross + +6.2 Canadian Cross Concepts +=========================== + +When building a Canadian Cross, there are at least two different systems +involved: the system on which the tools are being built, and the system +on which the tools will run. + + The system on which the tools are being built is called the "build" +system. + + The system on which the tools will run is called the host system. + + For example, if you are building a Solaris program on a GNU/Linux +system, as in the previous section, the build system would be GNU/Linux, +and the host system would be Solaris. + + It is, of course, possible to build a cross compiler using a Canadian +Cross (i.e., build a cross compiler using a cross compiler). In this +case, the system for which the resulting cross compiler generates code +is called the target system. (For a more complete discussion of host +and target systems, *note Host and Target::). + + An example of building a cross compiler using a Canadian Cross would +be building a Windows cross MIPS ELF compiler on a GNU/Linux system. In +this case the build system would be GNU/Linux, the host system would be +Windows, and the target system would be MIPS ELF. + + The name Canadian Cross comes from the case when the build, host, and +target systems are all different. At the time that these issues were +all being hashed out, Canada had three national political parties. + + +File: configure.info, Node: Build Cross Host Tools, Next: Build and Host Options, Prev: Canadian Cross Concepts, Up: Canadian Cross + +6.3 Build Cross Host Tools +========================== + +In order to configure a program for a Canadian Cross build, you must +first build and install the set of cross tools you will use to build the +program. + + These tools will be build cross host tools. That is, they will run +on the build system, and will produce code that runs on the host system. + + It is easy to confuse the meaning of build and host here. Always +remember that the build system is where you are doing the build, and the +host system is where the resulting program will run. Therefore, you +need a build cross host compiler. + + In general, you must have a complete cross environment in order to do +the build. This normally means a cross compiler, cross assembler, and +so forth, as well as libraries and include files for the host system. + + +File: configure.info, Node: Build and Host Options, Next: CCross not in Cygnus Tree, Prev: Build Cross Host Tools, Up: Canadian Cross + +6.4 Build and Host Options +========================== + +When you run `configure', you must use both the `--build' and `--host' +options. + + The `--build' option is used to specify the configuration name of +the build system. This can normally be the result of running the +`config.guess' shell script, and it is reasonable to use +`--build=`config.guess`'. + + The `--host' option is used to specify the configuration name of the +host system. + + As we explained earlier, `config.guess' is used to set the default +value for the `--host' option (*note Using the Host Type::). We can +now see that since `config.guess' returns the type of system on which +it is run, it really identifies the build system. Since the host +system is normally the same as the build system (i.e., people do not +normally build using a cross compiler), it is reasonable to use the +result of `config.guess' as the default for the host system when the +`--host' option is not used. + + It might seem that if the `--host' option were used without the +`--build' option that the configure script could run `config.guess' to +determine the build system, and presume a Canadian Cross if the result +of `config.guess' differed from the `--host' option. However, for +historical reasons, some configure scripts are routinely run using an +explicit `--host' option, rather than using the default from +`config.guess'. As noted earlier, it is difficult or impossible to +reliably compare configuration names (*note Using the Target Type::). +Therefore, by convention, if the `--host' option is used, but the +`--build' option is not used, then the build system defaults to the +host system. + + +File: configure.info, Node: CCross not in Cygnus Tree, Next: CCross in Cygnus Tree, Prev: Build and Host Options, Up: Canadian Cross + +6.5 Canadian Cross not in Cygnus Tree. +====================================== + +If you are not using the Cygnus tree, you must explicitly specify the +cross tools which you want to use to build the program. This is done by +setting environment variables before running the `configure' script. + + You must normally set at least the environment variables `CC', `AR', +and `RANLIB' to the cross tools which you want to use to build. + + For some programs, you must set additional cross tools as well, such +as `AS', `LD', or `NM'. + + You would set these environment variables to the build cross tools +which you are going to use. + + For example, if you are building a Solaris program on a GNU/Linux +system, and your GNU/Linux cross Solaris compiler were named +`solaris-gcc', then you would set the environment variable `CC' to +`solaris-gcc'. + + +File: configure.info, Node: CCross in Cygnus Tree, Next: Supporting Canadian Cross, Prev: CCross not in Cygnus Tree, Up: Canadian Cross + +6.6 Canadian Cross in Cygnus Tree +================================= + +This section describes configuring and building a Canadian Cross when +using the Cygnus tree. + +* Menu: + +* Standard Cygnus CCross:: Building a Normal Program. +* Cross Cygnus CCross:: Building a Cross Program. + + +File: configure.info, Node: Standard Cygnus CCross, Next: Cross Cygnus CCross, Up: CCross in Cygnus Tree + +6.6.1 Building a Normal Program +------------------------------- + +When configuring a Canadian Cross in the Cygnus tree, all the +appropriate environment variables are automatically set to `HOST-TOOL', +where HOST is the value used for the `--host' option, and TOOL is the +name of the tool (e.g., `gcc', `as', etc.). These tools must be on +your `PATH'. + + Adding a prefix of HOST will give the usual name for the build cross +host tools. To see this, consider that when these cross tools were +built, they were configured to run on the build system and to produce +code for the host system. That is, they were configured with a +`--target' option that is the same as the system which we are now +calling the host. Recall that the default name for installed cross +tools uses the target system as a prefix (*note Using the Target +Type::). Since that is the system which we are now calling the host, +HOST is the right prefix to use. + + For example, if you configure with `--build=i386-linux-gnu' and +`--host=solaris', then the Cygnus tree will automatically default to +using the compiler `solaris-gcc'. You must have previously built and +installed this compiler, probably by doing a build with no `--host' +option and with a `--target' option of `solaris'. + + +File: configure.info, Node: Cross Cygnus CCross, Prev: Standard Cygnus CCross, Up: CCross in Cygnus Tree + +6.6.2 Building a Cross Program +------------------------------ + +There are additional considerations if you want to build a cross +compiler, rather than a native compiler, in the Cygnus tree using a +Canadian Cross. + + When you build a cross compiler using the Cygnus tree, then the +target libraries will normally be built with the newly built target +compiler (*note Host and Target Libraries::). However, this will not +work when building with a Canadian Cross. This is because the newly +built target compiler will be a program which runs on the host system, +and therefore will not be able to run on the build system. + + Therefore, when building a cross compiler with the Cygnus tree, you +must first install a set of build cross target tools. These tools will +be used when building the target libraries. + + Note that this is not a requirement of a Canadian Cross in general. +For example, it would be possible to build just the host cross target +tools on the build system, to copy the tools to the host system, and to +build the target libraries on the host system. The requirement for +build cross target tools is imposed by the Cygnus tree, which expects +to be able to build both host programs and target libraries in a single +`configure'/`make' step. Because it builds these in a single step, it +expects to be able to build the target libraries on the build system, +which means that it must use a build cross target toolchain. + + For example, suppose you want to build a Windows cross MIPS ELF +compiler on a GNU/Linux system. You must have previously installed +both a GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF +compiler. + + In order to build the Windows (configuration name `i386-cygwin32') +cross MIPS ELF (configure name `mips-elf') compiler, you might execute +the following commands (long command lines are broken across lines with +a trailing backslash as a continuation character). + + mkdir linux-x-cygwin32 + cd linux-x-cygwin32 + SRCDIR/configure --target i386-cygwin32 --prefix=INSTALLDIR \ + --exec-prefix=INSTALLDIR/H-i386-linux + make + make install + cd .. + mkdir linux-x-mips-elf + cd linux-x-mips-elf + SRCDIR/configure --target mips-elf --prefix=INSTALLDIR \ + --exec-prefix=INSTALLDIR/H-i386-linux + make + make install + cd .. + mkdir cygwin32-x-mips-elf + cd cygwin32-x-mips-elf + SRCDIR/configure --build=i386-linux-gnu --host=i386-cygwin32 \ + --target=mips-elf --prefix=WININSTALLDIR \ + --exec-prefix=WININSTALLDIR/H-i386-cygwin32 + make + make install + + You would then copy the contents of WININSTALLDIR over to the +Windows machine, and run the resulting programs. + + +File: configure.info, Node: Supporting Canadian Cross, Prev: CCross in Cygnus Tree, Up: Canadian Cross + +6.7 Supporting Canadian Cross +============================= + +If you want to make it possible to build a program you are developing +using a Canadian Cross, you must take some care when writing your +configure and make rules. Simple cases will normally work correctly. +However, it is not hard to write configure and make tests which will +fail in a Canadian Cross. + +* Menu: + +* CCross in Configure:: Supporting Canadian Cross in Configure Scripts. +* CCross in Make:: Supporting Canadian Cross in Makefiles. + + +File: configure.info, Node: CCross in Configure, Next: CCross in Make, Up: Supporting Canadian Cross + +6.7.1 Supporting Canadian Cross in Configure Scripts +---------------------------------------------------- + +In a `configure.in' file, after calling `AC_PROG_CC', you can find out +whether this is a Canadian Cross configure by examining the shell +variable `cross_compiling'. In a Canadian Cross, which means that the +compiler is a cross compiler, `cross_compiling' will be `yes'. In a +normal configuration, `cross_compiling' will be `no'. + + You ordinarily do not need to know the type of the build system in a +configure script. However, if you do need that information, you can get +it by using the macro `AC_CANONICAL_SYSTEM', the same macro that is +used to determine the target system. This macro will set the variables +`build', `build_alias', `build_cpu', `build_vendor', and `build_os', +which correspond to the similar `target' and `host' variables, except +that they describe the build system. + + When writing tests in `configure.in', you must remember that you +want to test the host environment, not the build environment. + + Macros like `AC_CHECK_FUNCS' which use the compiler will test the +host environment. That is because the tests will be done by running the +compiler, which is actually a build cross host compiler. If the +compiler can find the function, that means that the function is present +in the host environment. + + Tests like `test -f /dev/ptyp0', on the other hand, will test the +build environment. Remember that the configure script is running on the +build system, not the host system. If your configure scripts examines +files, those files will be on the build system. Whatever you determine +based on those files may or may not be the case on the host system. + + Most autoconf macros will work correctly for a Canadian Cross. The +main exception is `AC_TRY_RUN'. This macro tries to compile and run a +test program. This will fail in a Canadian Cross, because the program +will be compiled for the host system, which means that it will not run +on the build system. + + The `AC_TRY_RUN' macro provides an optional argument to tell the +configure script what to do in a Canadian Cross. If that argument is +not present, you will get a warning when you run `autoconf': + warning: AC_TRY_RUN called without default to allow cross compiling + This tells you that the resulting `configure' script will not work +with a Canadian Cross. + + In some cases while it may better to perform a test at configure +time, it is also possible to perform the test at run time. In such a +case you can use the cross compiling argument to `AC_TRY_RUN' to tell +your program that the test could not be performed at configure time. + + There are a few other autoconf macros which will not work correctly +with a Canadian Cross: a partial list is `AC_FUNC_GETPGRP', +`AC_FUNC_SETPGRP', `AC_FUNC_SETVBUF_REVERSED', and +`AC_SYS_RESTARTABLE_SYSCALLS'. The `AC_CHECK_SIZEOF' macro is +generally not very useful with a Canadian Cross; it permits an optional +argument indicating the default size, but there is no way to know what +the correct default should be. + + +File: configure.info, Node: CCross in Make, Prev: CCross in Configure, Up: Supporting Canadian Cross + +6.7.2 Supporting Canadian Cross in Makefiles. +--------------------------------------------- + +The main Canadian Cross issue in a `Makefile' arises when you want to +use a subsidiary program to generate code or data which you will then +include in your real program. + + If you compile this subsidiary program using `$(CC)' in the usual +way, you will not be able to run it. This is because `$(CC)' will +build a program for the host system, but the program is being built on +the build system. + + You must instead use a compiler for the build system, rather than the +host system. In the Cygnus tree, this make variable `$(CC_FOR_BUILD)' +will hold a compiler for the build system. + + Note that you should not include `config.h' in a file you are +compiling with `$(CC_FOR_BUILD)'. The `configure' script will build +`config.h' with information for the host system. However, you are +compiling the file using a compiler for the build system (a native +compiler). Subsidiary programs are normally simple filters which do no +user interaction, and it is normally possible to write them in a highly +portable fashion so that the absence of `config.h' is not crucial. + + The gcc `Makefile.in' shows a complex situation in which certain +files, such as `rtl.c', must be compiled into both subsidiary programs +run on the build system and into the final program. This approach may +be of interest for advanced build system hackers. Note that the build +system compiler is rather confusingly called `HOST_CC'. + + +File: configure.info, Node: Cygnus Configure, Next: Multilibs, Prev: Canadian Cross, Up: Top + +7 Cygnus Configure +****************** + +The Cygnus configure script predates autoconf. All of its interesting +features have been incorporated into autoconf. No new programs should +be written to use the Cygnus configure script. + + However, the Cygnus configure script is still used in a few places: +at the top of the Cygnus tree and in a few target libraries in the +Cygnus tree. Until those uses have been replaced with autoconf, some +brief notes are appropriate here. This is not complete documentation, +but it should be possible to use this as a guide while examining the +scripts themselves. + +* Menu: + +* Cygnus Configure Basics:: Cygnus Configure Basics. +* Cygnus Configure in C++ Libraries:: Cygnus Configure in C++ Libraries. + + +File: configure.info, Node: Cygnus Configure Basics, Next: Cygnus Configure in C++ Libraries, Up: Cygnus Configure + +7.1 Cygnus Configure Basics +=========================== + +Cygnus configure does not use any generated files; there is no program +corresponding to `autoconf'. Instead, there is a single shell script +named `configure' which may be found at the top of the Cygnus tree. +This shell script was written by hand; it was not generated by +autoconf, and it is incorrect, and indeed harmful, to run `autoconf' in +the top level of a Cygnus tree. + + Cygnus configure works in a particular directory by examining the +file `configure.in' in that directory. That file is broken into four +separate shell scripts. + + The first is the contents of `configure.in' up to a line that starts +with `# per-host:'. This is the common part. + + The second is the rest of `configure.in' up to a line that starts +with `# per-target:'. This is the per host part. + + The third is the rest of `configure.in' up to a line that starts +with `# post-target:'. This is the per target part. + + The fourth is the remainder of `configure.in'. This is the post +target part. + + If any of these comment lines are missing, the corresponding shell +script is empty. + + Cygnus configure will first execute the common part. This must set +the shell variable `srctrigger' to the name of a source file, to +confirm that Cygnus configure is looking at the right directory. This +may set the shell variables `package_makefile_frag' and +`package_makefile_rules_frag'. + + Cygnus configure will next set the `build' and `host' shell +variables, and execute the per host part. This may set the shell +variable `host_makefile_frag'. + + Cygnus configure will next set the `target' variable, and execute +the per target part. This may set the shell variable +`target_makefile_frag'. + + Any of these scripts may set the `subdirs' shell variable. This +variable is a list of subdirectories where a `Makefile.in' file may be +found. Cygnus configure will automatically look for a `Makefile.in' +file in the current directory. The `subdirs' shell variable is not +normally used, and I believe that the only directory which uses it at +present is `newlib'. + + For each `Makefile.in', Cygnus configure will automatically create a +`Makefile' by adding definitions for `make' variables such as `host' +and `target', and automatically editing the values of `make' variables +such as `prefix' if they are present. + + Also, if any of the `makefile_frag' shell variables are set, Cygnus +configure will interpret them as file names relative to either the +working directory or the source directory, and will read the contents of +the file into the generated `Makefile'. The file contents will be read +in after the first line in `Makefile.in' which starts with `####'. + + These `Makefile' fragments are used to customize behaviour for a +particular host or target. They serve to select particular files to +compile, and to define particular preprocessor macros by providing +values for `make' variables which are then used during compilation. +Cygnus configure, unlike autoconf, normally does not do feature tests, +and normally requires support to be added manually for each new host. + + The `Makefile' fragment support is similar to the autoconf +`AC_SUBST_FILE' macro. + + After creating each `Makefile', the post target script will be run +(i.e., it may be run several times). This script may further customize +the `Makefile'. When it is run, the shell variable `Makefile' will +hold the name of the `Makefile', including the appropriate directory +component. + + Like an autoconf generated `configure' script, Cygnus configure will +create a file named `config.status' which, when run, will automatically +recreate the configuration. The `config.status' file will simply +execute the Cygnus configure script again with the appropriate +arguments. + + Any of the parts of `configure.in' may set the shell variables +`files' and `links'. Cygnus configure will set up symlinks from the +names in `links' to the files named in `files'. This is similar to the +autoconf `AC_LINK_FILES' macro. + + Finally, any of the parts of `configure.in' may set the shell +variable `configdirs' to a set of subdirectories. If it is set, Cygnus +configure will recursively run the configure process in each +subdirectory. If the subdirectory uses Cygnus configure, it will +contain a `configure.in' file but no `configure' file, in which case +Cygnus configure will invoke itself recursively. If the subdirectory +has a `configure' file, Cygnus configure assumes that it is an autoconf +generated `configure' script, and simply invokes it directly. + + +File: configure.info, Node: Cygnus Configure in C++ Libraries, Prev: Cygnus Configure Basics, Up: Cygnus Configure + +7.2 Cygnus Configure in C++ Libraries +===================================== + +The C++ library configure system, written by Per Bothner, deserves +special mention. It uses Cygnus configure, but it does feature testing +like that done by autoconf generated `configure' scripts. This +approach is used in the libraries `libio', `libstdc++', and `libg++'. + + Most of the `Makefile' information is written out by the shell +script `libio/config.shared'. Each `configure.in' file sets certain +shell variables, and then invokes `config.shared' to create two package +`Makefile' fragments. These fragments are then incorporated into the +resulting `Makefile' by the Cygnus configure script. + + The file `_G_config.h' is created in the `libio' object directory by +running the shell script `libio/gen-params'. This shell script uses +feature tests to define macros and typedefs in `_G_config.h'. + + +File: configure.info, Node: Multilibs, Next: FAQ, Prev: Cygnus Configure, Up: Top + +8 Multilibs +*********** + +For some targets gcc may have different processor requirements depending +upon command line options. An obvious example is the `-msoft-float' +option supported on several processors. This option means that the +floating point registers are not available, which means that floating +point operations must be done by calling an emulation subroutine rather +than by using machine instructions. + + For such options, gcc is often configured to compile target libraries +twice: once with `-msoft-float' and once without. When gcc compiles +target libraries more than once, the resulting libraries are called +"multilibs". + + Multilibs are not really part of the GNU configure and build system, +but we discuss them here since they require support in the `configure' +scripts and `Makefile's used for target libraries. + +* Menu: + +* Multilibs in gcc:: Multilibs in gcc. +* Multilibs in Target Libraries:: Multilibs in Target Libraries. + + +File: configure.info, Node: Multilibs in gcc, Next: Multilibs in Target Libraries, Up: Multilibs + +8.1 Multilibs in gcc +==================== + +In gcc, multilibs are defined by setting the variable +`MULTILIB_OPTIONS' in the target `Makefile' fragment. Several other +`MULTILIB' variables may also be defined there. *Note The Target +Makefile Fragment: (gcc)Target Fragment. + + If you have built gcc, you can see what multilibs it uses by running +it with the `-print-multi-lib' option. The output `.;' means that no +multilibs are used. In general, the output is a sequence of lines, one +per multilib. The first part of each line, up to the `;', is the name +of the multilib directory. The second part is a list of compiler +options separated by `@' characters. + + Multilibs are built in a tree of directories. The top of the tree, +represented by `.' in the list of multilib directories, is the default +library to use when no special compiler options are used. The +subdirectories of the tree hold versions of the library to use when +particular compiler options are used. + + +File: configure.info, Node: Multilibs in Target Libraries, Prev: Multilibs in gcc, Up: Multilibs + +8.2 Multilibs in Target Libraries +================================= + +The target libraries in the Cygnus tree are automatically built with +multilibs. That means that each library is built multiple times. + + This default is set in the top level `configure.in' file, by adding +`--enable-multilib' to the list of arguments passed to configure when +it is run for the target libraries (*note Host and Target Libraries::). + + Each target library uses the shell script `config-ml.in', written by +Doug Evans, to prepare to build target libraries. This shell script is +invoked after the `Makefile' has been created by the `configure' +script. If multilibs are not enabled, it does nothing, otherwise it +modifies the `Makefile' to support multilibs. + + The `config-ml.in' script makes one copy of the `Makefile' for each +multilib in the appropriate subdirectory. When configuring in the +source directory (which is not recommended), it will build a symlink +tree of the sources in each subdirectory. + + The `config-ml.in' script sets several variables in the various +`Makefile's. The `Makefile.in' must have definitions for these +variables already; `config-ml.in' simply changes the existing values. +The `Makefile' should use default values for these variables which will +do the right thing in the subdirectories. + +`MULTISRCTOP' + `config-ml.in' will set this to a sequence of `../' strings, where + the number of strings is the number of multilib levels in the + source tree. The default value should be the empty string. + +`MULTIBUILDTOP' + `config-ml.in' will set this to a sequence of `../' strings, where + the number of strings is number of multilib levels in the object + directory. The default value should be the empty string. This + will differ from `MULTISRCTOP' when configuring in the source tree + (which is not recommended). + +`MULTIDIRS' + In the top level `Makefile' only, `config-ml.in' will set this to + the list of multilib subdirectories. The default value should be + the empty string. + +`MULTISUBDIR' + `config-ml.in' will set this to the installed subdirectory name to + use for this subdirectory, with a leading `/'. The default value + shold be the empty string. + +`MULTIDO' +`MULTICLEAN' + In the top level `Makefile' only, `config-ml.in' will set these + variables to commands to use when doing a recursive make. These + variables should both default to the string `true', so that by + default nothing happens. + + All references to the parent of the source directory should use the +variable `MULTISRCTOP'. Instead of writing `$(srcdir)/..', you must +write `$(srcdir)/$(MULTISRCTOP)..'. + + Similarly, references to the parent of the object directory should +use the variable `MULTIBUILDTOP'. + + In the installation target, the libraries should be installed in the +subdirectory `MULTISUBDIR'. Instead of installing +`$(libdir)/libfoo.a', install `$(libdir)$(MULTISUBDIR)/libfoo.a'. + + The `config-ml.in' script also modifies the top level `Makefile' to +add `multi-do' and `multi-clean' targets which are used when building +multilibs. + + The default target of the `Makefile' should include the following +command: + @$(MULTIDO) $(FLAGS_TO_PASS) DO=all multi-do + This assumes that `$(FLAGS_TO_PASS)' is defined as a set of +variables to pass to a recursive invocation of `make'. This will build +all the multilibs. Note that the default value of `MULTIDO' is `true', +so by default this command will do nothing. It will only do something +in the top level `Makefile' if multilibs were enabled. + + The `install' target of the `Makefile' should include the following +command: + @$(MULTIDO) $(FLAGS_TO_PASS) DO=install multi-do + + In general, any operation, other than clean, which should be +performed on all the multilibs should use a `$(MULTIDO)' line, setting +the variable `DO' to the target of each recursive call to `make'. + + The `clean' targets (`clean', `mostlyclean', etc.) should use +`$(MULTICLEAN)'. For example, the `clean' target should do this: + @$(MULTICLEAN) DO=clean multi-clean + + +File: configure.info, Node: FAQ, Next: Index, Prev: Multilibs, Up: Top + +9 Frequently Asked Questions +**************************** + +Which do I run first, `autoconf' or `automake'? + Except when you first add autoconf or automake support to a + package, you shouldn't run either by hand. Instead, configure + with the `--enable-maintainer-mode' option, and let `make' take + care of it. + +`autoconf' says something about undefined macros. + This means that you have macros in your `configure.in' which are + not defined by `autoconf'. You may be using an old version of + `autoconf'; try building and installing a newer one. Make sure the + newly installled `autoconf' is first on your `PATH'. Also, see + the next question. + +My `configure' script has stuff like `CY_GNU_GETTEXT' in it. + This means that you have macros in your `configure.in' which should + be defined in your `aclocal.m4' file, but aren't. This usually + means that `aclocal' was not able to appropriate definitions of the + macros. Make sure that you have installed all the packages you + need. In particular, make sure that you have installed libtool + (this is where `AM_PROG_LIBTOOL' is defined) and gettext (this is + where `CY_GNU_GETTEXT' is defined, at least in the Cygnus version + of gettext). + +My `Makefile' has `@' characters in it. + This may mean that you tried to use an autoconf substitution in + your `Makefile.in' without adding the appropriate `AC_SUBST' call + to your `configure' script. Or it may just mean that you need to + rebuild `Makefile' in your build directory. To rebuild `Makefile' + from `Makefile.in', run the shell script `config.status' with no + arguments. If you need to force `configure' to run again, first + run `config.status --recheck'. These runs are normally done + automatically by `Makefile' targets, but if your `Makefile' has + gotten messed up you'll need to help them along. + +Why do I have to run both `config.status --recheck' and `config.status'? + Normally, you don't; they will be run automatically by `Makefile' + targets. If you do need to run them, use `config.status --recheck' + to run the `configure' script again with the same arguments as the + first time you ran it. Use `config.status' (with no arguments) to + regenerate all files (`Makefile', `config.h', etc.) based on the + results of the configure script. The two cases are separate + because it isn't always necessary to regenerate all the files + after running `config.status --recheck'. The `Makefile' targets + generated by automake will use the environment variables + `CONFIG_FILES' and `CONFIG_HEADERS' to only regenerate files as + they are needed. + +What is the Cygnus tree? + The Cygnus tree is used for various packages including gdb, the GNU + binutils, and egcs. It is also, of course, used for Cygnus + releases. It is the build system which was developed at Cygnus, + using the Cygnus configure script. It permits building many + different packages with a single configure and make. The + configure scripts in the tree are being converted to autoconf, but + the general build structure remains intact. + +Why do I have to keep rebuilding and reinstalling the tools? + I know, it's a pain. Unfortunately, there are bugs in the tools + themselves which need to be fixed, and each time that happens + everybody who uses the tools need to reinstall new versions of + them. I don't know if there is going to be a clever fix until the + tools stabilize. + +Why not just have a Cygnus tree `make' target to update the tools? + The tools unfortunately need to be installed before they can be + used. That means that they must be built using an appropriate + prefix, and it seems unwise to assume that every configuration + uses an appropriate prefix. It might be possible to make them + work in place, or it might be possible to install them in some + subdirectory; so far these approaches have not been implemented. + + +File: configure.info, Node: Index, Prev: FAQ, Up: Top + +Index +***** + +[index] +* Menu: + +* --build option: Build and Host Options. + (line 9) +* --host option: Build and Host Options. + (line 14) +* --target option: Specifying the Target. + (line 10) +* _GNU_SOURCE: Write configure.in. (line 134) +* AC_CANONICAL_HOST: Using the Host Type. (line 10) +* AC_CANONICAL_SYSTEM: Using the Target Type. + (line 6) +* AC_CONFIG_HEADER: Write configure.in. (line 66) +* AC_EXEEXT: Write configure.in. (line 86) +* AC_INIT: Write configure.in. (line 38) +* AC_OUTPUT: Write configure.in. (line 142) +* AC_PREREQ: Write configure.in. (line 42) +* AC_PROG_CC: Write configure.in. (line 103) +* AC_PROG_CXX: Write configure.in. (line 117) +* acconfig.h: Written Developer Files. + (line 27) +* acconfig.h, writing: Write acconfig.h. (line 6) +* acinclude.m4: Written Developer Files. + (line 37) +* aclocal.m4: Generated Developer Files. + (line 33) +* AM_CONFIG_HEADER: Write configure.in. (line 53) +* AM_DISABLE_SHARED: Write configure.in. (line 127) +* AM_EXEEXT: Write configure.in. (line 86) +* AM_INIT_AUTOMAKE: Write configure.in. (line 48) +* AM_MAINTAINER_MODE: Write configure.in. (line 70) +* AM_PROG_LIBTOOL: Write configure.in. (line 122) +* AM_PROG_LIBTOOL in configure: FAQ. (line 19) +* build option: Build and Host Options. + (line 9) +* building with a cross compiler: Canadian Cross. (line 6) +* canadian cross: Canadian Cross. (line 6) +* canadian cross in configure: CCross in Configure. (line 6) +* canadian cross in cygnus tree: CCross in Cygnus Tree. + (line 6) +* canadian cross in makefile: CCross in Make. (line 6) +* canadian cross, configuring: Build and Host Options. + (line 6) +* canonical system names: Configuration Names. (line 6) +* config.cache: Build Files Description. + (line 28) +* config.h: Build Files Description. + (line 23) +* config.h.in: Generated Developer Files. + (line 45) +* config.in: Generated Developer Files. + (line 45) +* config.status: Build Files Description. + (line 9) +* config.status --recheck: FAQ. (line 40) +* configuration names: Configuration Names. (line 6) +* configuration triplets: Configuration Names. (line 6) +* configure: Generated Developer Files. + (line 21) +* configure build system: Build and Host Options. + (line 9) +* configure host: Build and Host Options. + (line 14) +* configure target: Specifying the Target. + (line 10) +* configure.in: Written Developer Files. + (line 9) +* configure.in, writing: Write configure.in. (line 6) +* configuring a canadian cross: Build and Host Options. + (line 6) +* cross compiler: Cross Compilation Concepts. + (line 6) +* cross compiler, building with: Canadian Cross. (line 6) +* cross tools: Cross Compilation Tools. + (line 6) +* CY_GNU_GETTEXT in configure: FAQ. (line 19) +* cygnus configure: Cygnus Configure. (line 6) +* goals: Goals. (line 6) +* history: History. (line 6) +* host names: Configuration Names. (line 6) +* host option: Build and Host Options. + (line 14) +* host system: Host and Target. (line 6) +* host triplets: Configuration Names. (line 6) +* HOST_CC: CCross in Make. (line 27) +* libg++ configure: Cygnus Configure in C++ Libraries. + (line 6) +* libio configure: Cygnus Configure in C++ Libraries. + (line 6) +* libstdc++ configure: Cygnus Configure in C++ Libraries. + (line 6) +* Makefile: Build Files Description. + (line 18) +* Makefile, garbage characters: FAQ. (line 29) +* Makefile.am: Written Developer Files. + (line 18) +* Makefile.am, writing: Write Makefile.am. (line 6) +* Makefile.in: Generated Developer Files. + (line 26) +* multilibs: Multilibs. (line 6) +* stamp-h: Build Files Description. + (line 41) +* stamp-h.in: Generated Developer Files. + (line 54) +* system names: Configuration Names. (line 6) +* system types: Configuration Names. (line 6) +* target option: Specifying the Target. + (line 10) +* target system: Host and Target. (line 6) +* triplets: Configuration Names. (line 6) +* undefined macros: FAQ. (line 12) + + + +Tag Table: +Node: Top978 +Node: Introduction1506 +Node: Goals2588 +Node: Tools3312 +Node: History4306 +Node: Building7304 +Node: Getting Started10567 +Node: Write configure.in11080 +Node: Write Makefile.am18331 +Node: Write acconfig.h21508 +Node: Generate files23045 +Node: Getting Started Example25011 +Node: Getting Started Example 125766 +Node: Getting Started Example 227687 +Node: Getting Started Example 330682 +Node: Generate Files in Example33046 +Node: Files34136 +Node: Developer Files34747 +Node: Developer Files Picture35127 +Node: Written Developer Files36415 +Node: Generated Developer Files38967 +Node: Build Files42111 +Node: Build Files Picture42772 +Node: Build Files Description43536 +Node: Support Files45542 +Node: Configuration Names48424 +Node: Configuration Name Definition48924 +Node: Using Configuration Names51247 +Node: Cross Compilation Tools53217 +Node: Cross Compilation Concepts53908 +Node: Host and Target54876 +Node: Using the Host Type56377 +Node: Specifying the Target57726 +Node: Using the Target Type58515 +Node: Cross Tools in the Cygnus Tree61946 +Node: Host and Target Libraries63003 +Node: Target Library Configure Scripts66752 +Node: Make Targets in Cygnus Tree69844 +Node: Target libiberty71192 +Node: Canadian Cross72579 +Node: Canadian Cross Example73420 +Node: Canadian Cross Concepts74539 +Node: Build Cross Host Tools76051 +Node: Build and Host Options77003 +Node: CCross not in Cygnus Tree78789 +Node: CCross in Cygnus Tree79767 +Node: Standard Cygnus CCross80188 +Node: Cross Cygnus CCross81552 +Node: Supporting Canadian Cross84352 +Node: CCross in Configure84967 +Node: CCross in Make88135 +Node: Cygnus Configure89738 +Node: Cygnus Configure Basics90573 +Node: Cygnus Configure in C++ Libraries95251 +Node: Multilibs96258 +Node: Multilibs in gcc97303 +Node: Multilibs in Target Libraries98381 +Node: FAQ102572 +Node: Index106672 + +End Tag Table diff --git a/etc/standards.info b/etc/standards.info new file mode 100644 index 000000000..4fc9776e5 --- /dev/null +++ b/etc/standards.info @@ -0,0 +1,4930 @@ +This is standards.info, produced by makeinfo version 4.8 from +.././etc/standards.texi. + +START-INFO-DIR-ENTRY +* Standards: (standards). GNU coding standards. +END-INFO-DIR-ENTRY + + GNU Coding Standards Copyright (C) 1992, 1993, 1994, 1995, 1996, +1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled "GNU +Free Documentation License". + + +File: standards.info, Node: Top, Next: Preface, Prev: (dir), Up: (dir) + +Version +******* + +Last updated February 14, 2002. + +* Menu: + +* Preface:: About the GNU Coding Standards +* Legal Issues:: Keeping Free Software Free +* Design Advice:: General Program Design +* Program Behavior:: Program Behavior for All Programs +* Writing C:: Making The Best Use of C +* Documentation:: Documenting Programs +* Managing Releases:: The Release Process +* References:: References to Non-Free Software or Documentation +* Copying This Manual:: How to Make Copies of This Manual +* Index:: + + +File: standards.info, Node: Preface, Next: Legal Issues, Prev: Top, Up: Top + +1 About the GNU Coding Standards +******************************** + +The GNU Coding Standards were written by Richard Stallman and other GNU +Project volunteers. Their purpose is to make the GNU system clean, +consistent, and easy to install. This document can also be read as a +guide to writing portable, robust and reliable programs. It focuses on +programs written in C, but many of the rules and principles are useful +even if you write in another programming language. The rules often +state reasons for writing in a certain way. + + This release of the GNU Coding Standards was last updated February +14, 2002. + + If you did not obtain this file directly from the GNU project and +recently, please check for a newer version. You can ftp the GNU Coding +Standards from any GNU FTP host in the directory `/pub/gnu/standards/'. +The GNU Coding Standards are available there in several different +formats: `standards.text', `standards.info', and `standards.dvi', as +well as the Texinfo "source" which is divided in two files: +`standards.texi' and `make-stds.texi'. The GNU Coding Standards are +also available on the GNU World Wide Web server: +`http://www.gnu.org/prep/standards_toc.html'. + + Corrections or suggestions for this document should be sent to +. If you make a suggestion, please include a +suggested new wording for it; our time is limited. We prefer a context +diff to the `standards.texi' or `make-stds.texi' files, but if you +don't have those files, please mail your suggestion anyway. + + These standards cover the minimum of what is important when writing a +GNU package. Likely, the needs for additional standards will come up. +Sometimes, you might suggest that such standards be added to this +document. If you think your standards would be generally useful, please +do suggest them. + + You should also set standards for your package on many questions not +addressed or not firmly specified here. The most important point is to +be self-consistent--try to stick to the conventions you pick, and try +to document them as much as possible. That way, your program will be +more maintainable by others. + + +File: standards.info, Node: Legal Issues, Next: Design Advice, Prev: Preface, Up: Top + +2 Keeping Free Software Free +**************************** + +This node discusses how you can make sure that GNU software avoids +legal difficulties, and other related issues. + +* Menu: + +* Reading Non-Free Code:: Referring to Proprietary Programs +* Contributions:: Accepting Contributions +* Trademarks:: How We Deal with Trademark Issues + + +File: standards.info, Node: Reading Non-Free Code, Next: Contributions, Up: Legal Issues + +2.1 Referring to Proprietary Programs +===================================== + +Don't in any circumstances refer to Unix source code for or during your +work on GNU! (Or to any other proprietary programs.) + + If you have a vague recollection of the internals of a Unix program, +this does not absolutely mean you can't write an imitation of it, but +do try to organize the imitation internally along different lines, +because this is likely to make the details of the Unix version +irrelevant and dissimilar to your results. + + For example, Unix utilities were generally optimized to minimize +memory use; if you go for speed instead, your program will be very +different. You could keep the entire input file in core and scan it +there instead of using stdio. Use a smarter algorithm discovered more +recently than the Unix program. Eliminate use of temporary files. Do +it in one pass instead of two (we did this in the assembler). + + Or, on the contrary, emphasize simplicity instead of speed. For some +applications, the speed of today's computers makes simpler algorithms +adequate. + + Or go for generality. For example, Unix programs often have static +tables or fixed-size strings, which make for arbitrary limits; use +dynamic allocation instead. Make sure your program handles NULs and +other funny characters in the input files. Add a programming language +for extensibility and write part of the program in that language. + + Or turn some parts of the program into independently usable +libraries. Or use a simple garbage collector instead of tracking +precisely when to free memory, or use a new GNU facility such as +obstacks. + + +File: standards.info, Node: Contributions, Next: Trademarks, Prev: Reading Non-Free Code, Up: Legal Issues + +2.2 Accepting Contributions +=========================== + +If the program you are working on is copyrighted by the Free Software +Foundation, then when someone else sends you a piece of code to add to +the program, we need legal papers to use it--just as we asked you to +sign papers initially. _Each_ person who makes a nontrivial +contribution to a program must sign some sort of legal papers in order +for us to have clear title to the program; the main author alone is not +enough. + + So, before adding in any contributions from other people, please tell +us, so we can arrange to get the papers. Then wait until we tell you +that we have received the signed papers, before you actually use the +contribution. + + This applies both before you release the program and afterward. If +you receive diffs to fix a bug, and they make significant changes, we +need legal papers for that change. + + This also applies to comments and documentation files. For copyright +law, comments and code are just text. Copyright applies to all kinds of +text, so we need legal papers for all kinds. + + We know it is frustrating to ask for legal papers; it's frustrating +for us as well. But if you don't wait, you are going out on a limb--for +example, what if the contributor's employer won't sign a disclaimer? +You might have to take that code out again! + + You don't need papers for changes of a few lines here or there, since +they are not significant for copyright purposes. Also, you don't need +papers if all you get from the suggestion is some ideas, not actual code +which you use. For example, if someone send you one implementation, but +you write a different implementation of the same idea, you don't need to +get papers. + + The very worst thing is if you forget to tell us about the other +contributor. We could be very embarrassed in court some day as a +result. + + We have more detailed advice for maintainers of programs; if you have +reached the stage of actually maintaining a program for GNU (whether +released or not), please ask us for a copy. + + +File: standards.info, Node: Trademarks, Prev: Contributions, Up: Legal Issues + +2.3 Trademarks +============== + +Please do not include any trademark acknowledgements in GNU software +packages or documentation. + + Trademark acknowledgements are the statements that such-and-such is a +trademark of so-and-so. The GNU Project has no objection to the basic +idea of trademarks, but these acknowledgements feel like kowtowing, so +we don't use them. There is no legal requirement for them. + + What is legally required, as regards other people's trademarks, is to +avoid using them in ways which a reader might read as naming or labeling +our own programs or activities. For example, since "Objective C" is +(or at least was) a trademark, we made sure to say that we provide a +"compiler for the Objective C language" rather than an "Objective C +compiler". The latter is meant to be short for the former, but it does +not explicitly state the relationship, so it could be misinterpreted as +using "Objective C" as a label for the compiler rather than for the +language. + + +File: standards.info, Node: Design Advice, Next: Program Behavior, Prev: Legal Issues, Up: Top + +3 General Program Design +************************ + +This node discusses some of the issues you should take into account +when designing your program. + +* Menu: + +* Source Language:: Which languges to use. +* Compatibility:: Compatibility with other implementations +* Using Extensions:: Using non-standard features +* Standard C:: Using Standard C features +* Conditional Compilation:: Compiling Code Only If A Conditional is True + + +File: standards.info, Node: Source Language, Next: Compatibility, Up: Design Advice + +3.1 Which Languages to Use +========================== + +When you want to use a language that gets compiled and runs at high +speed, the best language to use is C. Using another language is like +using a non-standard feature: it will cause trouble for users. Even if +GCC supports the other language, users may find it inconvenient to have +to install the compiler for that other language in order to build your +program. For example, if you write your program in C++, people will +have to install the GNU C++ compiler in order to compile your program. + + C has one other advantage over C++ and other compiled languages: more +people know C, so more people will find it easy to read and modify the +program if it is written in C. + + So in general it is much better to use C, rather than the comparable +alternatives. + + But there are two exceptions to that conclusion: + + * It is no problem to use another language to write a tool + specifically intended for use with that language. That is because + the only people who want to build the tool will be those who have + installed the other language anyway. + + * If an application is of interest only to a narrow part of the + community, then the question of which language it is written in + has less effect on other people, so you may as well please + yourself. + + Many programs are designed to be extensible: they include an +interpreter for a language that is higher level than C. Often much of +the program is written in that language, too. The Emacs editor +pioneered this technique. + + The standard extensibility interpreter for GNU software is GUILE, +which implements the language Scheme (an especially clean and simple +dialect of Lisp). `http://www.gnu.org/software/guile/'. We don't +reject programs written in other "scripting languages" such as Perl and +Python, but using GUILE is very important for the overall consistency of +the GNU system. + + +File: standards.info, Node: Compatibility, Next: Using Extensions, Prev: Source Language, Up: Design Advice + +3.2 Compatibility with Other Implementations +============================================ + +With occasional exceptions, utility programs and libraries for GNU +should be upward compatible with those in Berkeley Unix, and upward +compatible with Standard C if Standard C specifies their behavior, and +upward compatible with POSIX if POSIX specifies their behavior. + + When these standards conflict, it is useful to offer compatibility +modes for each of them. + + Standard C and POSIX prohibit many kinds of extensions. Feel free +to make the extensions anyway, and include a `--ansi', `--posix', or +`--compatible' option to turn them off. However, if the extension has +a significant chance of breaking any real programs or scripts, then it +is not really upward compatible. So you should try to redesign its +interface to make it upward compatible. + + Many GNU programs suppress extensions that conflict with POSIX if the +environment variable `POSIXLY_CORRECT' is defined (even if it is +defined with a null value). Please make your program recognize this +variable if appropriate. + + When a feature is used only by users (not by programs or command +files), and it is done poorly in Unix, feel free to replace it +completely with something totally different and better. (For example, +`vi' is replaced with Emacs.) But it is nice to offer a compatible +feature as well. (There is a free `vi' clone, so we offer it.) + + Additional useful features are welcome regardless of whether there +is any precedent for them. + + +File: standards.info, Node: Using Extensions, Next: Standard C, Prev: Compatibility, Up: Design Advice + +3.3 Using Non-standard Features +=============================== + +Many GNU facilities that already exist support a number of convenient +extensions over the comparable Unix facilities. Whether to use these +extensions in implementing your program is a difficult question. + + On the one hand, using the extensions can make a cleaner program. +On the other hand, people will not be able to build the program unless +the other GNU tools are available. This might cause the program to +work on fewer kinds of machines. + + With some extensions, it might be easy to provide both alternatives. +For example, you can define functions with a "keyword" `INLINE' and +define that as a macro to expand into either `inline' or nothing, +depending on the compiler. + + In general, perhaps it is best not to use the extensions if you can +straightforwardly do without them, but to use the extensions if they +are a big improvement. + + An exception to this rule are the large, established programs (such +as Emacs) which run on a great variety of systems. Using GNU +extensions in such programs would make many users unhappy, so we don't +do that. + + Another exception is for programs that are used as part of +compilation: anything that must be compiled with other compilers in +order to bootstrap the GNU compilation facilities. If these require +the GNU compiler, then no one can compile them without having them +installed already. That would be extremely troublesome in certain +cases. + + +File: standards.info, Node: Standard C, Next: Conditional Compilation, Prev: Using Extensions, Up: Design Advice + +3.4 Standard C and Pre-Standard C +================================= + +1989 Standard C is widespread enough now that it is ok to use its +features in new programs. There is one exception: do not ever use the +"trigraph" feature of Standard C. + + 1999 Standard C is not widespread yet, so please do not require its +features in programs. It is ok to use its features if they are present. + + However, it is easy to support pre-standard compilers in most +programs, so if you know how to do that, feel free. If a program you +are maintaining has such support, you should try to keep it working. + + To support pre-standard C, instead of writing function definitions in +standard prototype form, + + int + foo (int x, int y) + ... + +write the definition in pre-standard style like this, + + int + foo (x, y) + int x, y; + ... + +and use a separate declaration to specify the argument prototype: + + int foo (int, int); + + You need such a declaration anyway, in a header file, to get the +benefit of prototypes in all the files where the function is called. +And once you have the declaration, you normally lose nothing by writing +the function definition in the pre-standard style. + + This technique does not work for integer types narrower than `int'. +If you think of an argument as being of a type narrower than `int', +declare it as `int' instead. + + There are a few special cases where this technique is hard to use. +For example, if a function argument needs to hold the system type +`dev_t', you run into trouble, because `dev_t' is shorter than `int' on +some machines; but you cannot use `int' instead, because `dev_t' is +wider than `int' on some machines. There is no type you can safely use +on all machines in a non-standard definition. The only way to support +non-standard C and pass such an argument is to check the width of +`dev_t' using Autoconf and choose the argument type accordingly. This +may not be worth the trouble. + + In order to support pre-standard compilers that do not recognize +prototypes, you may want to use a preprocessor macro like this: + + /* Declare the prototype for a general external function. */ + #if defined (__STDC__) || defined (WINDOWSNT) + #define P_(proto) proto + #else + #define P_(proto) () + #endif + + +File: standards.info, Node: Conditional Compilation, Prev: Standard C, Up: Design Advice + +3.5 Conditional Compilation +=========================== + +When supporting configuration options already known when building your +program we prefer using `if (... )' over conditional compilation, as in +the former case the compiler is able to perform more extensive checking +of all possible code paths. + + For example, please write + + if (HAS_FOO) + ... + else + ... + + instead of: + + #ifdef HAS_FOO + ... + #else + ... + #endif + + A modern compiler such as GCC will generate exactly the same code in +both cases, and we have been using similar techniques with good success +in several projects. + + While this is not a silver bullet solving all portability problems, +following this policy would have saved the GCC project alone many person +hours if not days per year. + + In the case of function-like macros like `REVERSIBLE_CC_MODE' in GCC +which cannot be simply used in `if( ...)' statements, there is an easy +workaround. Simply introduce another macro `HAS_REVERSIBLE_CC_MODE' as +in the following example: + + #ifdef REVERSIBLE_CC_MODE + #define HAS_REVERSIBLE_CC_MODE 1 + #else + #define HAS_REVERSIBLE_CC_MODE 0 + #endif + + +File: standards.info, Node: Program Behavior, Next: Writing C, Prev: Design Advice, Up: Top + +4 Program Behavior for All Programs +*********************************** + +This node describes conventions for writing robust software. It also +describes general standards for error messages, the command line +interface, and how libraries should behave. + +* Menu: + +* Semantics:: Writing robust programs +* Libraries:: Library behavior +* Errors:: Formatting error messages +* User Interfaces:: Standards about interfaces generally +* Graphical Interfaces:: Standards for graphical interfaces +* Command-Line Interfaces:: Standards for command line interfaces +* Option Table:: Table of long options +* Memory Usage:: When and how to care about memory needs +* File Usage:: Which files to use, and where + + +File: standards.info, Node: Semantics, Next: Libraries, Up: Program Behavior + +4.1 Writing Robust Programs +=========================== + +Avoid arbitrary limits on the length or number of _any_ data structure, +including file names, lines, files, and symbols, by allocating all data +structures dynamically. In most Unix utilities, "long lines are +silently truncated". This is not acceptable in a GNU utility. + + Utilities reading files should not drop NUL characters, or any other +nonprinting characters _including those with codes above 0177_. The +only sensible exceptions would be utilities specifically intended for +interface to certain types of terminals or printers that can't handle +those characters. Whenever possible, try to make programs work +properly with sequences of bytes that represent multibyte characters, +using encodings such as UTF-8 and others. + + Check every system call for an error return, unless you know you +wish to ignore errors. Include the system error text (from `perror' or +equivalent) in _every_ error message resulting from a failing system +call, as well as the name of the file if any and the name of the +utility. Just "cannot open foo.c" or "stat failed" is not sufficient. + + Check every call to `malloc' or `realloc' to see if it returned +zero. Check `realloc' even if you are making the block smaller; in a +system that rounds block sizes to a power of 2, `realloc' may get a +different block if you ask for less space. + + In Unix, `realloc' can destroy the storage block if it returns zero. +GNU `realloc' does not have this bug: if it fails, the original block +is unchanged. Feel free to assume the bug is fixed. If you wish to +run your program on Unix, and wish to avoid lossage in this case, you +can use the GNU `malloc'. + + You must expect `free' to alter the contents of the block that was +freed. Anything you want to fetch from the block, you must fetch before +calling `free'. + + If `malloc' fails in a noninteractive program, make that a fatal +error. In an interactive program (one that reads commands from the +user), it is better to abort the command and return to the command +reader loop. This allows the user to kill other processes to free up +virtual memory, and then try the command again. + + Use `getopt_long' to decode arguments, unless the argument syntax +makes this unreasonable. + + When static storage is to be written in during program execution, use +explicit C code to initialize it. Reserve C initialized declarations +for data that will not be changed. + + Try to avoid low-level interfaces to obscure Unix data structures +(such as file directories, utmp, or the layout of kernel memory), since +these are less likely to work compatibly. If you need to find all the +files in a directory, use `readdir' or some other high-level interface. +These are supported compatibly by GNU. + + The preferred signal handling facilities are the BSD variant of +`signal', and the POSIX `sigaction' function; the alternative USG +`signal' interface is an inferior design. + + Nowadays, using the POSIX signal functions may be the easiest way to +make a program portable. If you use `signal', then on GNU/Linux +systems running GNU libc version 1, you should include `bsd/signal.h' +instead of `signal.h', so as to get BSD behavior. It is up to you +whether to support systems where `signal' has only the USG behavior, or +give up on them. + + In error checks that detect "impossible" conditions, just abort. +There is usually no point in printing any message. These checks +indicate the existence of bugs. Whoever wants to fix the bugs will have +to read the source code and run a debugger. So explain the problem with +comments in the source. The relevant data will be in variables, which +are easy to examine with the debugger, so there is no point moving them +elsewhere. + + Do not use a count of errors as the exit status for a program. +_That does not work_, because exit status values are limited to 8 bits +(0 through 255). A single run of the program might have 256 errors; if +you try to return 256 as the exit status, the parent process will see 0 +as the status, and it will appear that the program succeeded. + + If you make temporary files, check the `TMPDIR' environment +variable; if that variable is defined, use the specified directory +instead of `/tmp'. + + In addition, be aware that there is a possible security problem when +creating temporary files in world-writable directories. In C, you can +avoid this problem by creating temporary files in this manner: + + fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0600); + +or by using the `mkstemps' function from libiberty. + + In bash, use `set -C' to avoid this problem. + + +File: standards.info, Node: Libraries, Next: Errors, Prev: Semantics, Up: Program Behavior + +4.2 Library Behavior +==================== + +Try to make library functions reentrant. If they need to do dynamic +storage allocation, at least try to avoid any nonreentrancy aside from +that of `malloc' itself. + + Here are certain name conventions for libraries, to avoid name +conflicts. + + Choose a name prefix for the library, more than two characters long. +All external function and variable names should start with this prefix. +In addition, there should only be one of these in any given library +member. This usually means putting each one in a separate source file. + + An exception can be made when two external symbols are always used +together, so that no reasonable program could use one without the +other; then they can both go in the same file. + + External symbols that are not documented entry points for the user +should have names beginning with `_'. The `_' should be followed by +the chosen name prefix for the library, to prevent collisions with +other libraries. These can go in the same files with user entry points +if you like. + + Static functions and variables can be used as you like and need not +fit any naming convention. + + +File: standards.info, Node: Errors, Next: User Interfaces, Prev: Libraries, Up: Program Behavior + +4.3 Formatting Error Messages +============================= + +Error messages from compilers should look like this: + + SOURCE-FILE-NAME:LINENO: MESSAGE + +If you want to mention the column number, use this format: + + SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE + +Line numbers should start from 1 at the beginning of the file, and +column numbers should start from 1 at the beginning of the line. (Both +of these conventions are chosen for compatibility.) Calculate column +numbers assuming that space and all ASCII printing characters have +equal width, and assuming tab stops every 8 columns. + + Error messages from other noninteractive programs should look like +this: + + PROGRAM:SOURCE-FILE-NAME:LINENO: MESSAGE + +when there is an appropriate source file, or like this: + + PROGRAM: MESSAGE + +when there is no relevant source file. + + If you want to mention the column number, use this format: + + PROGRAM:SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE + + In an interactive program (one that is reading commands from a +terminal), it is better not to include the program name in an error +message. The place to indicate which program is running is in the +prompt or with the screen layout. (When the same program runs with +input from a source other than a terminal, it is not interactive and +would do best to print error messages using the noninteractive style.) + + The string MESSAGE should not begin with a capital letter when it +follows a program name and/or file name. Also, it should not end with +a period. + + Error messages from interactive programs, and other messages such as +usage messages, should start with a capital letter. But they should not +end with a period. + + +File: standards.info, Node: User Interfaces, Next: Graphical Interfaces, Prev: Errors, Up: Program Behavior + +4.4 Standards for Interfaces Generally +====================================== + +Please don't make the behavior of a utility depend on the name used to +invoke it. It is useful sometimes to make a link to a utility with a +different name, and that should not change what it does. + + Instead, use a run time option or a compilation switch or both to +select among the alternate behaviors. + + Likewise, please don't make the behavior of the program depend on the +type of output device it is used with. Device independence is an +important principle of the system's design; do not compromise it merely +to save someone from typing an option now and then. (Variation in error +message syntax when using a terminal is ok, because that is a side issue +that people do not depend on.) + + If you think one behavior is most useful when the output is to a +terminal, and another is most useful when the output is a file or a +pipe, then it is usually best to make the default behavior the one that +is useful with output to a terminal, and have an option for the other +behavior. + + Compatibility requires certain programs to depend on the type of +output device. It would be disastrous if `ls' or `sh' did not do so in +the way all users expect. In some of these cases, we supplement the +program with a preferred alternate version that does not depend on the +output device type. For example, we provide a `dir' program much like +`ls' except that its default output format is always multi-column +format. + + +File: standards.info, Node: Graphical Interfaces, Next: Command-Line Interfaces, Prev: User Interfaces, Up: Program Behavior + +4.5 Standards for Graphical Interfaces +====================================== + +When you write a program that provides a graphical user interface, +please make it work with X Windows and the GTK toolkit unless the +functionality specifically requires some alternative (for example, +"displaying jpeg images while in console mode"). + + In addition, please provide a command-line interface to control the +functionality. (In many cases, the graphical user interface can be a +separate program which invokes the command-line program.) This is so +that the same jobs can be done from scripts. + + Please also consider providing a CORBA interface (for use from +GNOME), a library interface (for use from C), and perhaps a +keyboard-driven console interface (for use by users from console mode). +Once you are doing the work to provide the functionality and the +graphical interface, these won't be much extra work. + + +File: standards.info, Node: Command-Line Interfaces, Next: Option Table, Prev: Graphical Interfaces, Up: Program Behavior + +4.6 Standards for Command Line Interfaces +========================================= + +It is a good idea to follow the POSIX guidelines for the command-line +options of a program. The easiest way to do this is to use `getopt' to +parse them. Note that the GNU version of `getopt' will normally permit +options anywhere among the arguments unless the special argument `--' +is used. This is not what POSIX specifies; it is a GNU extension. + + Please define long-named options that are equivalent to the +single-letter Unix-style options. We hope to make GNU more user +friendly this way. This is easy to do with the GNU function +`getopt_long'. + + One of the advantages of long-named options is that they can be +consistent from program to program. For example, users should be able +to expect the "verbose" option of any GNU program which has one, to be +spelled precisely `--verbose'. To achieve this uniformity, look at the +table of common long-option names when you choose the option names for +your program (*note Option Table::). + + It is usually a good idea for file names given as ordinary arguments +to be input files only; any output files would be specified using +options (preferably `-o' or `--output'). Even if you allow an output +file name as an ordinary argument for compatibility, try to provide an +option as another way to specify it. This will lead to more consistency +among GNU utilities, and fewer idiosyncracies for users to remember. + + All programs should support two standard options: `--version' and +`--help'. + +`--version' + This option should direct the program to print information about + its name, version, origin and legal status, all on standard + output, and then exit successfully. Other options and arguments + should be ignored once this is seen, and the program should not + perform its normal function. + + The first line is meant to be easy for a program to parse; the + version number proper starts after the last space. In addition, + it contains the canonical name for this program, in this format: + + GNU Emacs 19.30 + + The program's name should be a constant string; _don't_ compute it + from `argv[0]'. The idea is to state the standard or canonical + name for the program, not its file name. There are other ways to + find out the precise file name where a command is found in `PATH'. + + If the program is a subsidiary part of a larger package, mention + the package name in parentheses, like this: + + emacsserver (GNU Emacs) 19.30 + + If the package has a version number which is different from this + program's version number, you can mention the package version + number just before the close-parenthesis. + + If you *need* to mention the version numbers of libraries which + are distributed separately from the package which contains this + program, you can do so by printing an additional line of version + info for each library you want to mention. Use the same format + for these lines as for the first line. + + Please do not mention all of the libraries that the program uses + "just for completeness"--that would produce a lot of unhelpful + clutter. Please mention library version numbers only if you find + in practice that they are very important to you in debugging. + + The following line, after the version number line or lines, should + be a copyright notice. If more than one copyright notice is + called for, put each on a separate line. + + Next should follow a brief statement that the program is free + software, and that users are free to copy and change it on certain + conditions. If the program is covered by the GNU GPL, say so + here. Also mention that there is no warranty, to the extent + permitted by law. + + It is ok to finish the output with a list of the major authors of + the program, as a way of giving credit. + + Here's an example of output that follows these rules: + + GNU Emacs 19.34.5 + Copyright (C) 1996 Free Software Foundation, Inc. + GNU Emacs comes with NO WARRANTY, + to the extent permitted by law. + You may redistribute copies of GNU Emacs + under the terms of the GNU General Public License. + For more information about these matters, + see the files named COPYING. + + You should adapt this to your program, of course, filling in the + proper year, copyright holder, name of program, and the references + to distribution terms, and changing the rest of the wording as + necessary. + + This copyright notice only needs to mention the most recent year in + which changes were made--there's no need to list the years for + previous versions' changes. You don't have to mention the name of + the program in these notices, if that is inconvenient, since it + appeared in the first line. + + Translations of the above lines must preserve the validity of the + copyright notices (*note Internationalization::). If the + translation's character set supports it, the `(C)' should be + replaced with the copyright symbol, as follows: + + (the official copyright symbol, which is the letter C in a circle); + + Write the word "Copyright" exactly like that, in English. Do not + translate it into another language. International treaties + recognize the English word "Copyright"; translations into other + languages do not have legal significance. + +`--help' + This option should output brief documentation for how to invoke the + program, on standard output, then exit successfully. Other + options and arguments should be ignored once this is seen, and the + program should not perform its normal function. + + Near the end of the `--help' option's output there should be a line + that says where to mail bug reports. It should have this format: + + Report bugs to MAILING-ADDRESS. + + +File: standards.info, Node: Option Table, Next: Memory Usage, Prev: Command-Line Interfaces, Up: Program Behavior + +4.7 Table of Long Options +========================= + +Here is a table of long options used by GNU programs. It is surely +incomplete, but we aim to list all the options that a new program might +want to be compatible with. If you use names not already in the table, +please send a list of them, with their +meanings, so we can update the table. + +`after-date' + `-N' in `tar'. + +`all' + `-a' in `du', `ls', `nm', `stty', `uname', and `unexpand'. + +`all-text' + `-a' in `diff'. + +`almost-all' + `-A' in `ls'. + +`append' + `-a' in `etags', `tee', `time'; `-r' in `tar'. + +`archive' + `-a' in `cp'. + +`archive-name' + `-n' in `shar'. + +`arglength' + `-l' in `m4'. + +`ascii' + `-a' in `diff'. + +`assign' + `-v' in `gawk'. + +`assume-new' + `-W' in Make. + +`assume-old' + `-o' in Make. + +`auto-check' + `-a' in `recode'. + +`auto-pager' + `-a' in `wdiff'. + +`auto-reference' + `-A' in `ptx'. + +`avoid-wraps' + `-n' in `wdiff'. + +`background' + For server programs, run in the background. + +`backward-search' + `-B' in `ctags'. + +`basename' + `-f' in `shar'. + +`batch' + Used in GDB. + +`baud' + Used in GDB. + +`before' + `-b' in `tac'. + +`binary' + `-b' in `cpio' and `diff'. + +`bits-per-code' + `-b' in `shar'. + +`block-size' + Used in `cpio' and `tar'. + +`blocks' + `-b' in `head' and `tail'. + +`break-file' + `-b' in `ptx'. + +`brief' + Used in various programs to make output shorter. + +`bytes' + `-c' in `head', `split', and `tail'. + +`c++' + `-C' in `etags'. + +`catenate' + `-A' in `tar'. + +`cd' + Used in various programs to specify the directory to use. + +`changes' + `-c' in `chgrp' and `chown'. + +`classify' + `-F' in `ls'. + +`colons' + `-c' in `recode'. + +`command' + `-c' in `su'; `-x' in GDB. + +`compare' + `-d' in `tar'. + +`compat' + Used in `gawk'. + +`compress' + `-Z' in `tar' and `shar'. + +`concatenate' + `-A' in `tar'. + +`confirmation' + `-w' in `tar'. + +`context' + Used in `diff'. + +`copyleft' + `-W copyleft' in `gawk'. + +`copyright' + `-C' in `ptx', `recode', and `wdiff'; `-W copyright' in `gawk'. + +`core' + Used in GDB. + +`count' + `-q' in `who'. + +`count-links' + `-l' in `du'. + +`create' + Used in `tar' and `cpio'. + +`cut-mark' + `-c' in `shar'. + +`cxref' + `-x' in `ctags'. + +`date' + `-d' in `touch'. + +`debug' + `-d' in Make and `m4'; `-t' in Bison. + +`define' + `-D' in `m4'. + +`defines' + `-d' in Bison and `ctags'. + +`delete' + `-D' in `tar'. + +`dereference' + `-L' in `chgrp', `chown', `cpio', `du', `ls', and `tar'. + +`dereference-args' + `-D' in `du'. + +`device' + Specify an I/O device (special file name). + +`diacritics' + `-d' in `recode'. + +`dictionary-order' + `-d' in `look'. + +`diff' + `-d' in `tar'. + +`digits' + `-n' in `csplit'. + +`directory' + Specify the directory to use, in various programs. In `ls', it + means to show directories themselves rather than their contents. + In `rm' and `ln', it means to not treat links to directories + specially. + +`discard-all' + `-x' in `strip'. + +`discard-locals' + `-X' in `strip'. + +`dry-run' + `-n' in Make. + +`ed' + `-e' in `diff'. + +`elide-empty-files' + `-z' in `csplit'. + +`end-delete' + `-x' in `wdiff'. + +`end-insert' + `-z' in `wdiff'. + +`entire-new-file' + `-N' in `diff'. + +`environment-overrides' + `-e' in Make. + +`eof' + `-e' in `xargs'. + +`epoch' + Used in GDB. + +`error-limit' + Used in `makeinfo'. + +`error-output' + `-o' in `m4'. + +`escape' + `-b' in `ls'. + +`exclude-from' + `-X' in `tar'. + +`exec' + Used in GDB. + +`exit' + `-x' in `xargs'. + +`exit-0' + `-e' in `unshar'. + +`expand-tabs' + `-t' in `diff'. + +`expression' + `-e' in `sed'. + +`extern-only' + `-g' in `nm'. + +`extract' + `-i' in `cpio'; `-x' in `tar'. + +`faces' + `-f' in `finger'. + +`fast' + `-f' in `su'. + +`fatal-warnings' + `-E' in `m4'. + +`file' + `-f' in `info', `gawk', Make, `mt', and `tar'; `-n' in `sed'; `-r' + in `touch'. + +`field-separator' + `-F' in `gawk'. + +`file-prefix' + `-b' in Bison. + +`file-type' + `-F' in `ls'. + +`files-from' + `-T' in `tar'. + +`fill-column' + Used in `makeinfo'. + +`flag-truncation' + `-F' in `ptx'. + +`fixed-output-files' + `-y' in Bison. + +`follow' + `-f' in `tail'. + +`footnote-style' + Used in `makeinfo'. + +`force' + `-f' in `cp', `ln', `mv', and `rm'. + +`force-prefix' + `-F' in `shar'. + +`foreground' + For server programs, run in the foreground; in other words, don't + do anything special to run the server in the background. + +`format' + Used in `ls', `time', and `ptx'. + +`freeze-state' + `-F' in `m4'. + +`fullname' + Used in GDB. + +`gap-size' + `-g' in `ptx'. + +`get' + `-x' in `tar'. + +`graphic' + `-i' in `ul'. + +`graphics' + `-g' in `recode'. + +`group' + `-g' in `install'. + +`gzip' + `-z' in `tar' and `shar'. + +`hashsize' + `-H' in `m4'. + +`header' + `-h' in `objdump' and `recode' + +`heading' + `-H' in `who'. + +`help' + Used to ask for brief usage information. + +`here-delimiter' + `-d' in `shar'. + +`hide-control-chars' + `-q' in `ls'. + +`html' + In `makeinfo', output HTML. + +`idle' + `-u' in `who'. + +`ifdef' + `-D' in `diff'. + +`ignore' + `-I' in `ls'; `-x' in `recode'. + +`ignore-all-space' + `-w' in `diff'. + +`ignore-backups' + `-B' in `ls'. + +`ignore-blank-lines' + `-B' in `diff'. + +`ignore-case' + `-f' in `look' and `ptx'; `-i' in `diff' and `wdiff'. + +`ignore-errors' + `-i' in Make. + +`ignore-file' + `-i' in `ptx'. + +`ignore-indentation' + `-I' in `etags'. + +`ignore-init-file' + `-f' in Oleo. + +`ignore-interrupts' + `-i' in `tee'. + +`ignore-matching-lines' + `-I' in `diff'. + +`ignore-space-change' + `-b' in `diff'. + +`ignore-zeros' + `-i' in `tar'. + +`include' + `-i' in `etags'; `-I' in `m4'. + +`include-dir' + `-I' in Make. + +`incremental' + `-G' in `tar'. + +`info' + `-i', `-l', and `-m' in Finger. + +`init-file' + In some programs, specify the name of the file to read as the + user's init file. + +`initial' + `-i' in `expand'. + +`initial-tab' + `-T' in `diff'. + +`inode' + `-i' in `ls'. + +`interactive' + `-i' in `cp', `ln', `mv', `rm'; `-e' in `m4'; `-p' in `xargs'; + `-w' in `tar'. + +`intermix-type' + `-p' in `shar'. + +`iso-8601' + Used in `date' + +`jobs' + `-j' in Make. + +`just-print' + `-n' in Make. + +`keep-going' + `-k' in Make. + +`keep-files' + `-k' in `csplit'. + +`kilobytes' + `-k' in `du' and `ls'. + +`language' + `-l' in `etags'. + +`less-mode' + `-l' in `wdiff'. + +`level-for-gzip' + `-g' in `shar'. + +`line-bytes' + `-C' in `split'. + +`lines' + Used in `split', `head', and `tail'. + +`link' + `-l' in `cpio'. + +`lint' +`lint-old' + Used in `gawk'. + +`list' + `-t' in `cpio'; `-l' in `recode'. + +`list' + `-t' in `tar'. + +`literal' + `-N' in `ls'. + +`load-average' + `-l' in Make. + +`login' + Used in `su'. + +`machine' + No listing of which programs already use this; someone should + check to see if any actually do, and tell . + +`macro-name' + `-M' in `ptx'. + +`mail' + `-m' in `hello' and `uname'. + +`make-directories' + `-d' in `cpio'. + +`makefile' + `-f' in Make. + +`mapped' + Used in GDB. + +`max-args' + `-n' in `xargs'. + +`max-chars' + `-n' in `xargs'. + +`max-lines' + `-l' in `xargs'. + +`max-load' + `-l' in Make. + +`max-procs' + `-P' in `xargs'. + +`mesg' + `-T' in `who'. + +`message' + `-T' in `who'. + +`minimal' + `-d' in `diff'. + +`mixed-uuencode' + `-M' in `shar'. + +`mode' + `-m' in `install', `mkdir', and `mkfifo'. + +`modification-time' + `-m' in `tar'. + +`multi-volume' + `-M' in `tar'. + +`name-prefix' + `-a' in Bison. + +`nesting-limit' + `-L' in `m4'. + +`net-headers' + `-a' in `shar'. + +`new-file' + `-W' in Make. + +`no-builtin-rules' + `-r' in Make. + +`no-character-count' + `-w' in `shar'. + +`no-check-existing' + `-x' in `shar'. + +`no-common' + `-3' in `wdiff'. + +`no-create' + `-c' in `touch'. + +`no-defines' + `-D' in `etags'. + +`no-deleted' + `-1' in `wdiff'. + +`no-dereference' + `-d' in `cp'. + +`no-inserted' + `-2' in `wdiff'. + +`no-keep-going' + `-S' in Make. + +`no-lines' + `-l' in Bison. + +`no-piping' + `-P' in `shar'. + +`no-prof' + `-e' in `gprof'. + +`no-regex' + `-R' in `etags'. + +`no-sort' + `-p' in `nm'. + +`no-split' + Used in `makeinfo'. + +`no-static' + `-a' in `gprof'. + +`no-time' + `-E' in `gprof'. + +`no-timestamp' + `-m' in `shar'. + +`no-validate' + Used in `makeinfo'. + +`no-wait' + Used in `emacsclient'. + +`no-warn' + Used in various programs to inhibit warnings. + +`node' + `-n' in `info'. + +`nodename' + `-n' in `uname'. + +`nonmatching' + `-f' in `cpio'. + +`nstuff' + `-n' in `objdump'. + +`null' + `-0' in `xargs'. + +`number' + `-n' in `cat'. + +`number-nonblank' + `-b' in `cat'. + +`numeric-sort' + `-n' in `nm'. + +`numeric-uid-gid' + `-n' in `cpio' and `ls'. + +`nx' + Used in GDB. + +`old-archive' + `-o' in `tar'. + +`old-file' + `-o' in Make. + +`one-file-system' + `-l' in `tar', `cp', and `du'. + +`only-file' + `-o' in `ptx'. + +`only-prof' + `-f' in `gprof'. + +`only-time' + `-F' in `gprof'. + +`options' + `-o' in `getopt', `fdlist', `fdmount', `fdmountd', and `fdumount'. + +`output' + In various programs, specify the output file name. + +`output-prefix' + `-o' in `shar'. + +`override' + `-o' in `rm'. + +`overwrite' + `-c' in `unshar'. + +`owner' + `-o' in `install'. + +`paginate' + `-l' in `diff'. + +`paragraph-indent' + Used in `makeinfo'. + +`parents' + `-p' in `mkdir' and `rmdir'. + +`pass-all' + `-p' in `ul'. + +`pass-through' + `-p' in `cpio'. + +`port' + `-P' in `finger'. + +`portability' + `-c' in `cpio' and `tar'. + +`posix' + Used in `gawk'. + +`prefix-builtins' + `-P' in `m4'. + +`prefix' + `-f' in `csplit'. + +`preserve' + Used in `tar' and `cp'. + +`preserve-environment' + `-p' in `su'. + +`preserve-modification-time' + `-m' in `cpio'. + +`preserve-order' + `-s' in `tar'. + +`preserve-permissions' + `-p' in `tar'. + +`print' + `-l' in `diff'. + +`print-chars' + `-L' in `cmp'. + +`print-data-base' + `-p' in Make. + +`print-directory' + `-w' in Make. + +`print-file-name' + `-o' in `nm'. + +`print-symdefs' + `-s' in `nm'. + +`printer' + `-p' in `wdiff'. + +`prompt' + `-p' in `ed'. + +`proxy' + Specify an HTTP proxy. + +`query-user' + `-X' in `shar'. + +`question' + `-q' in Make. + +`quiet' + Used in many programs to inhibit the usual output. *Note_* every + program accepting `--quiet' should accept `--silent' as a synonym. + +`quiet-unshar' + `-Q' in `shar' + +`quote-name' + `-Q' in `ls'. + +`rcs' + `-n' in `diff'. + +`re-interval' + Used in `gawk'. + +`read-full-blocks' + `-B' in `tar'. + +`readnow' + Used in GDB. + +`recon' + `-n' in Make. + +`record-number' + `-R' in `tar'. + +`recursive' + Used in `chgrp', `chown', `cp', `ls', `diff', and `rm'. + +`reference-limit' + Used in `makeinfo'. + +`references' + `-r' in `ptx'. + +`regex' + `-r' in `tac' and `etags'. + +`release' + `-r' in `uname'. + +`reload-state' + `-R' in `m4'. + +`relocation' + `-r' in `objdump'. + +`rename' + `-r' in `cpio'. + +`replace' + `-i' in `xargs'. + +`report-identical-files' + `-s' in `diff'. + +`reset-access-time' + `-a' in `cpio'. + +`reverse' + `-r' in `ls' and `nm'. + +`reversed-ed' + `-f' in `diff'. + +`right-side-defs' + `-R' in `ptx'. + +`same-order' + `-s' in `tar'. + +`same-permissions' + `-p' in `tar'. + +`save' + `-g' in `stty'. + +`se' + Used in GDB. + +`sentence-regexp' + `-S' in `ptx'. + +`separate-dirs' + `-S' in `du'. + +`separator' + `-s' in `tac'. + +`sequence' + Used by `recode' to chose files or pipes for sequencing passes. + +`shell' + `-s' in `su'. + +`show-all' + `-A' in `cat'. + +`show-c-function' + `-p' in `diff'. + +`show-ends' + `-E' in `cat'. + +`show-function-line' + `-F' in `diff'. + +`show-tabs' + `-T' in `cat'. + +`silent' + Used in many programs to inhibit the usual output. *Note_* every + program accepting `--silent' should accept `--quiet' as a synonym. + +`size' + `-s' in `ls'. + +`socket' + Specify a file descriptor for a network server to use for its + socket, instead of opening and binding a new socket. This + provides a way to run, in a nonpriveledged process, a server that + normally needs a reserved port number. + +`sort' + Used in `ls'. + +`source' + `-W source' in `gawk'. + +`sparse' + `-S' in `tar'. + +`speed-large-files' + `-H' in `diff'. + +`split-at' + `-E' in `unshar'. + +`split-size-limit' + `-L' in `shar'. + +`squeeze-blank' + `-s' in `cat'. + +`start-delete' + `-w' in `wdiff'. + +`start-insert' + `-y' in `wdiff'. + +`starting-file' + Used in `tar' and `diff' to specify which file within a directory + to start processing with. + +`statistics' + `-s' in `wdiff'. + +`stdin-file-list' + `-S' in `shar'. + +`stop' + `-S' in Make. + +`strict' + `-s' in `recode'. + +`strip' + `-s' in `install'. + +`strip-all' + `-s' in `strip'. + +`strip-debug' + `-S' in `strip'. + +`submitter' + `-s' in `shar'. + +`suffix' + `-S' in `cp', `ln', `mv'. + +`suffix-format' + `-b' in `csplit'. + +`sum' + `-s' in `gprof'. + +`summarize' + `-s' in `du'. + +`symbolic' + `-s' in `ln'. + +`symbols' + Used in GDB and `objdump'. + +`synclines' + `-s' in `m4'. + +`sysname' + `-s' in `uname'. + +`tabs' + `-t' in `expand' and `unexpand'. + +`tabsize' + `-T' in `ls'. + +`terminal' + `-T' in `tput' and `ul'. `-t' in `wdiff'. + +`text' + `-a' in `diff'. + +`text-files' + `-T' in `shar'. + +`time' + Used in `ls' and `touch'. + +`timeout' + Specify how long to wait before giving up on some operation. + +`to-stdout' + `-O' in `tar'. + +`total' + `-c' in `du'. + +`touch' + `-t' in Make, `ranlib', and `recode'. + +`trace' + `-t' in `m4'. + +`traditional' + `-t' in `hello'; `-W traditional' in `gawk'; `-G' in `ed', `m4', + and `ptx'. + +`tty' + Used in GDB. + +`typedefs' + `-t' in `ctags'. + +`typedefs-and-c++' + `-T' in `ctags'. + +`typeset-mode' + `-t' in `ptx'. + +`uncompress' + `-z' in `tar'. + +`unconditional' + `-u' in `cpio'. + +`undefine' + `-U' in `m4'. + +`undefined-only' + `-u' in `nm'. + +`update' + `-u' in `cp', `ctags', `mv', `tar'. + +`usage' + Used in `gawk'; same as `--help'. + +`uuencode' + `-B' in `shar'. + +`vanilla-operation' + `-V' in `shar'. + +`verbose' + Print more information about progress. Many programs support this. + +`verify' + `-W' in `tar'. + +`version' + Print the version number. + +`version-control' + `-V' in `cp', `ln', `mv'. + +`vgrind' + `-v' in `ctags'. + +`volume' + `-V' in `tar'. + +`what-if' + `-W' in Make. + +`whole-size-limit' + `-l' in `shar'. + +`width' + `-w' in `ls' and `ptx'. + +`word-regexp' + `-W' in `ptx'. + +`writable' + `-T' in `who'. + +`zeros' + `-z' in `gprof'. + + +File: standards.info, Node: Memory Usage, Next: File Usage, Prev: Option Table, Up: Program Behavior + +4.8 Memory Usage +================ + +If a program typically uses just a few meg of memory, don't bother +making any effort to reduce memory usage. For example, if it is +impractical for other reasons to operate on files more than a few meg +long, it is reasonable to read entire input files into core to operate +on them. + + However, for programs such as `cat' or `tail', that can usefully +operate on very large files, it is important to avoid using a technique +that would artificially limit the size of files it can handle. If a +program works by lines and could be applied to arbitrary user-supplied +input files, it should keep only a line in memory, because this is not +very hard and users will want to be able to operate on input files that +are bigger than will fit in core all at once. + + If your program creates complicated data structures, just make them +in core and give a fatal error if `malloc' returns zero. + + +File: standards.info, Node: File Usage, Prev: Memory Usage, Up: Program Behavior + +4.9 File Usage +============== + +Programs should be prepared to operate when `/usr' and `/etc' are +read-only file systems. Thus, if the program manages log files, lock +files, backup files, score files, or any other files which are modified +for internal purposes, these files should not be stored in `/usr' or +`/etc'. + + There are two exceptions. `/etc' is used to store system +configuration information; it is reasonable for a program to modify +files in `/etc' when its job is to update the system configuration. +Also, if the user explicitly asks to modify one file in a directory, it +is reasonable for the program to store other files in the same +directory. + + +File: standards.info, Node: Writing C, Next: Documentation, Prev: Program Behavior, Up: Top + +5 Making The Best Use of C +************************** + +This node provides advice on how best to use the C language when +writing GNU software. + +* Menu: + +* Formatting:: Formatting Your Source Code +* Comments:: Commenting Your Work +* Syntactic Conventions:: Clean Use of C Constructs +* Names:: Naming Variables, Functions, and Files +* System Portability:: Portability between different operating systems +* CPU Portability:: Supporting the range of CPU types +* System Functions:: Portability and ``standard'' library functions +* Internationalization:: Techniques for internationalization +* Mmap:: How you can safely use `mmap'. + + +File: standards.info, Node: Formatting, Next: Comments, Up: Writing C + +5.1 Formatting Your Source Code +=============================== + +It is important to put the open-brace that starts the body of a C +function in column zero, and avoid putting any other open-brace or +open-parenthesis or open-bracket in column zero. Several tools look +for open-braces in column zero to find the beginnings of C functions. +These tools will not work on code not formatted that way. + + It is also important for function definitions to start the name of +the function in column zero. This helps people to search for function +definitions, and may also help certain tools recognize them. Thus, the +proper format is this: + + static char * + concat (s1, s2) /* Name starts in column zero here */ + char *s1, *s2; + { /* Open brace in column zero here */ + ... + } + +or, if you want to use Standard C syntax, format the definition like +this: + + static char * + concat (char *s1, char *s2) + { + ... + } + + In Standard C, if the arguments don't fit nicely on one line, split +it like this: + + int + lots_of_args (int an_integer, long a_long, short a_short, + double a_double, float a_float) + ... + + The rest of this section gives our recommendations for other aspects +of C formatting style, which is also the default style of the `indent' +program in version 1.2 and newer. It corresponds to the options + + -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 + -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob + + We don't think of these recommendations as requirements, because it +causes no problems for users if two different programs have different +formatting styles. + + But whatever style you use, please use it consistently, since a +mixture of styles within one program tends to look ugly. If you are +contributing changes to an existing program, please follow the style of +that program. + + For the body of the function, our recommended style looks like this: + + if (x < foo (y, z)) + haha = bar[4] + 5; + else + { + while (z) + { + haha += foo (z, z); + z--; + } + return ++x + bar (); + } + + We find it easier to read a program when it has spaces before the +open-parentheses and after the commas. Especially after the commas. + + When you split an expression into multiple lines, split it before an +operator, not after one. Here is the right way: + + if (foo_this_is_long && bar > win (x, y, z) + && remaining_condition) + + Try to avoid having two operators of different precedence at the same +level of indentation. For example, don't write this: + + mode = (inmode[j] == VOIDmode + || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]) + ? outmode[j] : inmode[j]); + + Instead, use extra parentheses so that the indentation shows the +nesting: + + mode = ((inmode[j] == VOIDmode + || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j]))) + ? outmode[j] : inmode[j]); + + Insert extra parentheses so that Emacs will indent the code properly. +For example, the following indentation looks nice if you do it by hand, + + v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000; + +but Emacs would alter it. Adding a set of parentheses produces +something that looks equally nice, and which Emacs will preserve: + + v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000 + + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000); + + Format do-while statements like this: + + do + { + a = foo (a); + } + while (a > 0); + + Please use formfeed characters (control-L) to divide the program into +pages at logical places (but not within a function). It does not matter +just how long the pages are, since they do not have to fit on a printed +page. The formfeeds should appear alone on lines by themselves. + + +File: standards.info, Node: Comments, Next: Syntactic Conventions, Prev: Formatting, Up: Writing C + +5.2 Commenting Your Work +======================== + +Every program should start with a comment saying briefly what it is for. +Example: `fmt - filter for simple filling of text'. + + Please write the comments in a GNU program in English, because +English is the one language that nearly all programmers in all +countries can read. If you do not write English well, please write +comments in English as well as you can, then ask other people to help +rewrite them. If you can't write comments in English, please find +someone to work with you and translate your comments into English. + + Please put a comment on each function saying what the function does, +what sorts of arguments it gets, and what the possible values of +arguments mean and are used for. It is not necessary to duplicate in +words the meaning of the C argument declarations, if a C type is being +used in its customary fashion. If there is anything nonstandard about +its use (such as an argument of type `char *' which is really the +address of the second character of a string, not the first), or any +possible values that would not work the way one would expect (such as, +that strings containing newlines are not guaranteed to work), be sure +to say so. + + Also explain the significance of the return value, if there is one. + + Please put two spaces after the end of a sentence in your comments, +so that the Emacs sentence commands will work. Also, please write +complete sentences and capitalize the first word. If a lower-case +identifier comes at the beginning of a sentence, don't capitalize it! +Changing the spelling makes it a different identifier. If you don't +like starting a sentence with a lower case letter, write the sentence +differently (e.g., "The identifier lower-case is ..."). + + The comment on a function is much clearer if you use the argument +names to speak about the argument values. The variable name itself +should be lower case, but write it in upper case when you are speaking +about the value rather than the variable itself. Thus, "the inode +number NODE_NUM" rather than "an inode". + + There is usually no purpose in restating the name of the function in +the comment before it, because the reader can see that for himself. +There might be an exception when the comment is so long that the +function itself would be off the bottom of the screen. + + There should be a comment on each static variable as well, like this: + + /* Nonzero means truncate lines in the display; + zero means continue them. */ + int truncate_lines; + + Every `#endif' should have a comment, except in the case of short +conditionals (just a few lines) that are not nested. The comment should +state the condition of the conditional that is ending, _including its +sense_. `#else' should have a comment describing the condition _and +sense_ of the code that follows. For example: + + #ifdef foo + ... + #else /* not foo */ + ... + #endif /* not foo */ + #ifdef foo + ... + #endif /* foo */ + +but, by contrast, write the comments this way for a `#ifndef': + + #ifndef foo + ... + #else /* foo */ + ... + #endif /* foo */ + #ifndef foo + ... + #endif /* not foo */ + + +File: standards.info, Node: Syntactic Conventions, Next: Names, Prev: Comments, Up: Writing C + +5.3 Clean Use of C Constructs +============================= + +Please explicitly declare the types of all objects. For example, you +should explicitly declare all arguments to functions, and you should +declare functions to return `int' rather than omitting the `int'. + + Some programmers like to use the GCC `-Wall' option, and change the +code whenever it issues a warning. If you want to do this, then do. +Other programmers prefer not to use `-Wall', because it gives warnings +for valid and legitimate code which they do not want to change. If you +want to do this, then do. The compiler should be your servant, not +your master. + + Declarations of external functions and functions to appear later in +the source file should all go in one place near the beginning of the +file (somewhere before the first function definition in the file), or +else should go in a header file. Don't put `extern' declarations inside +functions. + + It used to be common practice to use the same local variables (with +names like `tem') over and over for different values within one +function. Instead of doing this, it is better declare a separate local +variable for each distinct purpose, and give it a name which is +meaningful. This not only makes programs easier to understand, it also +facilitates optimization by good compilers. You can also move the +declaration of each local variable into the smallest scope that includes +all its uses. This makes the program even cleaner. + + Don't use local variables or parameters that shadow global +identifiers. + + Don't declare multiple variables in one declaration that spans lines. +Start a new declaration on each line, instead. For example, instead of +this: + + int foo, + bar; + +write either this: + + int foo, bar; + +or this: + + int foo; + int bar; + +(If they are global variables, each should have a comment preceding it +anyway.) + + When you have an `if'-`else' statement nested in another `if' +statement, always put braces around the `if'-`else'. Thus, never write +like this: + + if (foo) + if (bar) + win (); + else + lose (); + +always like this: + + if (foo) + { + if (bar) + win (); + else + lose (); + } + + If you have an `if' statement nested inside of an `else' statement, +either write `else if' on one line, like this, + + if (foo) + ... + else if (bar) + ... + +with its `then'-part indented like the preceding `then'-part, or write +the nested `if' within braces like this: + + if (foo) + ... + else + { + if (bar) + ... + } + + Don't declare both a structure tag and variables or typedefs in the +same declaration. Instead, declare the structure tag separately and +then use it to declare the variables or typedefs. + + Try to avoid assignments inside `if'-conditions. For example, don't +write this: + + if ((foo = (char *) malloc (sizeof *foo)) == 0) + fatal ("virtual memory exhausted"); + +instead, write this: + + foo = (char *) malloc (sizeof *foo); + if (foo == 0) + fatal ("virtual memory exhausted"); + + Don't make the program ugly to placate `lint'. Please don't insert +any casts to `void'. Zero without a cast is perfectly fine as a null +pointer constant, except when calling a varargs function. + + +File: standards.info, Node: Names, Next: System Portability, Prev: Syntactic Conventions, Up: Writing C + +5.4 Naming Variables, Functions, and Files +========================================== + +The names of global variables and functions in a program serve as +comments of a sort. So don't choose terse names--instead, look for +names that give useful information about the meaning of the variable or +function. In a GNU program, names should be English, like other +comments. + + Local variable names can be shorter, because they are used only +within one context, where (presumably) comments explain their purpose. + + Try to limit your use of abbreviations in symbol names. It is ok to +make a few abbreviations, explain what they mean, and then use them +frequently, but don't use lots of obscure abbreviations. + + Please use underscores to separate words in a name, so that the Emacs +word commands can be useful within them. Stick to lower case; reserve +upper case for macros and `enum' constants, and for name-prefixes that +follow a uniform convention. + + For example, you should use names like `ignore_space_change_flag'; +don't use names like `iCantReadThis'. + + Variables that indicate whether command-line options have been +specified should be named after the meaning of the option, not after +the option-letter. A comment should state both the exact meaning of +the option and its letter. For example, + + /* Ignore changes in horizontal whitespace (-b). */ + int ignore_space_change_flag; + + When you want to define names with constant integer values, use +`enum' rather than `#define'. GDB knows about enumeration constants. + + You might want to make sure that none of the file names would +conflict the files were loaded onto an MS-DOS file system which +shortens the names. You can use the program `doschk' to test for this. + + Some GNU programs were designed to limit themselves to file names of +14 characters or less, to avoid file name conflicts if they are read +into older System V systems. Please preserve this feature in the +existing GNU programs that have it, but there is no need to do this in +new GNU programs. `doschk' also reports file names longer than 14 +characters. + + +File: standards.info, Node: System Portability, Next: CPU Portability, Prev: Names, Up: Writing C + +5.5 Portability between System Types +==================================== + +In the Unix world, "portability" refers to porting to different Unix +versions. For a GNU program, this kind of portability is desirable, but +not paramount. + + The primary purpose of GNU software is to run on top of the GNU +kernel, compiled with the GNU C compiler, on various types of CPU. So +the kinds of portability that are absolutely necessary are quite +limited. But it is important to support Linux-based GNU systems, since +they are the form of GNU that is popular. + + Beyond that, it is good to support the other free operating systems +(*BSD), and it is nice to support other Unix-like systems if you want +to. Supporting a variety of Unix-like systems is desirable, although +not paramount. It is usually not too hard, so you may as well do it. +But you don't have to consider it an obligation, if it does turn out to +be hard. + + The easiest way to achieve portability to most Unix-like systems is +to use Autoconf. It's unlikely that your program needs to know more +information about the host platform than Autoconf can provide, simply +because most of the programs that need such knowledge have already been +written. + + Avoid using the format of semi-internal data bases (e.g., +directories) when there is a higher-level alternative (`readdir'). + + As for systems that are not like Unix, such as MSDOS, Windows, the +Macintosh, VMS, and MVS, supporting them is often a lot of work. When +that is the case, it is better to spend your time adding features that +will be useful on GNU and GNU/Linux, rather than on supporting other +incompatible systems. + + It is a good idea to define the "feature test macro" `_GNU_SOURCE' +when compiling your C files. When you compile on GNU or GNU/Linux, +this will enable the declarations of GNU library extension functions, +and that will usually give you a compiler error message if you define +the same function names in some other way in your program. (You don't +have to actually _use_ these functions, if you prefer to make the +program more portable to other systems.) + + But whether or not you use these GNU extensions, you should avoid +using their names for any other meanings. Doing so would make it hard +to move your code into other GNU programs. + + +File: standards.info, Node: CPU Portability, Next: System Functions, Prev: System Portability, Up: Writing C + +5.6 Portability between CPUs +============================ + +Even GNU systems will differ because of differences among CPU +types--for example, difference in byte ordering and alignment +requirements. It is absolutely essential to handle these differences. +However, don't make any effort to cater to the possibility that an +`int' will be less than 32 bits. We don't support 16-bit machines in +GNU. + + Similarly, don't make any effort to cater to the possibility that +`long' will be smaller than predefined types like `size_t'. For +example, the following code is ok: + + printf ("size = %lu\n", (unsigned long) sizeof array); + printf ("diff = %ld\n", (long) (pointer2 - pointer1)); + + 1989 Standard C requires this to work, and we know of only one +counterexample: 64-bit programs on Microsoft Windows IA-64. We will +leave it to those who want to port GNU programs to that environment to +figure out how to do it. + + Predefined file-size types like `off_t' are an exception: they are +longer than `long' on many platforms, so code like the above won't work +with them. One way to print an `off_t' value portably is to print its +digits yourself, one by one. + + Don't assume that the address of an `int' object is also the address +of its least-significant byte. This is false on big-endian machines. +Thus, don't make the following mistake: + + int c; + ... + while ((c = getchar()) != EOF) + write(file_descriptor, &c, 1); + + When calling functions, you need not worry about the difference +between pointers of various types, or between pointers and integers. +On most machines, there's no difference anyway. As for the few +machines where there is a difference, all of them support Standard C +prototypes, so you can use prototypes (perhaps conditionalized to be +active only in Standard C) to make the code work on those systems. + + In certain cases, it is ok to pass integer and pointer arguments +indiscriminately to the same function, and use no prototype on any +system. For example, many GNU programs have error-reporting functions +that pass their arguments along to `printf' and friends: + + error (s, a1, a2, a3) + char *s; + char *a1, *a2, *a3; + { + fprintf (stderr, "error: "); + fprintf (stderr, s, a1, a2, a3); + } + +In practice, this works on all machines, since a pointer is generally +the widest possible kind of argument; it is much simpler than any +"correct" alternative. Be sure _not_ to use a prototype for such +functions. + + If you have decided to use Standard C, then you can instead define +`error' using `stdarg.h', and pass the arguments along to `vfprintf'. + + Avoid casting pointers to integers if you can. Such casts greatly +reduce portability, and in most programs they are easy to avoid. In the +cases where casting pointers to integers is essential--such as, a Lisp +interpreter which stores type information as well as an address in one +word--you'll have to make explicit provisions to handle different word +sizes. You will also need to make provision for systems in which the +normal range of addresses you can get from `malloc' starts far away +from zero. + + +File: standards.info, Node: System Functions, Next: Internationalization, Prev: CPU Portability, Up: Writing C + +5.7 Calling System Functions +============================ + +C implementations differ substantially. Standard C reduces but does +not eliminate the incompatibilities; meanwhile, many GNU packages still +support pre-standard compilers because this is not hard to do. This +chapter gives recommendations for how to use the more-or-less standard C +library functions to avoid unnecessary loss of portability. + + * Don't use the return value of `sprintf'. It returns the number of + characters written on some systems, but not on all systems. + + * Be aware that `vfprintf' is not always available. + + * `main' should be declared to return type `int'. It should + terminate either by calling `exit' or by returning the integer + status code; make sure it cannot ever return an undefined value. + + * Don't declare system functions explicitly. + + Almost any declaration for a system function is wrong on some + system. To minimize conflicts, leave it to the system header + files to declare system functions. If the headers don't declare a + function, let it remain undeclared. + + While it may seem unclean to use a function without declaring it, + in practice this works fine for most system library functions on + the systems where this really happens; thus, the disadvantage is + only theoretical. By contrast, actual declarations have + frequently caused actual conflicts. + + * If you must declare a system function, don't specify the argument + types. Use an old-style declaration, not a Standard C prototype. + The more you specify about the function, the more likely a + conflict. + + * In particular, don't unconditionally declare `malloc' or `realloc'. + + Most GNU programs use those functions just once, in functions + conventionally named `xmalloc' and `xrealloc'. These functions + call `malloc' and `realloc', respectively, and check the results. + + Because `xmalloc' and `xrealloc' are defined in your program, you + can declare them in other files without any risk of type conflict. + + On most systems, `int' is the same length as a pointer; thus, the + calls to `malloc' and `realloc' work fine. For the few + exceptional systems (mostly 64-bit machines), you can use + *conditionalized* declarations of `malloc' and `realloc'--or put + these declarations in configuration files specific to those + systems. + + * The string functions require special treatment. Some Unix systems + have a header file `string.h'; others have `strings.h'. Neither + file name is portable. There are two things you can do: use + Autoconf to figure out which file to include, or don't include + either file. + + * If you don't include either strings file, you can't get + declarations for the string functions from the header file in the + usual way. + + That causes less of a problem than you might think. The newer + standard string functions should be avoided anyway because many + systems still don't support them. The string functions you can + use are these: + + strcpy strncpy strcat strncat + strlen strcmp strncmp + strchr strrchr + + The copy and concatenate functions work fine without a declaration + as long as you don't use their values. Using their values without + a declaration fails on systems where the width of a pointer + differs from the width of `int', and perhaps in other cases. It + is trivial to avoid using their values, so do that. + + The compare functions and `strlen' work fine without a declaration + on most systems, possibly all the ones that GNU software runs on. + You may find it necessary to declare them *conditionally* on a few + systems. + + The search functions must be declared to return `char *'. Luckily, + there is no variation in the data type they return. But there is + variation in their names. Some systems give these functions the + names `index' and `rindex'; other systems use the names `strchr' + and `strrchr'. Some systems support both pairs of names, but + neither pair works on all systems. + + You should pick a single pair of names and use it throughout your + program. (Nowadays, it is better to choose `strchr' and `strrchr' + for new programs, since those are the standard names.) Declare + both of those names as functions returning `char *'. On systems + which don't support those names, define them as macros in terms of + the other pair. For example, here is what to put at the beginning + of your file (or in a header) if you want to use the names + `strchr' and `strrchr' throughout: + + #ifndef HAVE_STRCHR + #define strchr index + #endif + #ifndef HAVE_STRRCHR + #define strrchr rindex + #endif + + char *strchr (); + char *strrchr (); + + Here we assume that `HAVE_STRCHR' and `HAVE_STRRCHR' are macros +defined in systems where the corresponding functions exist. One way to +get them properly defined is to use Autoconf. + + +File: standards.info, Node: Internationalization, Next: Mmap, Prev: System Functions, Up: Writing C + +5.8 Internationalization +======================== + +GNU has a library called GNU gettext that makes it easy to translate the +messages in a program into various languages. You should use this +library in every program. Use English for the messages as they appear +in the program, and let gettext provide the way to translate them into +other languages. + + Using GNU gettext involves putting a call to the `gettext' macro +around each string that might need translation--like this: + + printf (gettext ("Processing file `%s'...")); + +This permits GNU gettext to replace the string `"Processing file +`%s'..."' with a translated version. + + Once a program uses gettext, please make a point of writing calls to +`gettext' when you add new strings that call for translation. + + Using GNU gettext in a package involves specifying a "text domain +name" for the package. The text domain name is used to separate the +translations for this package from the translations for other packages. +Normally, the text domain name should be the same as the name of the +package--for example, `fileutils' for the GNU file utilities. + + To enable gettext to work well, avoid writing code that makes +assumptions about the structure of words or sentences. When you want +the precise text of a sentence to vary depending on the data, use two or +more alternative string constants each containing a complete sentences, +rather than inserting conditionalized words or phrases into a single +sentence framework. + + Here is an example of what not to do: + + printf ("%d file%s processed", nfiles, + nfiles != 1 ? "s" : ""); + +The problem with that example is that it assumes that plurals are made +by adding `s'. If you apply gettext to the format string, like this, + + printf (gettext ("%d file%s processed"), nfiles, + nfiles != 1 ? "s" : ""); + +the message can use different words, but it will still be forced to use +`s' for the plural. Here is a better way: + + printf ((nfiles != 1 ? "%d files processed" + : "%d file processed"), + nfiles); + +This way, you can apply gettext to each of the two strings +independently: + + printf ((nfiles != 1 ? gettext ("%d files processed") + : gettext ("%d file processed")), + nfiles); + +This can be any method of forming the plural of the word for "file", and +also handles languages that require agreement in the word for +"processed". + + A similar problem appears at the level of sentence structure with +this code: + + printf ("# Implicit rule search has%s been done.\n", + f->tried_implicit ? "" : " not"); + +Adding `gettext' calls to this code cannot give correct results for all +languages, because negation in some languages requires adding words at +more than one place in the sentence. By contrast, adding `gettext' +calls does the job straightfowardly if the code starts out like this: + + printf (f->tried_implicit + ? "# Implicit rule search has been done.\n", + : "# Implicit rule search has not been done.\n"); + + +File: standards.info, Node: Mmap, Prev: Internationalization, Up: Writing C + +5.9 Mmap +======== + +Don't assume that `mmap' either works on all files or fails for all +files. It may work on some files and fail on others. + + The proper way to use `mmap' is to try it on the specific file for +which you want to use it--and if `mmap' doesn't work, fall back on +doing the job in another way using `read' and `write'. + + The reason this precaution is needed is that the GNU kernel (the +HURD) provides a user-extensible file system, in which there can be many +different kinds of "ordinary files." Many of them support `mmap', but +some do not. It is important to make programs handle all these kinds +of files. + + +File: standards.info, Node: Documentation, Next: Managing Releases, Prev: Writing C, Up: Top + +6 Documenting Programs +********************** + +A GNU program should ideally come with full free documentation, adequate +for both reference and tutorial purposes. If the package can be +programmed or extended, the documentation should cover programming or +extending it, as well as just using it. + +* Menu: + +* GNU Manuals:: Writing proper manuals. +* Doc Strings and Manuals:: Compiling doc strings doesn't make a manual. +* Manual Structure Details:: Specific structure conventions. +* License for Manuals:: Writing the distribution terms for a manual. +* Manual Credits:: Giving credit to documentation contributors. +* Printed Manuals:: Mentioning the printed manual. +* NEWS File:: NEWS files supplement manuals. +* Change Logs:: Recording Changes +* Man Pages:: Man pages are secondary. +* Reading other Manuals:: How far you can go in learning + from other manuals. + + +File: standards.info, Node: GNU Manuals, Next: Doc Strings and Manuals, Up: Documentation + +6.1 GNU Manuals +=============== + +The preferred document format for the GNU system is the Texinfo +formatting language. Every GNU package should (ideally) have +documentation in Texinfo both for reference and for learners. Texinfo +makes it possible to produce a good quality formatted book, using TeX, +and to generate an Info file. It is also possible to generate HTML +output from Texinfo source. See the Texinfo manual, either the +hardcopy, or the on-line version available through `info' or the Emacs +Info subsystem (`C-h i'). + + Nowadays some other formats such as Docbook and Sgmltexi can be +converted automatically into Texinfo. It is ok to produce the Texinfo +documentation by conversion this way, as long as it gives good results. + + Programmers often find it most natural to structure the documentation +following the structure of the implementation, which they know. But +this structure is not necessarily good for explaining how to use the +program; it may be irrelevant and confusing for a user. + + At every level, from the sentences in a paragraph to the grouping of +topics into separate manuals, the right way to structure documentation +is according to the concepts and questions that a user will have in mind +when reading it. Sometimes this structure of ideas matches the +structure of the implementation of the software being documented--but +often they are different. Often the most important part of learning to +write good documentation is learning to notice when you are structuring +the documentation like the implementation, and think about better +alternatives. + + For example, each program in the GNU system probably ought to be +documented in one manual; but this does not mean each program should +have its own manual. That would be following the structure of the +implementation, rather than the structure that helps the user +understand. + + Instead, each manual should cover a coherent _topic_. For example, +instead of a manual for `diff' and a manual for `diff3', we have one +manual for "comparison of files" which covers both of those programs, +as well as `cmp'. By documenting these programs together, we can make +the whole subject clearer. + + The manual which discusses a program should certainly document all of +the program's command-line options and all of its commands. It should +give examples of their use. But don't organize the manual as a list of +features. Instead, organize it logically, by subtopics. Address the +questions that a user will ask when thinking about the job that the +program does. + + In general, a GNU manual should serve both as tutorial and reference. +It should be set up for convenient access to each topic through Info, +and for reading straight through (appendixes aside). A GNU manual +should give a good introduction to a beginner reading through from the +start, and should also provide all the details that hackers want. The +Bison manual is a good example of this--please take a look at it to see +what we mean. + + That is not as hard as it first sounds. Arrange each chapter as a +logical breakdown of its topic, but order the sections, and write their +text, so that reading the chapter straight through makes sense. Do +likewise when structuring the book into chapters, and when structuring a +section into paragraphs. The watchword is, _at each point, address the +most fundamental and important issue raised by the preceding text._ + + If necessary, add extra chapters at the beginning of the manual which +are purely tutorial and cover the basics of the subject. These provide +the framework for a beginner to understand the rest of the manual. The +Bison manual provides a good example of how to do this. + + To serve as a reference, a manual should have an Index that list all +the functions, variables, options, and important concepts that are part +of the program. One combined Index should do for a short manual, but +sometimes for a complex package it is better to use multiple indices. +The Texinfo manual includes advice on preparing good index entries, see +*Note Making Index Entries: (texinfo)Index Entries, and see *Note +Defining the Entries of an Index: (texinfo)Indexing Commands. + + Don't use Unix man pages as a model for how to write GNU +documentation; most of them are terse, badly structured, and give +inadequate explanation of the underlying concepts. (There are, of +course, some exceptions.) Also, Unix man pages use a particular format +which is different from what we use in GNU manuals. + + Please include an email address in the manual for where to report +bugs _in the manual_. + + Please do not use the term "pathname" that is used in Unix +documentation; use "file name" (two words) instead. We use the term +"path" only for search paths, which are lists of directory names. + + Please do not use the term "illegal" to refer to erroneous input to a +computer program. Please use "invalid" for this, and reserve the term +"illegal" for activities punishable by law. + + +File: standards.info, Node: Doc Strings and Manuals, Next: Manual Structure Details, Prev: GNU Manuals, Up: Documentation + +6.2 Doc Strings and Manuals +=========================== + +Some programming systems, such as Emacs, provide a documentation string +for each function, command or variable. You may be tempted to write a +reference manual by compiling the documentation strings and writing a +little additional text to go around them--but you must not do it. That +approach is a fundamental mistake. The text of well-written +documentation strings will be entirely wrong for a manual. + + A documentation string needs to stand alone--when it appears on the +screen, there will be no other text to introduce or explain it. +Meanwhile, it can be rather informal in style. + + The text describing a function or variable in a manual must not stand +alone; it appears in the context of a section or subsection. Other text +at the beginning of the section should explain some of the concepts, and +should often make some general points that apply to several functions or +variables. The previous descriptions of functions and variables in the +section will also have given information about the topic. A description +written to stand alone would repeat some of that information; this +redundance looks bad. Meanwhile, the informality that is acceptable in +a documentation string is totally unacceptable in a manual. + + The only good way to use documentation strings in writing a good +manual is to use them as a source of information for writing good text. + + +File: standards.info, Node: Manual Structure Details, Next: License for Manuals, Prev: Doc Strings and Manuals, Up: Documentation + +6.3 Manual Structure Details +============================ + +The title page of the manual should state the version of the programs or +packages documented in the manual. The Top node of the manual should +also contain this information. If the manual is changing more +frequently than or independent of the program, also state a version +number for the manual in both of these places. + + Each program documented in the manual should have a node named +`PROGRAM Invocation' or `Invoking PROGRAM'. This node (together with +its subnodes, if any) should describe the program's command line +arguments and how to run it (the sort of information people would look +in a man page for). Start with an `@example' containing a template for +all the options and arguments that the program uses. + + Alternatively, put a menu item in some menu whose item name fits one +of the above patterns. This identifies the node which that item points +to as the node for this purpose, regardless of the node's actual name. + + The `--usage' feature of the Info reader looks for such a node or +menu item in order to find the relevant text, so it is essential for +every Texinfo file to have one. + + If one manual describes several programs, it should have such a node +for each program described in the manual. + + +File: standards.info, Node: License for Manuals, Next: Manual Credits, Prev: Manual Structure Details, Up: Documentation + +6.4 License for Manuals +======================= + +Please use the GNU Free Documentation License for all GNU manuals that +are more than a few pages long. Likewise for a collection of short +documents--you only need one copy of the GNU FDL for the whole +collection. For a single short document, you can use a very permissive +non-copyleft license, to avoid taking up space with a long license. + + See `http://www.gnu.org/copyleft/fdl-howto.html' for more explanation +of how to employ the GFDL. + + Note that it is not obligatory to include a copy of the GNU GPL or +GNU LGPL in a manual whose license is neither the GPL nor the LGPL. It +can be a good idea to include the program's license in a large manual; +in a short manual, whose size would be increased considerably by +including the program's license, it is probably better not to include +it. + + +File: standards.info, Node: Manual Credits, Next: Printed Manuals, Prev: License for Manuals, Up: Documentation + +6.5 Manual Credits +================== + +Please credit the principal human writers of the manual as the authors, +on the title page of the manual. If a company sponsored the work, thank +the company in a suitable place in the manual, but do not cite the +company as an author. + + +File: standards.info, Node: Printed Manuals, Next: NEWS File, Prev: Manual Credits, Up: Documentation + +6.6 Printed Manuals +=================== + +The FSF publishes some GNU manuals in printed form. To encourage sales +of these manuals, the on-line versions of the manual should mention at +the very start that the printed manual is available and should point at +information for getting it--for instance, with a link to the page +`http://www.gnu.org/order/order.html'. This should not be included in +the printed manual, though, because there it is redundant. + + It is also useful to explain in the on-line forms of the manual how +the user can print out the manual from the sources. + + +File: standards.info, Node: NEWS File, Next: Change Logs, Prev: Printed Manuals, Up: Documentation + +6.7 The NEWS File +================= + +In addition to its manual, the package should have a file named `NEWS' +which contains a list of user-visible changes worth mentioning. In +each new release, add items to the front of the file and identify the +version they pertain to. Don't discard old items; leave them in the +file after the newer items. This way, a user upgrading from any +previous version can see what is new. + + If the `NEWS' file gets very long, move some of the older items into +a file named `ONEWS' and put a note at the end referring the user to +that file. + + +File: standards.info, Node: Change Logs, Next: Man Pages, Prev: NEWS File, Up: Documentation + +6.8 Change Logs +=============== + +Keep a change log to describe all the changes made to program source +files. The purpose of this is so that people investigating bugs in the +future will know about the changes that might have introduced the bug. +Often a new bug can be found by looking at what was recently changed. +More importantly, change logs can help you eliminate conceptual +inconsistencies between different parts of a program, by giving you a +history of how the conflicting concepts arose and who they came from. + +* Menu: + +* Change Log Concepts:: +* Style of Change Logs:: +* Simple Changes:: +* Conditional Changes:: +* Indicating the Part Changed:: + + +File: standards.info, Node: Change Log Concepts, Next: Style of Change Logs, Up: Change Logs + +6.8.1 Change Log Concepts +------------------------- + +You can think of the change log as a conceptual "undo list" which +explains how earlier versions were different from the current version. +People can see the current version; they don't need the change log to +tell them what is in it. What they want from a change log is a clear +explanation of how the earlier version differed. + + The change log file is normally called `ChangeLog' and covers an +entire directory. Each directory can have its own change log, or a +directory can use the change log of its parent directory-it's up to you. + + Another alternative is to record change log information with a +version control system such as RCS or CVS. This can be converted +automatically to a `ChangeLog' file using `rcs2log'; in Emacs, the +command `C-x v a' (`vc-update-change-log') does the job. + + There's no need to describe the full purpose of the changes or how +they work together. If you think that a change calls for explanation, +you're probably right. Please do explain it--but please put the +explanation in comments in the code, where people will see it whenever +they see the code. For example, "New function" is enough for the +change log when you add a function, because there should be a comment +before the function definition to explain what it does. + + However, sometimes it is useful to write one line to describe the +overall purpose of a batch of changes. + + The easiest way to add an entry to `ChangeLog' is with the Emacs +command `M-x add-change-log-entry'. An entry should have an asterisk, +the name of the changed file, and then in parentheses the name of the +changed functions, variables or whatever, followed by a colon. Then +describe the changes you made to that function or variable. + + +File: standards.info, Node: Style of Change Logs, Next: Simple Changes, Prev: Change Log Concepts, Up: Change Logs + +6.8.2 Style of Change Logs +-------------------------- + +Here are some simple examples of change log entries, starting with the +header line that says who made the change and when, followed by +descriptions of specific changes. (These examples are drawn from Emacs +and GCC.) + + 1998-08-17 Richard Stallman + + * register.el (insert-register): Return nil. + (jump-to-register): Likewise. + + * sort.el (sort-subr): Return nil. + + * tex-mode.el (tex-bibtex-file, tex-file, tex-region): + Restart the tex shell if process is gone or stopped. + (tex-shell-running): New function. + + * expr.c (store_one_arg): Round size up for move_block_to_reg. + (expand_call): Round up when emitting USE insns. + * stmt.c (assign_parms): Round size up for move_block_from_reg. + + It's important to name the changed function or variable in full. +Don't abbreviate function or variable names, and don't combine them. +Subsequent maintainers will often search for a function name to find all +the change log entries that pertain to it; if you abbreviate the name, +they won't find it when they search. + + For example, some people are tempted to abbreviate groups of function +names by writing `* register.el ({insert,jump-to}-register)'; this is +not a good idea, since searching for `jump-to-register' or +`insert-register' would not find that entry. + + Separate unrelated change log entries with blank lines. When two +entries represent parts of the same change, so that they work together, +then don't put blank lines between them. Then you can omit the file +name and the asterisk when successive entries are in the same file. + + Break long lists of function names by closing continued lines with +`)', rather than `,', and opening the continuation with `(' as in this +example: + + * keyboard.c (menu_bar_items, tool_bar_items) + (Fexecute_extended_command): Deal with `keymap' property. + + +File: standards.info, Node: Simple Changes, Next: Conditional Changes, Prev: Style of Change Logs, Up: Change Logs + +6.8.3 Simple Changes +-------------------- + +Certain simple kinds of changes don't need much detail in the change +log. + + When you change the calling sequence of a function in a simple +fashion, and you change all the callers of the function to use the new +calling sequence, there is no need to make individual entries for all +the callers that you changed. Just write in the entry for the function +being called, "All callers changed"--like this: + + * keyboard.c (Fcommand_execute): New arg SPECIAL. + All callers changed. + + When you change just comments or doc strings, it is enough to write +an entry for the file, without mentioning the functions. Just "Doc +fixes" is enough for the change log. + + There's no need to make change log entries for documentation files. +This is because documentation is not susceptible to bugs that are hard +to fix. Documentation does not consist of parts that must interact in a +precisely engineered fashion. To correct an error, you need not know +the history of the erroneous passage; it is enough to compare what the +documentation says with the way the program actually works. + + +File: standards.info, Node: Conditional Changes, Next: Indicating the Part Changed, Prev: Simple Changes, Up: Change Logs + +6.8.4 Conditional Changes +------------------------- + +C programs often contain compile-time `#if' conditionals. Many changes +are conditional; sometimes you add a new definition which is entirely +contained in a conditional. It is very useful to indicate in the +change log the conditions for which the change applies. + + Our convention for indicating conditional changes is to use square +brackets around the name of the condition. + + Here is a simple example, describing a change which is conditional +but does not have a function or entity name associated with it: + + * xterm.c [SOLARIS2]: Include string.h. + + Here is an entry describing a new definition which is entirely +conditional. This new definition for the macro `FRAME_WINDOW_P' is +used only when `HAVE_X_WINDOWS' is defined: + + * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined. + + Here is an entry for a change within the function `init_display', +whose definition as a whole is unconditional, but the changes themselves +are contained in a `#ifdef HAVE_LIBNCURSES' conditional: + + * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent. + + Here is an entry for a change that takes affect only when a certain +macro is _not_ defined: + + (gethostname) [!HAVE_SOCKETS]: Replace with winsock version. + + +File: standards.info, Node: Indicating the Part Changed, Prev: Conditional Changes, Up: Change Logs + +6.8.5 Indicating the Part Changed +--------------------------------- + +Indicate the part of a function which changed by using angle brackets +enclosing an indication of what the changed part does. Here is an entry +for a change in the part of the function `sh-while-getopts' that deals +with `sh' commands: + + * progmodes/sh-script.el (sh-while-getopts) : Handle case that + user-specified option string is empty. + + +File: standards.info, Node: Man Pages, Next: Reading other Manuals, Prev: Change Logs, Up: Documentation + +6.9 Man Pages +============= + +In the GNU project, man pages are secondary. It is not necessary or +expected for every GNU program to have a man page, but some of them do. +It's your choice whether to include a man page in your program. + + When you make this decision, consider that supporting a man page +requires continual effort each time the program is changed. The time +you spend on the man page is time taken away from more useful work. + + For a simple program which changes little, updating the man page may +be a small job. Then there is little reason not to include a man page, +if you have one. + + For a large program that changes a great deal, updating a man page +may be a substantial burden. If a user offers to donate a man page, +you may find this gift costly to accept. It may be better to refuse +the man page unless the same person agrees to take full responsibility +for maintaining it--so that you can wash your hands of it entirely. If +this volunteer later ceases to do the job, then don't feel obliged to +pick it up yourself; it may be better to withdraw the man page from the +distribution until someone else agrees to update it. + + When a program changes only a little, you may feel that the +discrepancies are small enough that the man page remains useful without +updating. If so, put a prominent note near the beginning of the man +page explaining that you don't maintain it and that the Texinfo manual +is more authoritative. The note should say how to access the Texinfo +documentation. + + +File: standards.info, Node: Reading other Manuals, Prev: Man Pages, Up: Documentation + +6.10 Reading other Manuals +========================== + +There may be non-free books or documentation files that describe the +program you are documenting. + + It is ok to use these documents for reference, just as the author of +a new algebra textbook can read other books on algebra. A large portion +of any non-fiction book consists of facts, in this case facts about how +a certain program works, and these facts are necessarily the same for +everyone who writes about the subject. But be careful not to copy your +outline structure, wording, tables or examples from preexisting non-free +documentation. Copying from free documentation may be ok; please check +with the FSF about the individual case. + + +File: standards.info, Node: Managing Releases, Next: References, Prev: Documentation, Up: Top + +7 The Release Process +********************* + +Making a release is more than just bundling up your source files in a +tar file and putting it up for FTP. You should set up your software so +that it can be configured to run on a variety of systems. Your Makefile +should conform to the GNU standards described below, and your directory +layout should also conform to the standards discussed below. Doing so +makes it easy to include your package into the larger framework of all +GNU software. + +* Menu: + +* Configuration:: How Configuration Should Work +* Makefile Conventions:: Makefile Conventions +* Releases:: Making Releases + + +File: standards.info, Node: Configuration, Next: Makefile Conventions, Up: Managing Releases + +7.1 How Configuration Should Work +================================= + +Each GNU distribution should come with a shell script named +`configure'. This script is given arguments which describe the kind of +machine and system you want to compile the program for. + + The `configure' script must record the configuration options so that +they affect compilation. + + One way to do this is to make a link from a standard name such as +`config.h' to the proper configuration file for the chosen system. If +you use this technique, the distribution should _not_ contain a file +named `config.h'. This is so that people won't be able to build the +program without configuring it first. + + Another thing that `configure' can do is to edit the Makefile. If +you do this, the distribution should _not_ contain a file named +`Makefile'. Instead, it should include a file `Makefile.in' which +contains the input used for editing. Once again, this is so that people +won't be able to build the program without configuring it first. + + If `configure' does write the `Makefile', then `Makefile' should +have a target named `Makefile' which causes `configure' to be rerun, +setting up the same configuration that was set up last time. The files +that `configure' reads should be listed as dependencies of `Makefile'. + + All the files which are output from the `configure' script should +have comments at the beginning explaining that they were generated +automatically using `configure'. This is so that users won't think of +trying to edit them by hand. + + The `configure' script should write a file named `config.status' +which describes which configuration options were specified when the +program was last configured. This file should be a shell script which, +if run, will recreate the same configuration. + + The `configure' script should accept an option of the form +`--srcdir=DIRNAME' to specify the directory where sources are found (if +it is not the current directory). This makes it possible to build the +program in a separate directory, so that the actual source directory is +not modified. + + If the user does not specify `--srcdir', then `configure' should +check both `.' and `..' to see if it can find the sources. If it finds +the sources in one of these places, it should use them from there. +Otherwise, it should report that it cannot find the sources, and should +exit with nonzero status. + + Usually the easy way to support `--srcdir' is by editing a +definition of `VPATH' into the Makefile. Some rules may need to refer +explicitly to the specified source directory. To make this possible, +`configure' can add to the Makefile a variable named `srcdir' whose +value is precisely the specified directory. + + The `configure' script should also take an argument which specifies +the type of system to build the program for. This argument should look +like this: + + CPU-COMPANY-SYSTEM + + For example, a Sun 3 might be `m68k-sun-sunos4.1'. + + The `configure' script needs to be able to decode all plausible +alternatives for how to describe a machine. Thus, `sun3-sunos4.1' +would be a valid alias. For many programs, `vax-dec-ultrix' would be +an alias for `vax-dec-bsd', simply because the differences between +Ultrix and BSD are rarely noticeable, but a few programs might need to +distinguish them. + + There is a shell script called `config.sub' that you can use as a +subroutine to validate system types and canonicalize aliases. + + Other options are permitted to specify in more detail the software +or hardware present on the machine, and include or exclude optional +parts of the package: + +`--enable-FEATURE[=PARAMETER]' + Configure the package to build and install an optional user-level + facility called FEATURE. This allows users to choose which + optional features to include. Giving an optional PARAMETER of + `no' should omit FEATURE, if it is built by default. + + No `--enable' option should *ever* cause one feature to replace + another. No `--enable' option should ever substitute one useful + behavior for another useful behavior. The only proper use for + `--enable' is for questions of whether to build part of the program + or exclude it. + +`--with-PACKAGE' + The package PACKAGE will be installed, so configure this package + to work with PACKAGE. + + Possible values of PACKAGE include `gnu-as' (or `gas'), `gnu-ld', + `gnu-libc', `gdb', `x', and `x-toolkit'. + + Do not use a `--with' option to specify the file name to use to + find certain files. That is outside the scope of what `--with' + options are for. + + All `configure' scripts should accept all of these "detail" options, +whether or not they make any difference to the particular package at +hand. In particular, they should accept any option that starts with +`--with-' or `--enable-'. This is so users will be able to configure +an entire GNU source tree at once with a single set of options. + + You will note that the categories `--with-' and `--enable-' are +narrow: they *do not* provide a place for any sort of option you might +think of. That is deliberate. We want to limit the possible +configuration options in GNU software. We do not want GNU programs to +have idiosyncratic configuration options. + + Packages that perform part of the compilation process may support +cross-compilation. In such a case, the host and target machines for the +program may be different. + + The `configure' script should normally treat the specified type of +system as both the host and the target, thus producing a program which +works for the same type of machine that it runs on. + + To configure a cross-compiler, cross-assembler, or what have you, you +should specify a target different from the host, using the configure +option `--target=TARGETTYPE'. The syntax for TARGETTYPE is the same as +for the host type. So the command would look like this: + + ./configure HOSTTYPE --target=TARGETTYPE + + Programs for which cross-operation is not meaningful need not accept +the `--target' option, because configuring an entire operating system +for cross-operation is not a meaningful operation. + + Bootstrapping a cross-compiler requires compiling it on a machine +other than the host it will run on. Compilation packages accept a +configuration option `--build=BUILDTYPE' for specifying the +configuration on which you will compile them, but the configure script +should normally guess the build machine type (using `config.guess'), so +this option is probably not necessary. The host and target types +normally default from the build type, so in bootstrapping a +cross-compiler you must specify them both explicitly. + + Some programs have ways of configuring themselves automatically. If +your program is set up to do this, your `configure' script can simply +ignore most of its arguments. + + +File: standards.info, Node: Makefile Conventions, Next: Releases, Prev: Configuration, Up: Managing Releases + +7.2 Makefile Conventions +======================== + +This node describes conventions for writing the Makefiles for GNU +programs. Using Automake will help you write a Makefile that follows +these conventions. + +* Menu: + +* Makefile Basics:: General Conventions for Makefiles +* Utilities in Makefiles:: Utilities in Makefiles +* Command Variables:: Variables for Specifying Commands +* Directory Variables:: Variables for Installation Directories +* Standard Targets:: Standard Targets for Users +* Install Command Categories:: Three categories of commands in the `install' + rule: normal, pre-install and post-install. + + +File: standards.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions + +7.2.1 General Conventions for Makefiles +--------------------------------------- + +Every Makefile should contain this line: + + SHELL = /bin/sh + +to avoid trouble on systems where the `SHELL' variable might be +inherited from the environment. (This is never a problem with GNU +`make'.) + + Different `make' programs have incompatible suffix lists and +implicit rules, and this sometimes creates confusion or misbehavior. So +it is a good idea to set the suffix list explicitly using only the +suffixes you need in the particular Makefile, like this: + + .SUFFIXES: + .SUFFIXES: .c .o + +The first line clears out the suffix list, the second introduces all +suffixes which may be subject to implicit rules in this Makefile. + + Don't assume that `.' is in the path for command execution. When +you need to run programs that are a part of your package during the +make, please make sure that it uses `./' if the program is built as +part of the make or `$(srcdir)/' if the file is an unchanging part of +the source code. Without one of these prefixes, the current search +path is used. + + The distinction between `./' (the "build directory") and +`$(srcdir)/' (the "source directory") is important because users can +build in a separate directory using the `--srcdir' option to +`configure'. A rule of the form: + + foo.1 : foo.man sedscript + sed -e sedscript foo.man > foo.1 + +will fail when the build directory is not the source directory, because +`foo.man' and `sedscript' are in the source directory. + + When using GNU `make', relying on `VPATH' to find the source file +will work in the case where there is a single dependency file, since +the `make' automatic variable `$<' will represent the source file +wherever it is. (Many versions of `make' set `$<' only in implicit +rules.) A Makefile target like + + foo.o : bar.c + $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o + +should instead be written as + + foo.o : bar.c + $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@ + +in order to allow `VPATH' to work correctly. When the target has +multiple dependencies, using an explicit `$(srcdir)' is the easiest way +to make the rule work well. For example, the target above for `foo.1' +is best written as: + + foo.1 : foo.man sedscript + sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@ + + GNU distributions usually contain some files which are not source +files--for example, Info files, and the output from Autoconf, Automake, +Bison or Flex. Since these files normally appear in the source +directory, they should always appear in the source directory, not in the +build directory. So Makefile rules to update them should put the +updated files in the source directory. + + However, if a file does not appear in the distribution, then the +Makefile should not put it in the source directory, because building a +program in ordinary circumstances should not modify the source directory +in any way. + + Try to make the build and installation targets, at least (and all +their subtargets) work correctly with a parallel `make'. + + +File: standards.info, Node: Utilities in Makefiles, Next: Command Variables, Prev: Makefile Basics, Up: Makefile Conventions + +7.2.2 Utilities in Makefiles +---------------------------- + +Write the Makefile commands (and any shell scripts, such as +`configure') to run in `sh', not in `csh'. Don't use any special +features of `ksh' or `bash'. + + The `configure' script and the Makefile rules for building and +installation should not use any utilities directly except these: + + cat cmp cp diff echo egrep expr false grep install-info + ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true + + The compression program `gzip' can be used in the `dist' rule. + + Stick to the generally supported options for these programs. For +example, don't use `mkdir -p', convenient as it may be, because most +systems don't support it. + + It is a good idea to avoid creating symbolic links in makefiles, +since a few systems don't support them. + + The Makefile rules for building and installation can also use +compilers and related programs, but should do so via `make' variables +so that the user can substitute alternatives. Here are some of the +programs we mean: + + ar bison cc flex install ld ldconfig lex + make makeinfo ranlib texi2dvi yacc + + Use the following `make' variables to run those programs: + + $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) + $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) + + When you use `ranlib' or `ldconfig', you should make sure nothing +bad happens if the system does not have the program in question. +Arrange to ignore an error from that command, and print a message before +the command to tell the user that failure of this command does not mean +a problem. (The Autoconf `AC_PROG_RANLIB' macro can help with this.) + + If you use symbolic links, you should implement a fallback for +systems that don't have symbolic links. + + Additional utilities that can be used via Make variables are: + + chgrp chmod chown mknod + + It is ok to use other utilities in Makefile portions (or scripts) +intended only for particular systems where you know those utilities +exist. + + +File: standards.info, Node: Command Variables, Next: Directory Variables, Prev: Utilities in Makefiles, Up: Makefile Conventions + +7.2.3 Variables for Specifying Commands +--------------------------------------- + +Makefiles should provide variables for overriding certain commands, +options, and so on. + + In particular, you should run most utility programs via variables. +Thus, if you use Bison, have a variable named `BISON' whose default +value is set with `BISON = bison', and refer to it with `$(BISON)' +whenever you need to use Bison. + + File management utilities such as `ln', `rm', `mv', and so on, need +not be referred to through variables in this way, since users don't +need to replace them with other programs. + + Each program-name variable should come with an options variable that +is used to supply options to the program. Append `FLAGS' to the +program-name variable name to get the options variable name--for +example, `BISONFLAGS'. (The names `CFLAGS' for the C compiler, +`YFLAGS' for yacc, and `LFLAGS' for lex, are exceptions to this rule, +but we keep them because they are standard.) Use `CPPFLAGS' in any +compilation command that runs the preprocessor, and use `LDFLAGS' in +any compilation command that does linking as well as in any direct use +of `ld'. + + If there are C compiler options that _must_ be used for proper +compilation of certain files, do not include them in `CFLAGS'. Users +expect to be able to specify `CFLAGS' freely themselves. Instead, +arrange to pass the necessary options to the C compiler independently +of `CFLAGS', by writing them explicitly in the compilation commands or +by defining an implicit rule, like this: + + CFLAGS = -g + ALL_CFLAGS = -I. $(CFLAGS) + .c.o: + $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< + + Do include the `-g' option in `CFLAGS', because that is not +_required_ for proper compilation. You can consider it a default that +is only recommended. If the package is set up so that it is compiled +with GCC by default, then you might as well include `-O' in the default +value of `CFLAGS' as well. + + Put `CFLAGS' last in the compilation command, after other variables +containing compiler options, so the user can use `CFLAGS' to override +the others. + + `CFLAGS' should be used in every invocation of the C compiler, both +those which do compilation and those which do linking. + + Every Makefile should define the variable `INSTALL', which is the +basic command for installing a file into the system. + + Every Makefile should also define the variables `INSTALL_PROGRAM' +and `INSTALL_DATA'. (The default for `INSTALL_PROGRAM' should be +`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m +644'.) Then it should use those variables as the commands for actual +installation, for executables and nonexecutables respectively. Use +these variables as follows: + + $(INSTALL_PROGRAM) foo $(bindir)/foo + $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a + + Optionally, you may prepend the value of `DESTDIR' to the target +filename. Doing this allows the installer to create a snapshot of the +installation to be copied onto the real target filesystem later. Do not +set the value of `DESTDIR' in your Makefile, and do not include it in +any installed files. With support for `DESTDIR', the above examples +become: + + $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo + $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a + +Always use a file name, not a directory name, as the second argument of +the installation commands. Use a separate command for each file to be +installed. + + +File: standards.info, Node: Directory Variables, Next: Standard Targets, Prev: Command Variables, Up: Makefile Conventions + +7.2.4 Variables for Installation Directories +-------------------------------------------- + +Installation directories should always be named by variables, so it is +easy to install in a nonstandard place. The standard names for these +variables are described below. They are based on a standard filesystem +layout; variants of it are used in SVR4, 4.4BSD, GNU/Linux, Ultrix v4, +and other modern operating systems. + + These two variables set the root for the installation. All the other +installation directories should be subdirectories of one of these two, +and nothing should be directly installed into these two directories. + +`prefix' + A prefix used in constructing the default values of the variables + listed below. The default value of `prefix' should be + `/usr/local'. When building the complete GNU system, the prefix + will be empty and `/usr' will be a symbolic link to `/'. (If you + are using Autoconf, write it as `@prefix@'.) + + Running `make install' with a different value of `prefix' from the + one used to build the program should _not_ recompile the program. + +`exec_prefix' + A prefix used in constructing the default values of some of the + variables listed below. The default value of `exec_prefix' should + be `$(prefix)'. (If you are using Autoconf, write it as + `@exec_prefix@'.) + + Generally, `$(exec_prefix)' is used for directories that contain + machine-specific files (such as executables and subroutine + libraries), while `$(prefix)' is used directly for other + directories. + + Running `make install' with a different value of `exec_prefix' + from the one used to build the program should _not_ recompile the + program. + + Executable programs are installed in one of the following +directories. + +`bindir' + The directory for installing executable programs that users can + run. This should normally be `/usr/local/bin', but write it as + `$(exec_prefix)/bin'. (If you are using Autoconf, write it as + `@bindir@'.) + +`sbindir' + The directory for installing executable programs that can be run + from the shell, but are only generally useful to system + administrators. This should normally be `/usr/local/sbin', but + write it as `$(exec_prefix)/sbin'. (If you are using Autoconf, + write it as `@sbindir@'.) + +`libexecdir' + The directory for installing executable programs to be run by other + programs rather than by users. This directory should normally be + `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'. + (If you are using Autoconf, write it as `@libexecdir@'.) + + Data files used by the program during its execution are divided into +categories in two ways. + + * Some files are normally modified by programs; others are never + normally modified (though users may edit some of these). + + * Some files are architecture-independent and can be shared by all + machines at a site; some are architecture-dependent and can be + shared only by machines of the same kind and operating system; + others may never be shared between two machines. + + This makes for six different possibilities. However, we want to +discourage the use of architecture-dependent files, aside from object +files and libraries. It is much cleaner to make other data files +architecture-independent, and it is generally not hard. + + Therefore, here are the variables Makefiles should use to specify +directories: + +`datadir' + The directory for installing read-only architecture independent + data files. This should normally be `/usr/local/share', but write + it as `$(prefix)/share'. (If you are using Autoconf, write it as + `@datadir@'.) As a special exception, see `$(infodir)' and + `$(includedir)' below. + +`sysconfdir' + The directory for installing read-only data files that pertain to a + single machine-that is to say, files for configuring a host. + Mailer and network configuration files, `/etc/passwd', and so + forth belong here. All the files in this directory should be + ordinary ASCII text files. This directory should normally be + `/usr/local/etc', but write it as `$(prefix)/etc'. (If you are + using Autoconf, write it as `@sysconfdir@'.) + + Do not install executables here in this directory (they probably + belong in `$(libexecdir)' or `$(sbindir)'). Also do not install + files that are modified in the normal course of their use (programs + whose purpose is to change the configuration of the system + excluded). Those probably belong in `$(localstatedir)'. + +`sharedstatedir' + The directory for installing architecture-independent data files + which the programs modify while they run. This should normally be + `/usr/local/com', but write it as `$(prefix)/com'. (If you are + using Autoconf, write it as `@sharedstatedir@'.) + +`localstatedir' + The directory for installing data files which the programs modify + while they run, and that pertain to one specific machine. Users + should never need to modify files in this directory to configure + the package's operation; put such configuration information in + separate files that go in `$(datadir)' or `$(sysconfdir)'. + `$(localstatedir)' should normally be `/usr/local/var', but write + it as `$(prefix)/var'. (If you are using Autoconf, write it as + `@localstatedir@'.) + +`libdir' + The directory for object files and libraries of object code. Do + not install executables here, they probably ought to go in + `$(libexecdir)' instead. The value of `libdir' should normally be + `/usr/local/lib', but write it as `$(exec_prefix)/lib'. (If you + are using Autoconf, write it as `@libdir@'.) + +`infodir' + The directory for installing the Info files for this package. By + default, it should be `/usr/local/info', but it should be written + as `$(prefix)/info'. (If you are using Autoconf, write it as + `@infodir@'.) + +`lispdir' + The directory for installing any Emacs Lisp files in this package. + By default, it should be `/usr/local/share/emacs/site-lisp', but + it should be written as `$(prefix)/share/emacs/site-lisp'. + + If you are using Autoconf, write the default as `@lispdir@'. In + order to make `@lispdir@' work, you need the following lines in + your `configure.in' file: + + lispdir='${datadir}/emacs/site-lisp' + AC_SUBST(lispdir) + +`includedir' + The directory for installing header files to be included by user + programs with the C `#include' preprocessor directive. This + should normally be `/usr/local/include', but write it as + `$(prefix)/include'. (If you are using Autoconf, write it as + `@includedir@'.) + + Most compilers other than GCC do not look for header files in + directory `/usr/local/include'. So installing the header files + this way is only useful with GCC. Sometimes this is not a problem + because some libraries are only really intended to work with GCC. + But some libraries are intended to work with other compilers. + They should install their header files in two places, one + specified by `includedir' and one specified by `oldincludedir'. + +`oldincludedir' + The directory for installing `#include' header files for use with + compilers other than GCC. This should normally be `/usr/include'. + (If you are using Autoconf, you can write it as `@oldincludedir@'.) + + The Makefile commands should check whether the value of + `oldincludedir' is empty. If it is, they should not try to use + it; they should cancel the second installation of the header files. + + A package should not replace an existing header in this directory + unless the header came from the same package. Thus, if your Foo + package provides a header file `foo.h', then it should install the + header file in the `oldincludedir' directory if either (1) there + is no `foo.h' there or (2) the `foo.h' that exists came from the + Foo package. + + To tell whether `foo.h' came from the Foo package, put a magic + string in the file--part of a comment--and `grep' for that string. + + Unix-style man pages are installed in one of the following: + +`mandir' + The top-level directory for installing the man pages (if any) for + this package. It will normally be `/usr/local/man', but you should + write it as `$(prefix)/man'. (If you are using Autoconf, write it + as `@mandir@'.) + +`man1dir' + The directory for installing section 1 man pages. Write it as + `$(mandir)/man1'. + +`man2dir' + The directory for installing section 2 man pages. Write it as + `$(mandir)/man2' + +`...' + *Don't make the primary documentation for any GNU software be a + man page. Write a manual in Texinfo instead. Man pages are just + for the sake of people running GNU software on Unix, which is a + secondary application only.* + +`manext' + The file name extension for the installed man page. This should + contain a period followed by the appropriate digit; it should + normally be `.1'. + +`man1ext' + The file name extension for installed section 1 man pages. + +`man2ext' + The file name extension for installed section 2 man pages. + +`...' + Use these names instead of `manext' if the package needs to + install man pages in more than one section of the manual. + + And finally, you should set the following variable: + +`srcdir' + The directory for the sources being compiled. The value of this + variable is normally inserted by the `configure' shell script. + (If you are using Autconf, use `srcdir = @srcdir@'.) + + For example: + + # Common prefix for installation directories. + # NOTE: This directory must exist when you start the install. + prefix = /usr/local + exec_prefix = $(prefix) + # Where to put the executable for the command `gcc'. + bindir = $(exec_prefix)/bin + # Where to put the directories used by the compiler. + libexecdir = $(exec_prefix)/libexec + # Where to put the Info files. + infodir = $(prefix)/info + + If your program installs a large number of files into one of the +standard user-specified directories, it might be useful to group them +into a subdirectory particular to that program. If you do this, you +should write the `install' rule to create these subdirectories. + + Do not expect the user to include the subdirectory name in the value +of any of the variables listed above. The idea of having a uniform set +of variable names for installation directories is to enable the user to +specify the exact same values for several different GNU packages. In +order for this to be useful, all the packages must be designed so that +they will work sensibly when the user does so. + + +File: standards.info, Node: Standard Targets, Next: Install Command Categories, Prev: Directory Variables, Up: Makefile Conventions + +7.2.5 Standard Targets for Users +-------------------------------- + +All GNU programs should have the following targets in their Makefiles: + +`all' + Compile the entire program. This should be the default target. + This target need not rebuild any documentation files; Info files + should normally be included in the distribution, and DVI files + should be made only when explicitly asked for. + + By default, the Make rules should compile and link with `-g', so + that executable programs have debugging symbols. Users who don't + mind being helpless can strip the executables later if they wish. + +`install' + Compile the program and copy the executables, libraries, and so on + to the file names where they should reside for actual use. If + there is a simple test to verify that a program is properly + installed, this target should run that test. + + Do not strip executables when installing them. Devil-may-care + users can use the `install-strip' target to do that. + + If possible, write the `install' target rule so that it does not + modify anything in the directory where the program was built, + provided `make all' has just been done. This is convenient for + building the program under one user name and installing it under + another. + + The commands should create all the directories in which files are + to be installed, if they don't already exist. This includes the + directories specified as the values of the variables `prefix' and + `exec_prefix', as well as all subdirectories that are needed. One + way to do this is by means of an `installdirs' target as described + below. + + Use `-' before any command for installing a man page, so that + `make' will ignore any errors. This is in case there are systems + that don't have the Unix man page documentation system installed. + + The way to install Info files is to copy them into `$(infodir)' + with `$(INSTALL_DATA)' (*note Command Variables::), and then run + the `install-info' program if it is present. `install-info' is a + program that edits the Info `dir' file to add or update the menu + entry for the given Info file; it is part of the Texinfo package. + Here is a sample rule to install an Info file: + + $(DESTDIR)$(infodir)/foo.info: foo.info + $(POST_INSTALL) + # There may be a newer info file in . than in srcdir. + -if test -f foo.info; then d=.; \ + else d=$(srcdir); fi; \ + $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@; \ + # Run install-info only if it exists. + # Use `if' instead of just prepending `-' to the + # line so we notice real errors from install-info. + # We use `$(SHELL) -c' because some shells do not + # fail gracefully when there is an unknown command. + if $(SHELL) -c 'install-info --version' \ + >/dev/null 2>&1; then \ + install-info --dir-file=$(DESTDIR)$(infodir)/dir \ + $(DESTDIR)$(infodir)/foo.info; \ + else true; fi + + When writing the `install' target, you must classify all the + commands into three categories: normal ones, "pre-installation" + commands and "post-installation" commands. *Note Install Command + Categories::. + +`uninstall' + Delete all the installed files--the copies that the `install' + target creates. + + This rule should not modify the directories where compilation is + done, only the directories where files are installed. + + The uninstallation commands are divided into three categories, + just like the installation commands. *Note Install Command + Categories::. + +`install-strip' + Like `install', but strip the executable files while installing + them. In simple cases, this target can use the `install' target in + a simple way: + + install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ + install + + But if the package installs scripts as well as real executables, + the `install-strip' target can't just refer to the `install' + target; it has to strip the executables but not the scripts. + + `install-strip' should not strip the executables in the build + directory which are being copied for installation. It should only + strip the copies that are installed. + + Normally we do not recommend stripping an executable unless you + are sure the program has no bugs. However, it can be reasonable + to install a stripped executable for actual execution while saving + the unstripped executable elsewhere in case there is a bug. + +`clean' + Delete all files from the current directory that are normally + created by building the program. Don't delete the files that + record the configuration. Also preserve files that could be made + by building, but normally aren't because the distribution comes + with them. + + Delete `.dvi' files here if they are not part of the distribution. + +`distclean' + Delete all files from the current directory that are created by + configuring or building the program. If you have unpacked the + source and built the program without creating any other files, + `make distclean' should leave only the files that were in the + distribution. + +`mostlyclean' + Like `clean', but may refrain from deleting a few files that people + normally don't want to recompile. For example, the `mostlyclean' + target for GCC does not delete `libgcc.a', because recompiling it + is rarely necessary and takes a lot of time. + +`maintainer-clean' + Delete almost everything from the current directory that can be + reconstructed with this Makefile. This typically includes + everything deleted by `distclean', plus more: C source files + produced by Bison, tags tables, Info files, and so on. + + The reason we say "almost everything" is that running the command + `make maintainer-clean' should not delete `configure' even if + `configure' can be remade using a rule in the Makefile. More + generally, `make maintainer-clean' should not delete anything that + needs to exist in order to run `configure' and then begin to build + the program. This is the only exception; `maintainer-clean' should + delete everything else that can be rebuilt. + + The `maintainer-clean' target is intended to be used by a + maintainer of the package, not by ordinary users. You may need + special tools to reconstruct some of the files that `make + maintainer-clean' deletes. Since these files are normally + included in the distribution, we don't take care to make them easy + to reconstruct. If you find you need to unpack the full + distribution again, don't blame us. + + To help make users aware of this, the commands for the special + `maintainer-clean' target should start with these two: + + @echo 'This command is intended for maintainers to use; it' + @echo 'deletes files that may need special tools to rebuild.' + +`TAGS' + Update a tags table for this program. + +`info' + Generate any Info files needed. The best way to write the rules + is as follows: + + info: foo.info + + foo.info: foo.texi chap1.texi chap2.texi + $(MAKEINFO) $(srcdir)/foo.texi + + You must define the variable `MAKEINFO' in the Makefile. It should + run the `makeinfo' program, which is part of the Texinfo + distribution. + + Normally a GNU distribution comes with Info files, and that means + the Info files are present in the source directory. Therefore, + the Make rule for an info file should update it in the source + directory. When users build the package, ordinarily Make will not + update the Info files because they will already be up to date. + +`dvi' + Generate DVI files for all Texinfo documentation. For example: + + dvi: foo.dvi + + foo.dvi: foo.texi chap1.texi chap2.texi + $(TEXI2DVI) $(srcdir)/foo.texi + + You must define the variable `TEXI2DVI' in the Makefile. It should + run the program `texi2dvi', which is part of the Texinfo + distribution.(1) Alternatively, write just the dependencies, and + allow GNU `make' to provide the command. + +`dist' + Create a distribution tar file for this program. The tar file + should be set up so that the file names in the tar file start with + a subdirectory name which is the name of the package it is a + distribution for. This name can include the version number. + + For example, the distribution tar file of GCC version 1.40 unpacks + into a subdirectory named `gcc-1.40'. + + The easiest way to do this is to create a subdirectory + appropriately named, use `ln' or `cp' to install the proper files + in it, and then `tar' that subdirectory. + + Compress the tar file with `gzip'. For example, the actual + distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'. + + The `dist' target should explicitly depend on all non-source files + that are in the distribution, to make sure they are up to date in + the distribution. *Note Making Releases: Releases. + +`check' + Perform self-tests (if any). The user must build the program + before running the tests, but need not install the program; you + should write the self-tests so that they work when the program is + built but not installed. + + The following targets are suggested as conventional names, for +programs in which they are useful. + +`installcheck' + Perform installation tests (if any). The user must build and + install the program before running the tests. You should not + assume that `$(bindir)' is in the search path. + +`installdirs' + It's useful to add a target named `installdirs' to create the + directories where files are installed, and their parent + directories. There is a script called `mkinstalldirs' which is + convenient for this; you can find it in the Texinfo package. You + can use a rule like this: + + # Make sure all installation directories (e.g. $(bindir)) + # actually exist by making them if necessary. + installdirs: mkinstalldirs + $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ + $(libdir) $(infodir) \ + $(mandir) + + or, if you wish to support `DESTDIR', + + # Make sure all installation directories (e.g. $(bindir)) + # actually exist by making them if necessary. + installdirs: mkinstalldirs + $(srcdir)/mkinstalldirs \ + $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ + $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ + $(DESTDIR)$(mandir) + + This rule should not modify the directories where compilation is + done. It should do nothing but create installation directories. + + ---------- Footnotes ---------- + + (1) `texi2dvi' uses TeX to do the real work of formatting. TeX is +not distributed with Texinfo. + + +File: standards.info, Node: Install Command Categories, Prev: Standard Targets, Up: Makefile Conventions + +7.2.6 Install Command Categories +-------------------------------- + +When writing the `install' target, you must classify all the commands +into three categories: normal ones, "pre-installation" commands and +"post-installation" commands. + + Normal commands move files into their proper places, and set their +modes. They may not alter any files except the ones that come entirely +from the package they belong to. + + Pre-installation and post-installation commands may alter other +files; in particular, they can edit global configuration files or data +bases. + + Pre-installation commands are typically executed before the normal +commands, and post-installation commands are typically run after the +normal commands. + + The most common use for a post-installation command is to run +`install-info'. This cannot be done with a normal command, since it +alters a file (the Info directory) which does not come entirely and +solely from the package being installed. It is a post-installation +command because it needs to be done after the normal command which +installs the package's Info files. + + Most programs don't need any pre-installation commands, but we have +the feature just in case it is needed. + + To classify the commands in the `install' rule into these three +categories, insert "category lines" among them. A category line +specifies the category for the commands that follow. + + A category line consists of a tab and a reference to a special Make +variable, plus an optional comment at the end. There are three +variables you can use, one for each category; the variable name +specifies the category. Category lines are no-ops in ordinary execution +because these three Make variables are normally undefined (and you +_should not_ define them in the makefile). + + Here are the three possible category lines, each with a comment that +explains what it means: + + $(PRE_INSTALL) # Pre-install commands follow. + $(POST_INSTALL) # Post-install commands follow. + $(NORMAL_INSTALL) # Normal commands follow. + + If you don't use a category line at the beginning of the `install' +rule, all the commands are classified as normal until the first category +line. If you don't use any category lines, all the commands are +classified as normal. + + These are the category lines for `uninstall': + + $(PRE_UNINSTALL) # Pre-uninstall commands follow. + $(POST_UNINSTALL) # Post-uninstall commands follow. + $(NORMAL_UNINSTALL) # Normal commands follow. + + Typically, a pre-uninstall command would be used for deleting entries +from the Info directory. + + If the `install' or `uninstall' target has any dependencies which +act as subroutines of installation, then you should start _each_ +dependency's commands with a category line, and start the main target's +commands with a category line also. This way, you can ensure that each +command is placed in the right category regardless of which of the +dependencies actually run. + + Pre-installation and post-installation commands should not run any +programs except for these: + + [ basename bash cat chgrp chmod chown cmp cp dd diff echo + egrep expand expr false fgrep find getopt grep gunzip gzip + hostname install install-info kill ldconfig ln ls md5sum + mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee + test touch true uname xargs yes + + The reason for distinguishing the commands in this way is for the +sake of making binary packages. Typically a binary package contains +all the executables and other files that need to be installed, and has +its own method of installing them--so it does not need to run the normal +installation commands. But installing the binary package does need to +execute the pre-installation and post-installation commands. + + Programs to build binary packages work by extracting the +pre-installation and post-installation commands. Here is one way of +extracting the pre-installation commands: + + make -n install -o all \ + PRE_INSTALL=pre-install \ + POST_INSTALL=post-install \ + NORMAL_INSTALL=normal-install \ + | gawk -f pre-install.awk + +where the file `pre-install.awk' could contain this: + + $0 ~ /^\t[ \t]*(normal_install|post_install)[ \t]*$/ {on = 0} + on {print $0} + $0 ~ /^\t[ \t]*pre_install[ \t]*$/ {on = 1} + + The resulting file of pre-installation commands is executed as a +shell script as part of installing the binary package. + + +File: standards.info, Node: Releases, Prev: Makefile Conventions, Up: Managing Releases + +7.3 Making Releases +=================== + +Package the distribution of `Foo version 69.96' up in a gzipped tar +file with the name `foo-69.96.tar.gz'. It should unpack into a +subdirectory named `foo-69.96'. + + Building and installing the program should never modify any of the +files contained in the distribution. This means that all the files +that form part of the program in any way must be classified into "source +files" and "non-source files". Source files are written by humans and +never changed automatically; non-source files are produced from source +files by programs under the control of the Makefile. + + The distribution should contain a file named `README' which gives +the name of the package, and a general description of what it does. It +is also good to explain the purpose of each of the first-level +subdirectories in the package, if there are any. The `README' file +should either state the version number of the package, or refer to where +in the package it can be found. + + The `README' file should refer to the file `INSTALL', which should +contain an explanation of the installation procedure. + + The `README' file should also refer to the file which contains the +copying conditions. The GNU GPL, if used, should be in a file called +`COPYING'. If the GNU LGPL is used, it should be in a file called +`COPYING.LIB'. + + Naturally, all the source files must be in the distribution. It is +okay to include non-source files in the distribution, provided they are +up-to-date and machine-independent, so that building the distribution +normally will never modify them. We commonly include non-source files +produced by Bison, `lex', TeX, and `makeinfo'; this helps avoid +unnecessary dependencies between our distributions, so that users can +install whichever packages they want to install. + + Non-source files that might actually be modified by building and +installing the program should *never* be included in the distribution. +So if you do distribute non-source files, always make sure they are up +to date when you make a new distribution. + + Make sure that the directory into which the distribution unpacks (as +well as any subdirectories) are all world-writable (octal mode 777). +This is so that old versions of `tar' which preserve the ownership and +permissions of the files from the tar archive will be able to extract +all the files even if the user is unprivileged. + + Make sure that all the files in the distribution are world-readable. + + Make sure that no file name in the distribution is more than 14 +characters long. Likewise, no file created by building the program +should have a name longer than 14 characters. The reason for this is +that some systems adhere to a foolish interpretation of the POSIX +standard, and refuse to open a longer name, rather than truncating as +they did in the past. + + Don't include any symbolic links in the distribution itself. If the +tar file contains symbolic links, then people cannot even unpack it on +systems that don't support symbolic links. Also, don't use multiple +names for one file in different directories, because certain file +systems cannot handle this and that prevents unpacking the distribution. + + Try to make sure that all the file names will be unique on MS-DOS. A +name on MS-DOS consists of up to 8 characters, optionally followed by a +period and up to three characters. MS-DOS will truncate extra +characters both before and after the period. Thus, `foobarhacker.c' +and `foobarhacker.o' are not ambiguous; they are truncated to +`foobarha.c' and `foobarha.o', which are distinct. + + Include in your distribution a copy of the `texinfo.tex' you used to +test print any `*.texinfo' or `*.texi' files. + + Likewise, if your program uses small GNU software packages like +regex, getopt, obstack, or termcap, include them in the distribution +file. Leaving them out would make the distribution file a little +smaller at the expense of possible inconvenience to a user who doesn't +know what other files to get. + + +File: standards.info, Node: References, Next: Copying This Manual, Prev: Managing Releases, Up: Top + +8 References to Non-Free Software and Documentation +*************************************************** + +A GNU program should not recommend use of any non-free program. We +can't stop some people from writing proprietary programs, or stop other +people from using them, but we can and should avoid helping to +advertise them to new potential customers. Proprietary software is a +social and ethical problem, and the point of GNU is to solve that +problem. + + When a non-free program or system is well known, you can mention it +in passing--that is harmless, since users who might want to use it +probably already know about it. For instance, it is fine to explain +how to build your package on top of some non-free operating system, or +how to use it together with some widely used non-free program. + + However, you should give only the necessary information to help those +who already use the non-free program to use your program with it--don't +give, or refer to, any further information about the proprietary +program, and don't imply that the proprietary program enhances your +program, or that its existence is in any way a good thing. The goal +should be that people already using the proprietary program will get +the advice they need about how to use your free program, while people +who don't already use the proprietary program will not see anything to +lead them to take an interest in it. + + If a non-free program or system is obscure in your program's domain, +your program should not mention or support it at all, since doing so +would tend to popularize the non-free program more than it popularizes +your program. (You cannot hope to find many additional users among the +users of Foobar if the users of Foobar are few.) + + A GNU package should not refer the user to any non-free documentation +for free software. Free documentation that can be included in free +operating systems is essential for completing the GNU system, so it is +a major focus of the GNU Project; to recommend use of documentation +that we are not allowed to use in GNU would undermine the efforts to +get documentation that we can include. So GNU packages should never +recommend non-free documentation. + + +File: standards.info, Node: Copying This Manual, Next: Index, Prev: References, Up: Top + +Appendix A Copying This Manual +****************************** + +* Menu: + +* GNU Free Documentation License:: License for copying this manual + + +File: standards.info, Node: GNU Free Documentation License, Up: Copying This Manual + +Appendix B GNU Free Documentation License +***************************************** + + Version 1.1, March 2000 + + Copyright (C) 2000 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + written document "free" in the sense of freedom: to assure everyone + the effective freedom to copy and redistribute it, with or without + modifying it, either commercially or noncommercially. Secondarily, + this License preserves for the author and publisher a way to get + credit for their work, while not being considered responsible for + modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work that contains a + notice placed by the copyright holder saying it can be distributed + under the terms of this License. The "Document", below, refers to + any such manual or work. Any member of the public is a licensee, + and is addressed as "you." + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter + section of the Document that deals exclusively with the + relationship of the publishers or authors of the Document to the + Document's overall subject (or to related matters) and contains + nothing that could fall directly within that overall subject. + (For example, if the Document is in part a textbook of + mathematics, a Secondary Section may not explain any mathematics.) + The relationship could be a matter of historical connection with + the subject or with related matters, or of legal, commercial, + philosophical, ethical or political position regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, whose contents can be viewed and edited directly + and straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup has been designed + to thwart or discourage subsequent modification by readers is not + Transparent. A copy that is not "Transparent" is called "Opaque." + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML designed for human modification. + Opaque formats include PostScript, PDF, proprietary formats that + can be read and edited only by proprietary word processors, SGML + or XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies of the Document numbering more than + 100, and the Document's license notice requires Cover Texts, you + must enclose the copies in covers that carry, clearly and legibly, + all these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a publicly-accessible + computer-network location containing a complete Transparent copy + of the Document, free of added material, which the general + network-using public has access to download anonymously at no + charge using public-standard network protocols. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that version + gives permission. + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in the + Modified Version, together with at least five of the principal + authors of the Document (all of its principal authors, if it + has less than five). + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + D. Preserve all the copyright notices of the Document. + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified Version + under the terms of this License, in the form shown in the + Addendum below. + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + H. Include an unaltered copy of this License. + I. Preserve the section entitled "History", and its title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. + If there is no section entitled "History" in the Document, + create one stating the title, year, authors, and publisher of + the Document as given on its Title Page, then add an item + describing the Modified Version as stated in the previous + sentence. + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + K. In any section entitled "Acknowledgements" or "Dedications", + preserve the section's title, and preserve in the section all the + substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. + M. Delete any section entitled "Endorsements." Such a section + may not be included in the Modified Version. + N. Do not retitle any existing section as "Endorsements" or to + conflict in title with any Invariant Section. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties-for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition + of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections entitled + "History" in the various original documents, forming one section + entitled "History"; likewise combine any sections entitled + "Acknowledgements", and any sections entitled "Dedications." You + must delete all sections entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, does not as a whole count as a + Modified Version of the Document, provided no compilation + copyright is claimed for the compilation. Such a compilation is + called an "aggregate", and this License does not apply to the + other self-contained works thus compiled with the Document, on + account of their being thus compiled, if they are not themselves + derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one + quarter of the entire aggregate, the Document's Cover Texts may be + placed on covers that surround only the Document within the + aggregate. Otherwise they must appear on covers around the whole + aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License provided that you also include the + original English version of this License. In case of a + disagreement between the translation and the original English + version of this License, the original English version will prevail. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + http://www.gnu.org/copyleft/. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 + or any later version published by the Free Software Foundation; + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + A copy of the license is included in the section entitled "GNU + Free Documentation License." + + If you have no Invariant Sections, write "with no Invariant Sections" +instead of saying which ones are invariant. If you have no Front-Cover +Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being +LIST"; likewise for Back-Cover Texts. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: standards.info, Node: Index, Prev: Copying This Manual, Up: Top + +Index +***** + +[index] +* Menu: + +* #endif, commenting: Comments. (line 54) +* --help option: Command-Line Interfaces. + (line 119) +* --version option: Command-Line Interfaces. + (line 34) +* -Wall compiler option: Syntactic Conventions. + (line 10) +* accepting contributions: Contributions. (line 6) +* address for bug reports: Command-Line Interfaces. + (line 125) +* ANSI C standard: Standard C. (line 6) +* arbitrary limits on data: Semantics. (line 6) +* autoconf: System Portability. (line 23) +* avoiding proprietary code: Reading Non-Free Code. + (line 6) +* behavior, dependent on program's name: User Interfaces. (line 6) +* binary packages: Install Command Categories. + (line 80) +* bindir: Directory Variables. (line 45) +* braces, in C source: Formatting. (line 6) +* bug reports: Command-Line Interfaces. + (line 125) +* canonical name of a program: Command-Line Interfaces. + (line 41) +* casting pointers to integers: CPU Portability. (line 67) +* change logs: Change Logs. (line 6) +* change logs, conditional changes: Conditional Changes. (line 6) +* change logs, style: Style of Change Logs. + (line 6) +* command-line arguments, decoding: Semantics. (line 46) +* command-line interface: Command-Line Interfaces. + (line 6) +* commenting: Comments. (line 6) +* compatibility with C and POSIX standards: Compatibility. (line 6) +* compiler warnings: Syntactic Conventions. + (line 10) +* conditional changes, and change logs: Conditional Changes. (line 6) +* conditionals, comments for: Comments. (line 54) +* configure: Configuration. (line 6) +* control-L: Formatting. (line 114) +* conventions for makefiles: Makefile Conventions. + (line 6) +* corba: Graphical Interfaces. + (line 16) +* credits for manuals: Manual Credits. (line 6) +* data types, and portability: CPU Portability. (line 6) +* declaration for system functions: System Functions. (line 21) +* documentation: Documentation. (line 6) +* doschk: Names. (line 38) +* downloading this manual: Preface. (line 17) +* error messages: Semantics. (line 19) +* error messages, formatting: Errors. (line 6) +* exec_prefix: Directory Variables. (line 27) +* expressions, splitting: Formatting. (line 77) +* file usage: File Usage. (line 6) +* file-name limitations: Names. (line 38) +* formatting error messages: Errors. (line 6) +* formatting source code: Formatting. (line 6) +* formfeed: Formatting. (line 114) +* function argument, declaring: Syntactic Conventions. + (line 6) +* function prototypes: Standard C. (line 17) +* getopt: Command-Line Interfaces. + (line 6) +* gettext: Internationalization. + (line 6) +* gnome: Graphical Interfaces. + (line 16) +* graphical user interface: Graphical Interfaces. + (line 6) +* gtk: Graphical Interfaces. + (line 6) +* GUILE: Source Language. (line 38) +* implicit int: Syntactic Conventions. + (line 6) +* impossible conditions: Semantics. (line 70) +* internationalization: Internationalization. + (line 6) +* legal aspects: Legal Issues. (line 6) +* legal papers: Contributions. (line 6) +* libexecdir: Directory Variables. (line 58) +* libraries: Libraries. (line 6) +* library functions, and portability: System Functions. (line 6) +* license for manuals: License for Manuals. (line 6) +* lint: Syntactic Conventions. + (line 109) +* long option names: Option Table. (line 6) +* long-named options: Command-Line Interfaces. + (line 12) +* makefile, conventions for: Makefile Conventions. + (line 6) +* malloc return value: Semantics. (line 25) +* man pages: Man Pages. (line 6) +* manual structure: Manual Structure Details. + (line 6) +* memory allocation failure: Semantics. (line 25) +* memory usage: Memory Usage. (line 6) +* message text, and internationalization: Internationalization. + (line 29) +* mmap: Mmap. (line 6) +* multiple variables in a line: Syntactic Conventions. + (line 35) +* names of variables, functions, and files: Names. (line 6) +* NEWS file: NEWS File. (line 6) +* non-POSIX systems, and portability: System Portability. (line 32) +* non-standard extensions: Using Extensions. (line 6) +* NUL characters: Semantics. (line 11) +* open brace: Formatting. (line 6) +* optional features, configure-time: Configuration. (line 76) +* options for compatibility: Compatibility. (line 14) +* output device and program's behavior: User Interfaces. (line 13) +* packaging: Releases. (line 6) +* portability, and data types: CPU Portability. (line 6) +* portability, and library functions: System Functions. (line 6) +* portability, between system types: System Portability. (line 6) +* POSIX compatibility: Compatibility. (line 6) +* POSIXLY_CORRECT, environment variable: Compatibility. (line 21) +* post-installation commands: Install Command Categories. + (line 6) +* pre-installation commands: Install Command Categories. + (line 6) +* prefix: Directory Variables. (line 17) +* program configuration: Configuration. (line 6) +* program design: Design Advice. (line 6) +* program name and its behavior: User Interfaces. (line 6) +* program's canonical name: Command-Line Interfaces. + (line 41) +* programming languges: Source Language. (line 6) +* proprietary programs: Reading Non-Free Code. + (line 6) +* README file: Releases. (line 17) +* references to non-free material: References. (line 6) +* releasing: Managing Releases. (line 6) +* sbindir: Directory Variables. (line 51) +* signal handling: Semantics. (line 59) +* spaces before open-paren: Formatting. (line 71) +* standard command-line options: Command-Line Interfaces. + (line 31) +* standards for makefiles: Makefile Conventions. + (line 6) +* string library functions: System Functions. (line 55) +* syntactic conventions: Syntactic Conventions. + (line 6) +* table of long options: Option Table. (line 6) +* temporary files: Semantics. (line 84) +* temporary variables: Syntactic Conventions. + (line 23) +* texinfo.tex, in a distribution: Releases. (line 73) +* TMPDIR environment variable: Semantics. (line 84) +* trademarks: Trademarks. (line 6) +* where to obtain standards.texi: Preface. (line 17) + + + +Tag Table: +Node: Top696 +Node: Preface1396 +Node: Legal Issues3616 +Node: Reading Non-Free Code4080 +Node: Contributions5808 +Node: Trademarks7962 +Node: Design Advice9025 +Node: Source Language9609 +Node: Compatibility11621 +Node: Using Extensions13249 +Node: Standard C14825 +Node: Conditional Compilation17228 +Node: Program Behavior18527 +Node: Semantics19446 +Node: Libraries24139 +Node: Errors25384 +Node: User Interfaces27165 +Node: Graphical Interfaces28770 +Node: Command-Line Interfaces29805 +Node: Option Table35876 +Node: Memory Usage50885 +Node: File Usage51910 +Node: Writing C52658 +Node: Formatting53508 +Node: Comments57571 +Node: Syntactic Conventions60873 +Node: Names64285 +Node: System Portability66494 +Node: CPU Portability68879 +Node: System Functions72135 +Node: Internationalization77332 +Node: Mmap80485 +Node: Documentation81195 +Node: GNU Manuals82300 +Node: Doc Strings and Manuals87357 +Node: Manual Structure Details88910 +Node: License for Manuals90328 +Node: Manual Credits91302 +Node: Printed Manuals91695 +Node: NEWS File92381 +Node: Change Logs93059 +Node: Change Log Concepts93813 +Node: Style of Change Logs95677 +Node: Simple Changes97712 +Node: Conditional Changes98956 +Node: Indicating the Part Changed100378 +Node: Man Pages100905 +Node: Reading other Manuals102529 +Node: Managing Releases103320 +Node: Configuration104083 +Node: Makefile Conventions110988 +Node: Makefile Basics111794 +Node: Utilities in Makefiles114968 +Node: Command Variables117113 +Node: Directory Variables120690 +Node: Standard Targets131584 +Ref: Standard Targets-Footnote-1142824 +Node: Install Command Categories142924 +Node: Releases147506 +Node: References151594 +Node: Copying This Manual153879 +Node: GNU Free Documentation License154115 +Node: Index173816 + +End Tag Table diff --git a/gas/bfin-lex.c b/gas/bfin-lex.c new file mode 100644 index 000000000..0490ade6e --- /dev/null +++ b/gas/bfin-lex.c @@ -0,0 +1,3543 @@ + +#line 3 "bfin-lex.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#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. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +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 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - 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). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +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 realloc() it to grow it, and should free() 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; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* 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 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ + +/* 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". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* 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 = 0; /* 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 (FILE *input_file ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); +void yy_delete_buffer (YY_BUFFER_STATE b ); +void yy_flush_buffer (YY_BUFFER_STATE b ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state (void ); + +static void yyensure_buffer_stack (void ); +static void yy_load_buffer_state (void ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); + +void *yyalloc (yy_size_t ); +void *yyrealloc (void *,yy_size_t ); +void yyfree (void * ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +typedef unsigned char YY_CHAR; + +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; + +typedef int yy_state_type; + +extern int yylineno; + +int yylineno = 1; + +extern char *yytext; +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state (void ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); +static int yy_get_next_buffer (void ); +static void yy_fatal_error (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 = (size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; + +#define YY_NUM_RULES 238 +#define YY_END_OF_BUFFER 239 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[559] = + { 0, + 0, 0, 0, 0, 239, 237, 235, 235, 220, 233, + 219, 218, 200, 201, 216, 214, 211, 210, 203, 232, + 232, 202, 221, 199, 195, 237, 224, 233, 148, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 70, 233, + 233, 233, 54, 19, 18, 233, 12, 10, 8, 7, + 189, 188, 187, 233, 185, 183, 233, 233, 233, 233, + 233, 233, 217, 215, 213, 212, 0, 209, 204, 0, + 0, 0, 232, 234, 0, 232, 234, 198, 196, 222, + 194, 193, 178, 175, 233, 233, 233, 150, 151, 233, + 233, 149, 0, 147, 233, 140, 233, 233, 136, 233, + + 125, 233, 123, 233, 233, 233, 233, 233, 233, 233, + 103, 102, 101, 233, 100, 99, 233, 233, 97, 233, + 95, 94, 93, 91, 233, 85, 233, 233, 77, 86, + 233, 71, 69, 233, 233, 233, 233, 65, 233, 233, + 233, 59, 233, 56, 233, 233, 53, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 25, + 233, 233, 233, 233, 233, 15, 14, 233, 233, 159, + 233, 186, 233, 184, 223, 233, 233, 95, 233, 233, + 233, 205, 207, 206, 208, 0, 0, 232, 232, 232, + 232, 197, 191, 192, 233, 233, 171, 152, 153, 233, + + 233, 162, 163, 233, 154, 156, 232, 233, 233, 233, + 233, 233, 233, 124, 233, 233, 119, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 179, 98, 233, 233, + 233, 233, 233, 233, 80, 83, 78, 81, 233, 233, + 233, 79, 82, 233, 67, 66, 233, 63, 62, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 44, + 39, 38, 37, 36, 35, 34, 233, 32, 31, 233, + 233, 233, 233, 233, 233, 233, 21, 233, 233, 16, + 13, 233, 9, 233, 233, 233, 233, 233, 233, 233, + 236, 190, 170, 168, 177, 176, 169, 167, 174, 173, + + 233, 233, 233, 155, 157, 146, 233, 233, 233, 233, + 139, 138, 233, 127, 233, 233, 118, 233, 233, 233, + 233, 111, 110, 233, 233, 233, 233, 233, 233, 233, + 105, 104, 233, 233, 233, 96, 233, 92, 89, 84, + 74, 233, 233, 68, 64, 233, 61, 60, 58, 57, + 233, 55, 45, 233, 50, 47, 49, 46, 48, 233, + 233, 43, 42, 233, 233, 233, 233, 233, 27, 24, + 23, 233, 233, 233, 233, 233, 233, 228, 233, 227, + 233, 233, 233, 233, 160, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 122, 233, 117, 116, 233, + + 233, 233, 233, 233, 233, 233, 233, 108, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 2, 182, + 52, 41, 40, 33, 233, 233, 233, 30, 233, 22, + 233, 233, 233, 172, 231, 233, 233, 233, 233, 233, + 164, 161, 145, 144, 143, 142, 141, 233, 233, 233, + 233, 126, 121, 233, 233, 233, 233, 233, 51, 233, + 233, 107, 233, 233, 233, 233, 233, 88, 87, 90, + 233, 233, 73, 72, 29, 233, 233, 233, 20, 233, + 233, 233, 229, 233, 226, 165, 166, 233, 233, 233, + 233, 233, 233, 120, 233, 114, 113, 233, 233, 233, + + 5, 106, 233, 180, 233, 233, 233, 233, 28, 233, + 233, 17, 11, 233, 233, 233, 233, 135, 133, 134, + 132, 129, 233, 115, 233, 6, 109, 233, 233, 3, + 233, 76, 1, 26, 230, 225, 137, 130, 131, 233, + 233, 233, 233, 233, 128, 233, 233, 4, 75, 233, + 233, 112, 233, 233, 233, 233, 181, 0 + } ; + +static yyconst flex_int32_t 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, 2, 4, 1, 5, 6, 7, 8, 1, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 1, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 1, 60, 61, 62, 1, 63, 64, 35, 36, + + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 65, 48, 49, 66, 51, 67, 53, 54, 55, 56, + 57, 58, 1, 68, 1, 69, 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 flex_int32_t yy_meta[70] = + { 0, + 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, + 1, 1, 5, 4, 5, 5, 5, 4, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, + 1, 3, 5, 4, 3, 3, 3, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[565] = + { 0, + 0, 0, 32, 33, 814, 815, 815, 815, 815, 0, + 815, 783, 815, 815, 782, 60, 815, 61, 800, 113, + 44, 815, 815, 54, 75, 779, 815, 161, 221, 59, + 84, 42, 92, 105, 109, 148, 756, 271, 141, 48, + 110, 322, 372, 421, 153, 757, 60, 787, 0, 0, + 815, 815, 776, 741, 58, 815, 141, 64, 763, 43, + 61, 0, 815, 815, 815, 815, 105, 815, 815, 129, + 792, 210, 225, 235, 472, 275, 815, 772, 815, 815, + 815, 145, 786, 785, 748, 163, 757, 0, 0, 263, + 185, 0, 0, 782, 131, 0, 759, 97, 154, 751, + + 0, 753, 0, 736, 757, 752, 742, 69, 736, 279, + 773, 741, 0, 156, 0, 0, 157, 749, 770, 740, + 0, 0, 732, 0, 737, 766, 196, 199, 0, 153, + 226, 247, 765, 723, 732, 220, 280, 0, 221, 740, + 170, 761, 740, 0, 250, 728, 758, 731, 252, 735, + 257, 308, 260, 248, 269, 288, 281, 729, 730, 753, + 710, 725, 714, 713, 710, 0, 0, 714, 298, 0, + 742, 815, 219, 815, 815, 707, 715, 714, 711, 174, + 712, 815, 815, 815, 815, 744, 138, 356, 408, 0, + 0, 815, 815, 724, 312, 343, 0, 0, 0, 714, + + 711, 0, 0, 249, 700, 699, 0, 232, 369, 695, + 303, 711, 703, 0, 700, 701, 375, 337, 337, 122, + 238, 338, 378, 347, 239, 709, 725, 0, 356, 318, + 705, 722, 692, 363, 0, 0, 0, 0, 691, 390, + 697, 0, 0, 372, 0, 0, 689, 0, 0, 700, + 684, 699, 403, 690, 684, 393, 436, 680, 474, 431, + 0, 0, 0, 0, 0, 0, 684, 0, 0, 398, + 678, 401, 690, 681, 437, 680, 0, 690, 401, 0, + 0, 662, 0, 657, 671, 684, 667, 676, 680, 676, + 705, 815, 0, 0, 0, 0, 0, 0, 0, 0, + + 669, 676, 434, 0, 0, 0, 669, 659, 674, 448, + 0, 659, 466, 694, 673, 670, 439, 661, 411, 654, + 660, 0, 0, 419, 422, 647, 649, 450, 665, 470, + 0, 0, 664, 675, 462, 0, 636, 0, 682, 0, + 634, 642, 656, 0, 0, 656, 0, 0, 0, 0, + 657, 0, 0, 654, 0, 0, 0, 0, 0, 671, + 672, 0, 0, 652, 652, 470, 649, 471, 470, 0, + 0, 650, 646, 632, 637, 614, 640, 617, 627, 0, + 640, 630, 521, 474, 0, 466, 619, 475, 630, 477, + 633, 624, 485, 625, 614, 0, 618, 0, 0, 620, + + 623, 625, 626, 611, 491, 628, 611, 0, 619, 625, + 622, 613, 622, 495, 503, 487, 608, 497, 0, 0, + 0, 0, 0, 0, 615, 517, 603, 0, 612, 0, + 613, 614, 519, 0, 609, 609, 501, 605, 624, 625, + 0, 0, 0, 0, 0, 0, 0, 604, 537, 609, + 595, 0, 623, 597, 508, 510, 594, 588, 0, 590, + 600, 0, 511, 585, 614, 532, 597, 0, 0, 0, + 596, 586, 0, 0, 0, 514, 594, 517, 0, 518, + 574, 583, 0, 593, 0, 0, 0, 589, 544, 315, + 578, 582, 538, 0, 568, 0, 0, 586, 578, 520, + + 0, 0, 575, 0, 551, 554, 563, 564, 0, 521, + 548, 0, 0, 543, 556, 522, 418, 0, 0, 0, + 0, 0, 558, 0, 535, 0, 0, 524, 528, 0, + 424, 0, 0, 0, 0, 0, 0, 0, 0, 403, + 388, 378, 324, 279, 0, 272, 529, 0, 0, 531, + 538, 0, 262, 168, 82, 83, 0, 815, 603, 608, + 92, 613, 615, 617 + } ; + +static yyconst flex_int16_t yy_def[565] = + { 0, + 558, 1, 1, 1, 558, 558, 558, 558, 558, 559, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 560, + 561, 558, 558, 558, 558, 558, 558, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 558, 558, 558, 28, 558, 558, 559, 36, 38, 42, + 559, 559, 558, 558, 558, 558, 558, 558, 558, 558, + 562, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 563, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 558, 559, 558, 558, 559, 559, 559, 559, 559, + 559, 558, 558, 558, 558, 562, 562, 558, 558, 75, + 564, 558, 558, 558, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 563, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 562, 558, 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 0, 558, 558, + 558, 558, 558, 558 + } ; + +static yyconst flex_int16_t yy_nxt[885] = + { 0, + 6, 7, 8, 9, 6, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 10, 19, 20, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 10, 38, 39, 40, 41, 42, 10, 43, + 44, 45, 46, 47, 48, 49, 10, 50, 51, 52, + 53, 10, 54, 29, 41, 43, 45, 55, 56, 57, + 57, 65, 58, 58, 68, 59, 59, 77, 80, 60, + 60, 77, 78, 79, 61, 61, 109, 174, 93, 66, + 69, 100, 180, 101, 137, 76, 93, 110, 138, 177, + + 169, 178, 102, 557, 81, 103, 181, 77, 180, 104, + 170, 168, 137, 93, 93, 105, 182, 106, 183, 219, + 107, 100, 220, 103, 108, 175, 556, 67, 70, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 111, + 184, 113, 185, 211, 112, 93, 74, 106, 187, 116, + 74, 114, 117, 291, 139, 140, 115, 133, 133, 133, + 133, 211, 141, 118, 119, 119, 119, 119, 75, 114, + 322, 115, 323, 134, 193, 194, 74, 83, 84, 198, + 199, 135, 209, 120, 176, 121, 136, 122, 111, 164, + 165, 555, 166, 112, 85, 86, 167, 209, 123, 239, + + 124, 205, 206, 134, 87, 212, 88, 227, 228, 89, + 289, 90, 235, 236, 91, 237, 238, 239, 92, 256, + 212, 252, 227, 228, 85, 93, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 252, 94, 94, 94, + 94, 189, 189, 189, 189, 189, 189, 189, 189, 189, + 189, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 95, 240, 242, 243, 241, 247, 250, 96, 197, + 97, 306, 324, 325, 326, 306, 98, 99, 331, 554, + 268, 303, 332, 284, 247, 250, 97, 126, 126, 126, + 126, 76, 76, 76, 76, 76, 76, 76, 76, 76, + + 76, 255, 201, 259, 127, 128, 202, 129, 261, 267, + 268, 303, 203, 222, 204, 269, 255, 130, 259, 550, + 270, 131, 132, 261, 549, 267, 223, 248, 203, 204, + 224, 249, 272, 269, 127, 130, 271, 132, 142, 142, + 142, 142, 142, 142, 262, 224, 249, 272, 263, 282, + 270, 293, 312, 264, 143, 294, 144, 336, 265, 519, + 548, 336, 520, 266, 282, 145, 295, 296, 312, 321, + 327, 146, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 297, 320, 143, 328, 298, 146, 147, 147, + 147, 147, 147, 147, 147, 147, 330, 299, 300, 321, + + 327, 320, 340, 307, 148, 335, 340, 317, 149, 318, + 329, 344, 330, 308, 319, 344, 547, 150, 151, 309, + 310, 335, 546, 152, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 148, 310, 151, 317, 152, 153, + 329, 342, 349, 401, 352, 545, 349, 365, 360, 361, + 367, 404, 374, 154, 405, 155, 342, 156, 157, 352, + 158, 159, 538, 365, 544, 539, 367, 374, 160, 353, + 362, 161, 162, 401, 363, 353, 370, 163, 398, 353, + 371, 404, 399, 154, 405, 385, 389, 162, 190, 190, + 190, 190, 190, 190, 190, 190, 190, 190, 390, 353, + + 385, 408, 410, 429, 191, 191, 191, 191, 191, 191, + 355, 413, 392, 393, 356, 443, 408, 450, 394, 357, + 471, 426, 428, 472, 358, 442, 445, 413, 447, 359, + 392, 443, 410, 429, 191, 191, 426, 428, 439, 440, + 442, 445, 459, 447, 467, 441, 468, 450, 474, 476, + 471, 481, 484, 469, 489, 490, 491, 459, 470, 496, + 467, 497, 502, 474, 505, 509, 517, 484, 511, 512, + 523, 527, 533, 537, 496, 551, 497, 502, 543, 476, + 509, 481, 552, 511, 512, 542, 527, 533, 537, 553, + 541, 518, 540, 551, 505, 536, 535, 552, 534, 532, + + 523, 531, 530, 529, 553, 62, 62, 62, 72, 528, + 72, 72, 72, 186, 526, 186, 186, 186, 207, 207, + 191, 191, 525, 524, 522, 521, 516, 515, 514, 513, + 510, 508, 507, 506, 504, 503, 501, 500, 499, 498, + 495, 494, 493, 492, 488, 487, 486, 485, 483, 482, + 480, 479, 478, 477, 475, 473, 466, 465, 464, 463, + 462, 461, 460, 458, 457, 456, 455, 454, 453, 452, + 451, 449, 448, 446, 444, 438, 437, 436, 414, 435, + 434, 433, 432, 431, 430, 427, 425, 424, 423, 422, + 421, 420, 419, 418, 417, 416, 415, 414, 412, 411, + + 409, 407, 406, 403, 402, 400, 397, 396, 395, 391, + 388, 387, 386, 384, 383, 187, 382, 381, 380, 379, + 378, 377, 376, 375, 373, 372, 369, 368, 366, 364, + 354, 351, 350, 348, 347, 346, 345, 343, 341, 339, + 338, 337, 334, 333, 316, 315, 314, 313, 311, 305, + 304, 302, 301, 292, 187, 290, 288, 287, 286, 285, + 283, 281, 280, 279, 278, 277, 276, 275, 274, 273, + 260, 258, 257, 256, 254, 253, 251, 246, 245, 244, + 234, 233, 232, 231, 230, 229, 226, 225, 221, 218, + 217, 216, 215, 214, 213, 210, 208, 200, 197, 196, + + 195, 192, 187, 179, 173, 172, 171, 168, 125, 82, + 71, 64, 63, 558, 5, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558 + } ; + +static yyconst flex_int16_t yy_chk[885] = + { 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, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 4, 16, 3, 4, 18, 3, 4, 21, 25, 3, + 4, 21, 24, 24, 3, 4, 32, 55, 31, 16, + 18, 30, 60, 30, 40, 561, 33, 32, 40, 58, + + 47, 58, 30, 556, 25, 30, 61, 21, 60, 30, + 47, 61, 40, 35, 41, 30, 67, 31, 67, 108, + 31, 30, 108, 30, 31, 55, 555, 16, 18, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 33, + 70, 34, 70, 98, 33, 57, 20, 31, 187, 35, + 20, 34, 35, 187, 41, 41, 34, 39, 39, 39, + 39, 98, 41, 35, 36, 36, 36, 36, 20, 34, + 220, 34, 220, 39, 82, 82, 20, 28, 28, 86, + 86, 39, 95, 36, 57, 36, 39, 36, 57, 45, + 45, 554, 45, 57, 28, 28, 45, 95, 36, 130, + + 36, 91, 91, 39, 28, 99, 28, 114, 117, 28, + 180, 28, 127, 127, 28, 128, 128, 130, 28, 180, + 99, 141, 114, 117, 28, 29, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 141, 29, 29, 29, + 29, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 29, 131, 132, 132, 131, 136, 139, 29, 173, + 29, 208, 221, 221, 221, 208, 29, 29, 225, 553, + 154, 204, 225, 173, 136, 139, 29, 38, 38, 38, + 38, 76, 76, 76, 76, 76, 76, 76, 76, 76, + + 76, 145, 90, 149, 38, 38, 90, 38, 151, 153, + 154, 204, 90, 110, 90, 155, 145, 38, 149, 546, + 156, 38, 38, 151, 544, 153, 110, 137, 90, 90, + 110, 137, 157, 155, 38, 38, 156, 38, 42, 42, + 42, 42, 42, 42, 152, 110, 137, 157, 152, 169, + 156, 195, 211, 152, 42, 195, 42, 230, 152, 490, + 543, 230, 490, 152, 169, 42, 195, 195, 211, 219, + 222, 42, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 196, 218, 42, 222, 196, 42, 43, 43, + 43, 43, 43, 43, 43, 43, 224, 196, 196, 219, + + 222, 218, 234, 209, 43, 229, 234, 217, 43, 217, + 223, 244, 224, 209, 217, 244, 542, 43, 43, 209, + 209, 229, 541, 43, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 43, 209, 43, 217, 43, 44, + 223, 240, 253, 319, 256, 540, 253, 270, 260, 260, + 272, 324, 279, 44, 325, 44, 240, 44, 44, 256, + 44, 44, 517, 270, 531, 517, 272, 279, 44, 257, + 260, 44, 44, 319, 260, 257, 275, 44, 317, 257, + 275, 324, 317, 44, 325, 303, 310, 44, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 310, 257, + + 303, 328, 330, 369, 75, 75, 75, 75, 75, 75, + 259, 335, 313, 313, 259, 386, 328, 393, 313, 259, + 416, 366, 368, 416, 259, 384, 388, 335, 390, 259, + 313, 386, 330, 369, 75, 75, 366, 368, 383, 383, + 384, 388, 405, 390, 414, 383, 415, 393, 418, 426, + 416, 433, 437, 415, 449, 449, 449, 405, 415, 455, + 414, 456, 463, 418, 466, 476, 489, 437, 478, 480, + 493, 500, 510, 516, 455, 547, 456, 463, 529, 426, + 476, 433, 550, 478, 480, 528, 500, 510, 516, 551, + 525, 489, 523, 547, 466, 515, 514, 550, 511, 508, + + 493, 507, 506, 505, 551, 559, 559, 559, 560, 503, + 560, 560, 560, 562, 499, 562, 562, 562, 563, 563, + 564, 564, 498, 495, 492, 491, 488, 484, 482, 481, + 477, 472, 471, 467, 465, 464, 461, 460, 458, 457, + 454, 453, 451, 450, 448, 440, 439, 438, 436, 435, + 432, 431, 429, 427, 425, 417, 413, 412, 411, 410, + 409, 407, 406, 404, 403, 402, 401, 400, 397, 395, + 394, 392, 391, 389, 387, 382, 381, 379, 378, 377, + 376, 375, 374, 373, 372, 367, 365, 364, 361, 360, + 354, 351, 346, 343, 342, 341, 339, 337, 334, 333, + + 329, 327, 326, 321, 320, 318, 316, 315, 314, 312, + 309, 308, 307, 302, 301, 291, 290, 289, 288, 287, + 286, 285, 284, 282, 278, 276, 274, 273, 271, 267, + 258, 255, 254, 252, 251, 250, 247, 241, 239, 233, + 232, 231, 227, 226, 216, 215, 213, 212, 210, 206, + 205, 201, 200, 194, 186, 181, 179, 178, 177, 176, + 171, 168, 165, 164, 163, 162, 161, 160, 159, 158, + 150, 148, 147, 146, 143, 142, 140, 135, 134, 133, + 126, 125, 123, 120, 119, 118, 112, 111, 109, 107, + 106, 105, 104, 102, 100, 97, 94, 87, 85, 84, + + 83, 78, 71, 59, 54, 53, 48, 46, 37, 26, + 19, 15, 12, 5, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* 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 "bfin-lex.l" +/* bfin-lex.l ADI Blackfin lexer + Copyright 2005, 2006, 2007 + Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS 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, or (at your option) + any later version. + + GAS 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 GAS; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ +#line 22 "bfin-lex.l" + +#include "as.h" +#include "bfin-defs.h" +#include "bfin-parse.h" + +static long parse_int (char **end); +static int parse_halfreg (Register *r, int cl, char *hr); +static int parse_reg (Register *r, int type, char *rt); +int yylex (void); + +#define _REG yylval.reg + + +/* Define Start States ... Actually we will use exclusion. + If no start state is specified it should match any state + and would match some keyword rules only with + initial. */ + +#line 872 "bfin-lex.c" + +#define INITIAL 0 +#define KEYWORD 1 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals (void ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (void ); +#else +extern int yywrap (void ); +#endif +#endif + + static void yyunput (int c,char *buf_ptr ); + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (void ); +#else +static int input (void ); +#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_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t 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 \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#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 + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* 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 + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 43 "bfin-lex.l" + +#line 1028 "bfin-lex.c" + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#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 ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + 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 >= 559 ) + 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] != 815 ); + +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 44 "bfin-lex.l" +_REG.regno = REG_sftreset; return REG; + YY_BREAK +case 2: +YY_RULE_SETUP +#line 45 "bfin-lex.l" +_REG.regno = REG_omode; return REG; + YY_BREAK +case 3: +YY_RULE_SETUP +#line 46 "bfin-lex.l" +_REG.regno = REG_idle_req; return REG; + YY_BREAK +case 4: +YY_RULE_SETUP +#line 47 "bfin-lex.l" +_REG.regno = REG_hwerrcause; return REG; + YY_BREAK +case 5: +YY_RULE_SETUP +#line 48 "bfin-lex.l" +_REG.regno = REG_excause; return REG; + YY_BREAK +case 6: +YY_RULE_SETUP +#line 49 "bfin-lex.l" +_REG.regno = REG_emucause; return REG; + YY_BREAK +case 7: +YY_RULE_SETUP +#line 50 "bfin-lex.l" +return Z; + YY_BREAK +case 8: +YY_RULE_SETUP +#line 51 "bfin-lex.l" +return X; + YY_BREAK +case 9: +YY_RULE_SETUP +#line 52 "bfin-lex.l" +yylval.value = M_W32; return MMOD; + YY_BREAK +case 10: +YY_RULE_SETUP +#line 53 "bfin-lex.l" +return W; + YY_BREAK +case 11: +YY_RULE_SETUP +#line 54 "bfin-lex.l" +return VIT_MAX; + YY_BREAK +case 12: +YY_RULE_SETUP +#line 55 "bfin-lex.l" +return V; /* Special: V is a statflag and a modifier. */ + YY_BREAK +case 13: +YY_RULE_SETUP +#line 56 "bfin-lex.l" +_REG.regno = REG_USP; return REG; + YY_BREAK +case 14: +YY_RULE_SETUP +#line 57 "bfin-lex.l" +return TL; + YY_BREAK +case 15: +YY_RULE_SETUP +#line 58 "bfin-lex.l" +return TH; + YY_BREAK +case 16: +YY_RULE_SETUP +#line 59 "bfin-lex.l" +yylval.value = M_TFU; return MMOD; + YY_BREAK +case 17: +YY_RULE_SETUP +#line 60 "bfin-lex.l" +return TESTSET; + YY_BREAK +case 18: +YY_RULE_SETUP +#line 61 "bfin-lex.l" +yylval.value = M_T; return MMOD; + YY_BREAK +case 19: +YY_RULE_SETUP +#line 62 "bfin-lex.l" +return S; + YY_BREAK +case 20: +YY_RULE_SETUP +#line 63 "bfin-lex.l" +_REG.regno = REG_SYSCFG; return REG; + YY_BREAK +case 21: +YY_RULE_SETUP +#line 64 "bfin-lex.l" +return STI; + YY_BREAK +case 22: +YY_RULE_SETUP +#line 65 "bfin-lex.l" +return SSYNC; + YY_BREAK +case 23: +YY_RULE_SETUP +#line 66 "bfin-lex.l" +_REG.regno = REG_SP; return HALF_REG; + YY_BREAK +case 24: +YY_RULE_SETUP +#line 67 "bfin-lex.l" +_REG.regno = REG_SP | F_REG_HIGH; return HALF_REG; + YY_BREAK +case 25: +YY_RULE_SETUP +#line 68 "bfin-lex.l" +_REG.regno = REG_SP; return REG; + YY_BREAK +case 26: +YY_RULE_SETUP +#line 69 "bfin-lex.l" +return SIGNBITS; + YY_BREAK +case 27: +YY_RULE_SETUP +#line 70 "bfin-lex.l" +return SIGN; + YY_BREAK +case 28: +YY_RULE_SETUP +#line 71 "bfin-lex.l" +_REG.regno = REG_SEQSTAT; return REG; + YY_BREAK +case 29: +YY_RULE_SETUP +#line 72 "bfin-lex.l" +return SEARCH; + YY_BREAK +case 30: +YY_RULE_SETUP +#line 73 "bfin-lex.l" +return SHIFT; + YY_BREAK +case 31: +YY_RULE_SETUP +#line 74 "bfin-lex.l" +return SCO; + YY_BREAK +case 32: +YY_RULE_SETUP +#line 76 "bfin-lex.l" +return SAA; + YY_BREAK +case 33: +YY_RULE_SETUP +#line 77 "bfin-lex.l" +yylval.value = M_S2RND; return MMOD; + YY_BREAK +case 34: +YY_RULE_SETUP +#line 78 "bfin-lex.l" +return RTX; + YY_BREAK +case 35: +YY_RULE_SETUP +#line 79 "bfin-lex.l" +return RTS; + YY_BREAK +case 36: +YY_RULE_SETUP +#line 80 "bfin-lex.l" +return RTN; + YY_BREAK +case 37: +YY_RULE_SETUP +#line 81 "bfin-lex.l" +return RTI; + YY_BREAK +case 38: +YY_RULE_SETUP +#line 82 "bfin-lex.l" +return RTE; + YY_BREAK +case 39: +YY_RULE_SETUP +#line 83 "bfin-lex.l" +return ROT; + YY_BREAK +case 40: +YY_RULE_SETUP +#line 84 "bfin-lex.l" +return RND20; + YY_BREAK +case 41: +YY_RULE_SETUP +#line 85 "bfin-lex.l" +return RND12; + YY_BREAK +case 42: +YY_RULE_SETUP +#line 86 "bfin-lex.l" +return RNDL; + YY_BREAK +case 43: +YY_RULE_SETUP +#line 87 "bfin-lex.l" +return RNDH; + YY_BREAK +case 44: +YY_RULE_SETUP +#line 88 "bfin-lex.l" +return RND; + YY_BREAK +case 45: +YY_RULE_SETUP +#line 90 "bfin-lex.l" +return parse_halfreg(&yylval.reg, T_REG_R, yytext); + YY_BREAK +case 46: +YY_RULE_SETUP +#line 92 "bfin-lex.l" +_REG.regno = REG_RETS; return REG; + YY_BREAK +case 47: +YY_RULE_SETUP +#line 93 "bfin-lex.l" +_REG.regno = REG_RETI; return REG; + YY_BREAK +case 48: +YY_RULE_SETUP +#line 94 "bfin-lex.l" +_REG.regno = REG_RETX; return REG; + YY_BREAK +case 49: +YY_RULE_SETUP +#line 95 "bfin-lex.l" +_REG.regno = REG_RETN; return REG; + YY_BREAK +case 50: +YY_RULE_SETUP +#line 96 "bfin-lex.l" +_REG.regno = REG_RETE; return REG; + YY_BREAK +case 51: +YY_RULE_SETUP +#line 97 "bfin-lex.l" +_REG.regno = REG_EMUDAT; return REG; + YY_BREAK +case 52: +YY_RULE_SETUP +#line 98 "bfin-lex.l" +return RAISE; + YY_BREAK +case 53: +YY_RULE_SETUP +#line 100 "bfin-lex.l" +return parse_reg (&yylval.reg, T_REG_R, yytext); + YY_BREAK +case 54: +YY_RULE_SETUP +#line 102 "bfin-lex.l" +return R; + YY_BREAK +case 55: +YY_RULE_SETUP +#line 103 "bfin-lex.l" +return PRNT; + YY_BREAK +case 56: +YY_RULE_SETUP +#line 104 "bfin-lex.l" +return PC; + YY_BREAK +case 57: +YY_RULE_SETUP +#line 105 "bfin-lex.l" +return PACK; + YY_BREAK +case 58: +YY_RULE_SETUP +#line 107 "bfin-lex.l" +return parse_halfreg (&yylval.reg, T_REG_P, yytext); + YY_BREAK +case 59: +YY_RULE_SETUP +#line 108 "bfin-lex.l" +return parse_reg (&yylval.reg, T_REG_P, yytext); + YY_BREAK +case 60: +YY_RULE_SETUP +#line 110 "bfin-lex.l" +return OUTC; + YY_BREAK +case 61: +YY_RULE_SETUP +#line 111 "bfin-lex.l" +return ONES; + YY_BREAK +case 62: +YY_RULE_SETUP +#line 113 "bfin-lex.l" +return NOT; + YY_BREAK +case 63: +YY_RULE_SETUP +#line 114 "bfin-lex.l" +return NOP; + YY_BREAK +case 64: +YY_RULE_SETUP +#line 115 "bfin-lex.l" +return MNOP; + YY_BREAK +case 65: +YY_RULE_SETUP +#line 116 "bfin-lex.l" +return NS; + YY_BREAK +case 66: +YY_RULE_SETUP +#line 119 "bfin-lex.l" +return MIN; + YY_BREAK +case 67: +YY_RULE_SETUP +#line 120 "bfin-lex.l" +return MAX; + YY_BREAK +case 68: +YY_RULE_SETUP +#line 122 "bfin-lex.l" +return parse_halfreg (&yylval.reg, T_REG_M, yytext); + YY_BREAK +case 69: +YY_RULE_SETUP +#line 123 "bfin-lex.l" +return parse_reg (&yylval.reg, T_REG_M, yytext); + YY_BREAK +case 70: +YY_RULE_SETUP +#line 125 "bfin-lex.l" +return M; + YY_BREAK +case 71: +YY_RULE_SETUP +#line 126 "bfin-lex.l" +return LT; + YY_BREAK +case 72: +YY_RULE_SETUP +#line 127 "bfin-lex.l" +return LSHIFT; + YY_BREAK +case 73: +YY_RULE_SETUP +#line 128 "bfin-lex.l" +return LSETUP; + YY_BREAK +case 74: +YY_RULE_SETUP +#line 129 "bfin-lex.l" +return LOOP; + YY_BREAK +case 75: +YY_RULE_SETUP +#line 130 "bfin-lex.l" +return LOOP_BEGIN; + YY_BREAK +case 76: +YY_RULE_SETUP +#line 131 "bfin-lex.l" +return LOOP_END; + YY_BREAK +case 77: +YY_RULE_SETUP +#line 133 "bfin-lex.l" +return LE; + YY_BREAK +case 78: +YY_RULE_SETUP +#line 134 "bfin-lex.l" +_REG.regno = REG_LC0; return REG; + YY_BREAK +case 79: +YY_RULE_SETUP +#line 135 "bfin-lex.l" +_REG.regno = REG_LT0; return REG; + YY_BREAK +case 80: +YY_RULE_SETUP +#line 136 "bfin-lex.l" +_REG.regno = REG_LB0; return REG; + YY_BREAK +case 81: +YY_RULE_SETUP +#line 137 "bfin-lex.l" +_REG.regno = REG_LC1; return REG; + YY_BREAK +case 82: +YY_RULE_SETUP +#line 138 "bfin-lex.l" +_REG.regno = REG_LT1; return REG; + YY_BREAK +case 83: +YY_RULE_SETUP +#line 139 "bfin-lex.l" +_REG.regno = REG_LB1; return REG; + YY_BREAK +case 84: +YY_RULE_SETUP +#line 141 "bfin-lex.l" +return parse_halfreg (&yylval.reg, T_REG_L, yytext); + YY_BREAK +case 85: +YY_RULE_SETUP +#line 142 "bfin-lex.l" +return parse_reg (&yylval.reg, T_REG_L, yytext); + YY_BREAK +case 86: +YY_RULE_SETUP +#line 143 "bfin-lex.l" +return LO; + YY_BREAK +case 87: +YY_RULE_SETUP +#line 144 "bfin-lex.l" +{ BEGIN 0; return JUMP_DOT_S;} + YY_BREAK +case 88: +YY_RULE_SETUP +#line 145 "bfin-lex.l" +{ BEGIN 0; return JUMP_DOT_L;} + YY_BREAK +case 89: +YY_RULE_SETUP +#line 146 "bfin-lex.l" +{ BEGIN 0; return JUMP;} + YY_BREAK +case 90: +YY_RULE_SETUP +#line 147 "bfin-lex.l" +{ BEGIN 0; return JUMP_DOT_L; } + YY_BREAK +case 91: +YY_RULE_SETUP +#line 148 "bfin-lex.l" +yylval.value = M_IU; return MMOD; + YY_BREAK +case 92: +YY_RULE_SETUP +#line 149 "bfin-lex.l" +yylval.value = M_ISS2; return MMOD; + YY_BREAK +case 93: +YY_RULE_SETUP +#line 150 "bfin-lex.l" +yylval.value = M_IS; return MMOD; + YY_BREAK +case 94: +YY_RULE_SETUP +#line 151 "bfin-lex.l" +yylval.value = M_IH; return MMOD; + YY_BREAK +case 95: +YY_RULE_SETUP +#line 152 "bfin-lex.l" +return IF; + YY_BREAK +case 96: +YY_RULE_SETUP +#line 153 "bfin-lex.l" +return parse_halfreg (&yylval.reg, T_REG_I, yytext); + YY_BREAK +case 97: +YY_RULE_SETUP +#line 154 "bfin-lex.l" +return parse_reg (&yylval.reg, T_REG_I, yytext); + YY_BREAK +case 98: +YY_RULE_SETUP +#line 155 "bfin-lex.l" +return HLT; + YY_BREAK +case 99: +YY_RULE_SETUP +#line 156 "bfin-lex.l" +return HI; + YY_BREAK +case 100: +YY_RULE_SETUP +#line 157 "bfin-lex.l" +return GT; + YY_BREAK +case 101: +YY_RULE_SETUP +#line 158 "bfin-lex.l" +return GE; + YY_BREAK +case 102: +YY_RULE_SETUP +#line 159 "bfin-lex.l" +yylval.value = M_FU; return MMOD; + YY_BREAK +case 103: +YY_RULE_SETUP +#line 160 "bfin-lex.l" +_REG.regno = REG_FP; return REG; + YY_BREAK +case 104: +YY_RULE_SETUP +#line 161 "bfin-lex.l" +_REG.regno = REG_FP; return HALF_REG; + YY_BREAK +case 105: +YY_RULE_SETUP +#line 162 "bfin-lex.l" +_REG.regno = REG_FP | F_REG_HIGH; return HALF_REG; + YY_BREAK +case 106: +YY_RULE_SETUP +#line 164 "bfin-lex.l" +return EXTRACT; + YY_BREAK +case 107: +YY_RULE_SETUP +#line 165 "bfin-lex.l" +return EXPADJ; + YY_BREAK +case 108: +YY_RULE_SETUP +#line 166 "bfin-lex.l" +return EXCPT; + YY_BREAK +case 109: +YY_RULE_SETUP +#line 167 "bfin-lex.l" +return EMUEXCPT; + YY_BREAK +case 110: +YY_RULE_SETUP +#line 168 "bfin-lex.l" +return DIVS; + YY_BREAK +case 111: +YY_RULE_SETUP +#line 169 "bfin-lex.l" +return DIVQ; + YY_BREAK +case 112: +YY_RULE_SETUP +#line 170 "bfin-lex.l" +return DISALGNEXCPT; + YY_BREAK +case 113: +YY_RULE_SETUP +#line 171 "bfin-lex.l" +return DEPOSIT; + YY_BREAK +case 114: +YY_RULE_SETUP +#line 172 "bfin-lex.l" +return DBGHALT; + YY_BREAK +case 115: +YY_RULE_SETUP +#line 173 "bfin-lex.l" +return DBGCMPLX; + YY_BREAK +case 116: +YY_RULE_SETUP +#line 174 "bfin-lex.l" +return DBGAL; + YY_BREAK +case 117: +YY_RULE_SETUP +#line 175 "bfin-lex.l" +return DBGAH; + YY_BREAK +case 118: +YY_RULE_SETUP +#line 176 "bfin-lex.l" +return DBGA; + YY_BREAK +case 119: +YY_RULE_SETUP +#line 177 "bfin-lex.l" +return DBG; + YY_BREAK +case 120: +YY_RULE_SETUP +#line 178 "bfin-lex.l" +{ _REG.regno = REG_CYCLES2; return REG; } + YY_BREAK +case 121: +YY_RULE_SETUP +#line 179 "bfin-lex.l" +{ _REG.regno = REG_CYCLES; return REG; } + YY_BREAK +case 122: +YY_RULE_SETUP +#line 180 "bfin-lex.l" +return CSYNC; + YY_BREAK +case 123: +YY_RULE_SETUP +#line 181 "bfin-lex.l" +return CO; + YY_BREAK +case 124: +YY_RULE_SETUP +#line 182 "bfin-lex.l" +return CLI; + YY_BREAK +case 125: +YY_RULE_SETUP +#line 184 "bfin-lex.l" +_REG.regno = REG_CC; return CCREG; + YY_BREAK +case 126: +YY_RULE_SETUP +#line 185 "bfin-lex.l" +{ BEGIN 0; return CALL;} + YY_BREAK +case 127: +YY_RULE_SETUP +#line 186 "bfin-lex.l" +{ BEGIN 0; return CALL;} + YY_BREAK +case 128: +YY_RULE_SETUP +#line 187 "bfin-lex.l" +return BYTEUNPACK; + YY_BREAK +case 129: +YY_RULE_SETUP +#line 188 "bfin-lex.l" +return BYTEPACK; + YY_BREAK +case 130: +YY_RULE_SETUP +#line 189 "bfin-lex.l" +return BYTEOP16M; + YY_BREAK +case 131: +YY_RULE_SETUP +#line 190 "bfin-lex.l" +return BYTEOP16P; + YY_BREAK +case 132: +YY_RULE_SETUP +#line 191 "bfin-lex.l" +return BYTEOP3P; + YY_BREAK +case 133: +YY_RULE_SETUP +#line 192 "bfin-lex.l" +return BYTEOP2M; + YY_BREAK +case 134: +YY_RULE_SETUP +#line 193 "bfin-lex.l" +return BYTEOP2P; + YY_BREAK +case 135: +YY_RULE_SETUP +#line 194 "bfin-lex.l" +return BYTEOP1P; + YY_BREAK +case 136: +YY_RULE_SETUP +#line 195 "bfin-lex.l" +return BY; + YY_BREAK +case 137: +YY_RULE_SETUP +#line 196 "bfin-lex.l" +return BXORSHIFT; + YY_BREAK +case 138: +YY_RULE_SETUP +#line 197 "bfin-lex.l" +return BXOR; + YY_BREAK +case 139: +YY_RULE_SETUP +#line 199 "bfin-lex.l" +return BREV; + YY_BREAK +case 140: +YY_RULE_SETUP +#line 200 "bfin-lex.l" +return BP; + YY_BREAK +case 141: +YY_RULE_SETUP +#line 201 "bfin-lex.l" +return BITTST; + YY_BREAK +case 142: +YY_RULE_SETUP +#line 202 "bfin-lex.l" +return BITTGL; + YY_BREAK +case 143: +YY_RULE_SETUP +#line 203 "bfin-lex.l" +return BITSET; + YY_BREAK +case 144: +YY_RULE_SETUP +#line 204 "bfin-lex.l" +return BITMUX; + YY_BREAK +case 145: +YY_RULE_SETUP +#line 205 "bfin-lex.l" +return BITCLR; + YY_BREAK +case 146: +YY_RULE_SETUP +#line 206 "bfin-lex.l" +return parse_halfreg (&yylval.reg, T_REG_B, yytext); + YY_BREAK +case 147: +YY_RULE_SETUP +#line 207 "bfin-lex.l" +return parse_reg (&yylval.reg, T_REG_B, yytext); + YY_BREAK +case 148: +YY_RULE_SETUP +#line 208 "bfin-lex.l" +return B; + YY_BREAK +case 149: +YY_RULE_SETUP +#line 209 "bfin-lex.l" +_REG.regno = S_AZ; return STATUS_REG; + YY_BREAK +case 150: +YY_RULE_SETUP +#line 210 "bfin-lex.l" +_REG.regno = S_AN; return STATUS_REG; + YY_BREAK +case 151: +YY_RULE_SETUP +#line 211 "bfin-lex.l" +_REG.regno = S_AQ; return STATUS_REG; + YY_BREAK +case 152: +YY_RULE_SETUP +#line 212 "bfin-lex.l" +_REG.regno = S_AC0; return STATUS_REG; + YY_BREAK +case 153: +YY_RULE_SETUP +#line 213 "bfin-lex.l" +_REG.regno = S_AC1; return STATUS_REG; + YY_BREAK +case 154: +YY_RULE_SETUP +#line 214 "bfin-lex.l" +_REG.regno = S_AV0; return STATUS_REG; + YY_BREAK +case 155: +YY_RULE_SETUP +#line 215 "bfin-lex.l" +_REG.regno = S_AV0S; return STATUS_REG; + YY_BREAK +case 156: +YY_RULE_SETUP +#line 216 "bfin-lex.l" +_REG.regno = S_AV1; return STATUS_REG; + YY_BREAK +case 157: +YY_RULE_SETUP +#line 217 "bfin-lex.l" +_REG.regno = S_AV1S; return STATUS_REG; + YY_BREAK +case 158: +YY_RULE_SETUP +#line 218 "bfin-lex.l" +_REG.regno = S_V; return STATUS_REG; + YY_BREAK +case 159: +YY_RULE_SETUP +#line 219 "bfin-lex.l" +_REG.regno = S_VS; return STATUS_REG; + YY_BREAK +case 160: +YY_RULE_SETUP +#line 222 "bfin-lex.l" +_REG.regno = REG_ASTAT; return REG; + YY_BREAK +case 161: +YY_RULE_SETUP +#line 223 "bfin-lex.l" +return ASHIFT; + YY_BREAK +case 162: +YY_RULE_SETUP +#line 224 "bfin-lex.l" +return ASL; + YY_BREAK +case 163: +YY_RULE_SETUP +#line 225 "bfin-lex.l" +return ASR; + YY_BREAK +case 164: +YY_RULE_SETUP +#line 226 "bfin-lex.l" +return ALIGN8; + YY_BREAK +case 165: +YY_RULE_SETUP +#line 227 "bfin-lex.l" +return ALIGN16; + YY_BREAK +case 166: +YY_RULE_SETUP +#line 228 "bfin-lex.l" +return ALIGN24; + YY_BREAK +case 167: +YY_RULE_SETUP +#line 229 "bfin-lex.l" +return A_ONE_DOT_L; + YY_BREAK +case 168: +YY_RULE_SETUP +#line 230 "bfin-lex.l" +return A_ZERO_DOT_L; + YY_BREAK +case 169: +YY_RULE_SETUP +#line 231 "bfin-lex.l" +return A_ONE_DOT_H; + YY_BREAK +case 170: +YY_RULE_SETUP +#line 232 "bfin-lex.l" +return A_ZERO_DOT_H; + YY_BREAK +case 171: +YY_RULE_SETUP +#line 233 "bfin-lex.l" +return ABS; + YY_BREAK +case 172: +YY_RULE_SETUP +#line 234 "bfin-lex.l" +return ABORT; + YY_BREAK +case 173: +YY_RULE_SETUP +#line 235 "bfin-lex.l" +_REG.regno = REG_A1x; return REG; + YY_BREAK +case 174: +YY_RULE_SETUP +#line 236 "bfin-lex.l" +_REG.regno = REG_A1w; return REG; + YY_BREAK +case 175: +YY_RULE_SETUP +#line 237 "bfin-lex.l" +_REG.regno = REG_A1; return REG_A_DOUBLE_ONE; + YY_BREAK +case 176: +YY_RULE_SETUP +#line 238 "bfin-lex.l" +_REG.regno = REG_A0x; return REG; + YY_BREAK +case 177: +YY_RULE_SETUP +#line 239 "bfin-lex.l" +_REG.regno = REG_A0w; return REG; + YY_BREAK +case 178: +YY_RULE_SETUP +#line 240 "bfin-lex.l" +_REG.regno = REG_A0; return REG_A_DOUBLE_ZERO; + YY_BREAK +case 179: +YY_RULE_SETUP +#line 241 "bfin-lex.l" +return GOT; + YY_BREAK +case 180: +YY_RULE_SETUP +#line 242 "bfin-lex.l" +return GOT17M4; + YY_BREAK +case 181: +YY_RULE_SETUP +#line 243 "bfin-lex.l" +return FUNCDESC_GOT17M4; + YY_BREAK +case 182: +YY_RULE_SETUP +#line 244 "bfin-lex.l" +return PLTPC; + YY_BREAK +case 183: +YY_RULE_SETUP +#line 247 "bfin-lex.l" +return TILDA; + YY_BREAK +case 184: +YY_RULE_SETUP +#line 248 "bfin-lex.l" +return _BAR_ASSIGN; + YY_BREAK +case 185: +YY_RULE_SETUP +#line 249 "bfin-lex.l" +return BAR; + YY_BREAK +case 186: +YY_RULE_SETUP +#line 250 "bfin-lex.l" +return _CARET_ASSIGN; + YY_BREAK +case 187: +YY_RULE_SETUP +#line 251 "bfin-lex.l" +return CARET; + YY_BREAK +case 188: +YY_RULE_SETUP +#line 252 "bfin-lex.l" +return RBRACK; + YY_BREAK +case 189: +YY_RULE_SETUP +#line 253 "bfin-lex.l" +return LBRACK; + YY_BREAK +case 190: +YY_RULE_SETUP +#line 254 "bfin-lex.l" +return _GREATER_GREATER_GREATER_THAN_ASSIGN; + YY_BREAK +case 191: +YY_RULE_SETUP +#line 255 "bfin-lex.l" +return _GREATER_GREATER_ASSIGN; + YY_BREAK +case 192: +YY_RULE_SETUP +#line 256 "bfin-lex.l" +return _GREATER_GREATER_GREATER; + YY_BREAK +case 193: +YY_RULE_SETUP +#line 257 "bfin-lex.l" +return GREATER_GREATER; + YY_BREAK +case 194: +YY_RULE_SETUP +#line 258 "bfin-lex.l" +return _ASSIGN_ASSIGN; + YY_BREAK +case 195: +YY_RULE_SETUP +#line 259 "bfin-lex.l" +return ASSIGN; + YY_BREAK +case 196: +YY_RULE_SETUP +#line 260 "bfin-lex.l" +return _LESS_THAN_ASSIGN; + YY_BREAK +case 197: +YY_RULE_SETUP +#line 261 "bfin-lex.l" +return _LESS_LESS_ASSIGN; + YY_BREAK +case 198: +YY_RULE_SETUP +#line 262 "bfin-lex.l" +return LESS_LESS; + YY_BREAK +case 199: +YY_RULE_SETUP +#line 263 "bfin-lex.l" +return LESS_THAN; + YY_BREAK +case 200: +YY_RULE_SETUP +#line 264 "bfin-lex.l" +return LPAREN; + YY_BREAK +case 201: +YY_RULE_SETUP +#line 265 "bfin-lex.l" +return RPAREN; + YY_BREAK +case 202: +YY_RULE_SETUP +#line 266 "bfin-lex.l" +return COLON; + YY_BREAK +case 203: +YY_RULE_SETUP +#line 267 "bfin-lex.l" +return SLASH; + YY_BREAK +case 204: +YY_RULE_SETUP +#line 268 "bfin-lex.l" +return _MINUS_ASSIGN; + YY_BREAK +case 205: +YY_RULE_SETUP +#line 269 "bfin-lex.l" +return _PLUS_BAR_PLUS; + YY_BREAK +case 206: +YY_RULE_SETUP +#line 270 "bfin-lex.l" +return _MINUS_BAR_PLUS; + YY_BREAK +case 207: +YY_RULE_SETUP +#line 271 "bfin-lex.l" +return _PLUS_BAR_MINUS; + YY_BREAK +case 208: +YY_RULE_SETUP +#line 272 "bfin-lex.l" +return _MINUS_BAR_MINUS; + YY_BREAK +case 209: +YY_RULE_SETUP +#line 273 "bfin-lex.l" +return _MINUS_MINUS; + YY_BREAK +case 210: +YY_RULE_SETUP +#line 274 "bfin-lex.l" +return MINUS; + YY_BREAK +case 211: +YY_RULE_SETUP +#line 275 "bfin-lex.l" +return COMMA; + YY_BREAK +case 212: +YY_RULE_SETUP +#line 276 "bfin-lex.l" +return _PLUS_ASSIGN; + YY_BREAK +case 213: +YY_RULE_SETUP +#line 277 "bfin-lex.l" +return _PLUS_PLUS; + YY_BREAK +case 214: +YY_RULE_SETUP +#line 278 "bfin-lex.l" +return PLUS; + YY_BREAK +case 215: +YY_RULE_SETUP +#line 279 "bfin-lex.l" +return _STAR_ASSIGN; + YY_BREAK +case 216: +YY_RULE_SETUP +#line 280 "bfin-lex.l" +return STAR; + YY_BREAK +case 217: +YY_RULE_SETUP +#line 281 "bfin-lex.l" +return _AMPERSAND_ASSIGN; + YY_BREAK +case 218: +YY_RULE_SETUP +#line 282 "bfin-lex.l" +return AMPERSAND; + YY_BREAK +case 219: +YY_RULE_SETUP +#line 283 "bfin-lex.l" +return PERCENT; + YY_BREAK +case 220: +YY_RULE_SETUP +#line 284 "bfin-lex.l" +return BANG; + YY_BREAK +case 221: +YY_RULE_SETUP +#line 285 "bfin-lex.l" +return SEMICOLON; + YY_BREAK +case 222: +YY_RULE_SETUP +#line 286 "bfin-lex.l" +return _ASSIGN_BANG; + YY_BREAK +case 223: +YY_RULE_SETUP +#line 287 "bfin-lex.l" +return DOUBLE_BAR; + YY_BREAK +case 224: +YY_RULE_SETUP +#line 288 "bfin-lex.l" +return AT; + YY_BREAK +case 225: +YY_RULE_SETUP +#line 289 "bfin-lex.l" +return PREFETCH; + YY_BREAK +case 226: +YY_RULE_SETUP +#line 290 "bfin-lex.l" +return UNLINK; + YY_BREAK +case 227: +YY_RULE_SETUP +#line 291 "bfin-lex.l" +return LINK; + YY_BREAK +case 228: +YY_RULE_SETUP +#line 292 "bfin-lex.l" +return IDLE; + YY_BREAK +case 229: +YY_RULE_SETUP +#line 293 "bfin-lex.l" +return IFLUSH; + YY_BREAK +case 230: +YY_RULE_SETUP +#line 294 "bfin-lex.l" +return FLUSHINV; + YY_BREAK +case 231: +YY_RULE_SETUP +#line 295 "bfin-lex.l" +return FLUSH; + YY_BREAK +case 232: +YY_RULE_SETUP +#line 296 "bfin-lex.l" +{ + yylval.value = parse_int (&yytext); + return NUMBER; + } + YY_BREAK +case 233: +YY_RULE_SETUP +#line 300 "bfin-lex.l" +{ + yylval.symbol = symbol_find_or_make (yytext); + symbol_mark_used (yylval.symbol); + return SYMBOL; + } + YY_BREAK +case 234: +YY_RULE_SETUP +#line 305 "bfin-lex.l" +{ + char *name; + char *ref = strdup (yytext); + if (ref[1] == 'b' || ref[1] == 'B') + { + name = fb_label_name ((int) (ref[0] - '0'), 0); + yylval.symbol = symbol_find (name); + + if ((yylval.symbol != NULL) + && (S_IS_DEFINED (yylval.symbol))) + return SYMBOL; + as_bad ("backward reference to unknown label %d:", + (int) (ref[0] - '0')); + } + else if (ref[1] == 'f' || ref[1] == 'F') + { + /* Forward reference. Expect symbol to be undefined or + unknown. undefined: seen it before. unknown: never seen + it before. + + Construct a local label name, then an undefined symbol. + Just return it as never seen before. */ + + name = fb_label_name ((int) (ref[0] - '0'), 1); + yylval.symbol = symbol_find_or_make (name); + /* We have no need to check symbol properties. */ + return SYMBOL; + } + } + YY_BREAK +case 235: +/* rule 235 can match eol */ +YY_RULE_SETUP +#line 334 "bfin-lex.l" +; + YY_BREAK +case 236: +YY_RULE_SETUP +#line 335 "bfin-lex.l" +; + YY_BREAK +case 237: +YY_RULE_SETUP +#line 336 "bfin-lex.l" +return yytext[0]; + YY_BREAK +case 238: +YY_RULE_SETUP +#line 337 "bfin-lex.l" +ECHO; + YY_BREAK +#line 2337 "bfin-lex.c" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(KEYWORD): + 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_LVALUE->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_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->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 (void) +{ + register char *dest = YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* 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. */ + yyrealloc((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_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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 (void) +{ + 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 >= 559 ) + 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 ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + 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 >= 559 ) + 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 == 558); + + return yy_is_jam ? 0 : yy_current_state; +} + + static void yyunput (int c, register char * yy_bp ) +{ + register char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + register char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#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_LVALUE->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 ); + + /*FALLTHROUGH*/ + + 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 /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + 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_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = 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; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(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 *) yyalloc(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; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ); + + yyfree((void *) b ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer(b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + 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( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + int num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + 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) yyalloc(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; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_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; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg ) +{ + (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. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param line_number + * + */ +void yyset_lineno (int line_number ) +{ + + yylineno = line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str ) +{ + yyin = in_str ; +} + +void yyset_out (FILE * out_str ) +{ + yyout = out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int bdebug ) +{ + yy_flex_debug = bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = 0; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = (char *) 0; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s ) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + /* 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 *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 337 "bfin-lex.l" + + +static long parse_int (char **end) +{ + char fmt = '\0'; + int not_done = 1; + int shiftvalue = 0; + char * char_bag; + long value = 0; + char c; + char *arg = *end; + + while (*arg && *arg == ' ') + arg++; + + switch (*arg) + { + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + fmt = 'd'; + break; + + case '0': /* Accept different formated integers hex octal and binary. */ + { + c = *++arg; + arg++; + if (c == 'x' || c == 'X') /* Hex input. */ + fmt = 'h'; + else if (c == 'b' || c == 'B') + fmt = 'b'; + else if (c == '.') + fmt = 'f'; + else + { /* Octal. */ + arg--; + fmt = 'o'; + } + break; + } + + case 'd': + case 'D': + case 'h': + case 'H': + case 'o': + case 'O': + case 'b': + case 'B': + case 'f': + case 'F': + { + fmt = *arg++; + if (*arg == '#') + arg++; + } + } + + switch (fmt) + { + case 'h': + case 'H': + shiftvalue = 4; + char_bag = "0123456789ABCDEFabcdef"; + break; + + case 'o': + case 'O': + shiftvalue = 3; + char_bag = "01234567"; + break; + + case 'b': + case 'B': + shiftvalue = 1; + char_bag = "01"; + break; + +/* The assembler allows for fractional constants to be created + by either the 0.xxxx or the f#xxxx format + + i.e. 0.5 would result in 0x4000 + + note .5 would result in the identifier .5. + + The assembler converts to fractional format 1.15 by the simple rule: + + value = (short) (finput * (1 << 15)). */ + + case 'f': + case 'F': + { + float fval = 0.0; + float pos = 10.0; + while (1) + { + int c; + c = *arg++; + + if (c >= '0' && c <= '9') + { + float digit = (c - '0') / pos; + fval = fval + digit; + pos = pos * 10.0; + } + else + { + *--arg = c; + value = (short) (fval * (1 << 15)); + break; + } + } + *end = arg+1; + return value; + } + + case 'd': + case 'D': + default: + { + while (1) + { + int c; + c = *arg++; + if (c >= '0' && c <= '9') + value = (value * 10) + (c - '0'); + else + { + /* Constants that are suffixed with k|K are multiplied by 1024 + This suffix is only allowed on decimal constants. */ + if (c == 'k' || c == 'K') + value *= 1024; + else + *--arg = c; + break; + } + } + *end = arg+1; + return value; + } + } + + while (not_done) + { + char c; + c = *arg++; + if (c == 0 || !index (char_bag, c)) + { + not_done = 0; + *--arg = c; + } + else + { + if (c >= 'a' && c <= 'z') + c = c - ('a' - '9') + 1; + else if (c >= 'A' && c <= 'Z') + c = c - ('A' - '9') + 1; + + c -= '0'; + value = (value << shiftvalue) + c; + } + } + *end = arg+1; + return value; +} + + +static int parse_reg (Register *r, int cl, char *rt) +{ + r->regno = cl | (rt[1] - '0'); + return REG; +} + +static int parse_halfreg (Register *r, int cl, char *rt) +{ + r->regno = cl | (rt[1] - '0'); + + switch (rt[3]) + { + case 'b': + case 'B': + return BYTE_DREG; + + case 'l': + case 'L': + break; + + case 'h': + case 'H': + r->regno |= F_REG_HIGH; + break; + } + + return HALF_REG; +} + +/* Our start state is KEYWORD as we have + command keywords such as PREFETCH. */ + +void +set_start_state (void) +{ + BEGIN KEYWORD; +} + + +#ifndef yywrap +int +yywrap () +{ + return 1; +} +#endif + diff --git a/gas/bfin-parse.c b/gas/bfin-parse.c new file mode 100644 index 000000000..5305e0713 --- /dev/null +++ b/gas/bfin-parse.c @@ -0,0 +1,7659 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + BYTEOP16P = 258, + BYTEOP16M = 259, + BYTEOP1P = 260, + BYTEOP2P = 261, + BYTEOP2M = 262, + BYTEOP3P = 263, + BYTEUNPACK = 264, + BYTEPACK = 265, + PACK = 266, + SAA = 267, + ALIGN8 = 268, + ALIGN16 = 269, + ALIGN24 = 270, + VIT_MAX = 271, + EXTRACT = 272, + DEPOSIT = 273, + EXPADJ = 274, + SEARCH = 275, + ONES = 276, + SIGN = 277, + SIGNBITS = 278, + LINK = 279, + UNLINK = 280, + REG = 281, + PC = 282, + CCREG = 283, + BYTE_DREG = 284, + REG_A_DOUBLE_ZERO = 285, + REG_A_DOUBLE_ONE = 286, + A_ZERO_DOT_L = 287, + A_ZERO_DOT_H = 288, + A_ONE_DOT_L = 289, + A_ONE_DOT_H = 290, + HALF_REG = 291, + NOP = 292, + RTI = 293, + RTS = 294, + RTX = 295, + RTN = 296, + RTE = 297, + HLT = 298, + IDLE = 299, + STI = 300, + CLI = 301, + CSYNC = 302, + SSYNC = 303, + EMUEXCPT = 304, + RAISE = 305, + EXCPT = 306, + LSETUP = 307, + LOOP = 308, + LOOP_BEGIN = 309, + LOOP_END = 310, + DISALGNEXCPT = 311, + JUMP = 312, + JUMP_DOT_S = 313, + JUMP_DOT_L = 314, + CALL = 315, + ABORT = 316, + NOT = 317, + TILDA = 318, + BANG = 319, + AMPERSAND = 320, + BAR = 321, + PERCENT = 322, + CARET = 323, + BXOR = 324, + MINUS = 325, + PLUS = 326, + STAR = 327, + SLASH = 328, + NEG = 329, + MIN = 330, + MAX = 331, + ABS = 332, + DOUBLE_BAR = 333, + _PLUS_BAR_PLUS = 334, + _PLUS_BAR_MINUS = 335, + _MINUS_BAR_PLUS = 336, + _MINUS_BAR_MINUS = 337, + _MINUS_MINUS = 338, + _PLUS_PLUS = 339, + SHIFT = 340, + LSHIFT = 341, + ASHIFT = 342, + BXORSHIFT = 343, + _GREATER_GREATER_GREATER_THAN_ASSIGN = 344, + ROT = 345, + LESS_LESS = 346, + GREATER_GREATER = 347, + _GREATER_GREATER_GREATER = 348, + _LESS_LESS_ASSIGN = 349, + _GREATER_GREATER_ASSIGN = 350, + DIVS = 351, + DIVQ = 352, + ASSIGN = 353, + _STAR_ASSIGN = 354, + _BAR_ASSIGN = 355, + _CARET_ASSIGN = 356, + _AMPERSAND_ASSIGN = 357, + _MINUS_ASSIGN = 358, + _PLUS_ASSIGN = 359, + _ASSIGN_BANG = 360, + _LESS_THAN_ASSIGN = 361, + _ASSIGN_ASSIGN = 362, + GE = 363, + LT = 364, + LE = 365, + GT = 366, + LESS_THAN = 367, + FLUSHINV = 368, + FLUSH = 369, + IFLUSH = 370, + PREFETCH = 371, + PRNT = 372, + OUTC = 373, + WHATREG = 374, + TESTSET = 375, + ASL = 376, + ASR = 377, + B = 378, + W = 379, + NS = 380, + S = 381, + CO = 382, + SCO = 383, + TH = 384, + TL = 385, + BP = 386, + BREV = 387, + X = 388, + Z = 389, + M = 390, + MMOD = 391, + R = 392, + RND = 393, + RNDL = 394, + RNDH = 395, + RND12 = 396, + RND20 = 397, + V = 398, + LO = 399, + HI = 400, + BITTGL = 401, + BITCLR = 402, + BITSET = 403, + BITTST = 404, + BITMUX = 405, + DBGAL = 406, + DBGAH = 407, + DBGHALT = 408, + DBG = 409, + DBGA = 410, + DBGCMPLX = 411, + IF = 412, + COMMA = 413, + BY = 414, + COLON = 415, + SEMICOLON = 416, + RPAREN = 417, + LPAREN = 418, + LBRACK = 419, + RBRACK = 420, + STATUS_REG = 421, + MNOP = 422, + SYMBOL = 423, + NUMBER = 424, + GOT = 425, + GOT17M4 = 426, + FUNCDESC_GOT17M4 = 427, + AT = 428, + PLTPC = 429 + }; +#endif +/* Tokens. */ +#define BYTEOP16P 258 +#define BYTEOP16M 259 +#define BYTEOP1P 260 +#define BYTEOP2P 261 +#define BYTEOP2M 262 +#define BYTEOP3P 263 +#define BYTEUNPACK 264 +#define BYTEPACK 265 +#define PACK 266 +#define SAA 267 +#define ALIGN8 268 +#define ALIGN16 269 +#define ALIGN24 270 +#define VIT_MAX 271 +#define EXTRACT 272 +#define DEPOSIT 273 +#define EXPADJ 274 +#define SEARCH 275 +#define ONES 276 +#define SIGN 277 +#define SIGNBITS 278 +#define LINK 279 +#define UNLINK 280 +#define REG 281 +#define PC 282 +#define CCREG 283 +#define BYTE_DREG 284 +#define REG_A_DOUBLE_ZERO 285 +#define REG_A_DOUBLE_ONE 286 +#define A_ZERO_DOT_L 287 +#define A_ZERO_DOT_H 288 +#define A_ONE_DOT_L 289 +#define A_ONE_DOT_H 290 +#define HALF_REG 291 +#define NOP 292 +#define RTI 293 +#define RTS 294 +#define RTX 295 +#define RTN 296 +#define RTE 297 +#define HLT 298 +#define IDLE 299 +#define STI 300 +#define CLI 301 +#define CSYNC 302 +#define SSYNC 303 +#define EMUEXCPT 304 +#define RAISE 305 +#define EXCPT 306 +#define LSETUP 307 +#define LOOP 308 +#define LOOP_BEGIN 309 +#define LOOP_END 310 +#define DISALGNEXCPT 311 +#define JUMP 312 +#define JUMP_DOT_S 313 +#define JUMP_DOT_L 314 +#define CALL 315 +#define ABORT 316 +#define NOT 317 +#define TILDA 318 +#define BANG 319 +#define AMPERSAND 320 +#define BAR 321 +#define PERCENT 322 +#define CARET 323 +#define BXOR 324 +#define MINUS 325 +#define PLUS 326 +#define STAR 327 +#define SLASH 328 +#define NEG 329 +#define MIN 330 +#define MAX 331 +#define ABS 332 +#define DOUBLE_BAR 333 +#define _PLUS_BAR_PLUS 334 +#define _PLUS_BAR_MINUS 335 +#define _MINUS_BAR_PLUS 336 +#define _MINUS_BAR_MINUS 337 +#define _MINUS_MINUS 338 +#define _PLUS_PLUS 339 +#define SHIFT 340 +#define LSHIFT 341 +#define ASHIFT 342 +#define BXORSHIFT 343 +#define _GREATER_GREATER_GREATER_THAN_ASSIGN 344 +#define ROT 345 +#define LESS_LESS 346 +#define GREATER_GREATER 347 +#define _GREATER_GREATER_GREATER 348 +#define _LESS_LESS_ASSIGN 349 +#define _GREATER_GREATER_ASSIGN 350 +#define DIVS 351 +#define DIVQ 352 +#define ASSIGN 353 +#define _STAR_ASSIGN 354 +#define _BAR_ASSIGN 355 +#define _CARET_ASSIGN 356 +#define _AMPERSAND_ASSIGN 357 +#define _MINUS_ASSIGN 358 +#define _PLUS_ASSIGN 359 +#define _ASSIGN_BANG 360 +#define _LESS_THAN_ASSIGN 361 +#define _ASSIGN_ASSIGN 362 +#define GE 363 +#define LT 364 +#define LE 365 +#define GT 366 +#define LESS_THAN 367 +#define FLUSHINV 368 +#define FLUSH 369 +#define IFLUSH 370 +#define PREFETCH 371 +#define PRNT 372 +#define OUTC 373 +#define WHATREG 374 +#define TESTSET 375 +#define ASL 376 +#define ASR 377 +#define B 378 +#define W 379 +#define NS 380 +#define S 381 +#define CO 382 +#define SCO 383 +#define TH 384 +#define TL 385 +#define BP 386 +#define BREV 387 +#define X 388 +#define Z 389 +#define M 390 +#define MMOD 391 +#define R 392 +#define RND 393 +#define RNDL 394 +#define RNDH 395 +#define RND12 396 +#define RND20 397 +#define V 398 +#define LO 399 +#define HI 400 +#define BITTGL 401 +#define BITCLR 402 +#define BITSET 403 +#define BITTST 404 +#define BITMUX 405 +#define DBGAL 406 +#define DBGAH 407 +#define DBGHALT 408 +#define DBG 409 +#define DBGA 410 +#define DBGCMPLX 411 +#define IF 412 +#define COMMA 413 +#define BY 414 +#define COLON 415 +#define SEMICOLON 416 +#define RPAREN 417 +#define LPAREN 418 +#define LBRACK 419 +#define RBRACK 420 +#define STATUS_REG 421 +#define MNOP 422 +#define SYMBOL 423 +#define NUMBER 424 +#define GOT 425 +#define GOT17M4 426 +#define FUNCDESC_GOT17M4 427 +#define AT 428 +#define PLTPC 429 + + + + +/* Copy the first part of user declarations. */ +#line 21 "bfin-parse.y" + + +#include "as.h" +#include + +#include "bfin-aux.h" // opcode generating auxiliaries +#include "libbfd.h" +#include "elf/common.h" +#include "elf/bfin.h" + +#define DSP32ALU(aopcde, HL, dst1, dst0, src0, src1, s, x, aop) \ + bfin_gen_dsp32alu (HL, aopcde, aop, s, x, dst0, dst1, src0, src1) + +#define DSP32MAC(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \ + bfin_gen_dsp32mac (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \ + dst, src0, src1, w0) + +#define DSP32MULT(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \ + bfin_gen_dsp32mult (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \ + dst, src0, src1, w0) + +#define DSP32SHIFT(sopcde, dst0, src0, src1, sop, hls) \ + bfin_gen_dsp32shift (sopcde, dst0, src0, src1, sop, hls) + +#define DSP32SHIFTIMM(sopcde, dst0, immag, src1, sop, hls) \ + bfin_gen_dsp32shiftimm (sopcde, dst0, immag, src1, sop, hls) + +#define LDIMMHALF_R(reg, h, s, z, hword) \ + bfin_gen_ldimmhalf (reg, h, s, z, hword, 1) + +#define LDIMMHALF_R5(reg, h, s, z, hword) \ + bfin_gen_ldimmhalf (reg, h, s, z, hword, 2) + +#define LDSTIDXI(ptr, reg, w, sz, z, offset) \ + bfin_gen_ldstidxi (ptr, reg, w, sz, z, offset) + +#define LDST(ptr, reg, aop, sz, z, w) \ + bfin_gen_ldst (ptr, reg, aop, sz, z, w) + +#define LDSTII(ptr, reg, offset, w, op) \ + bfin_gen_ldstii (ptr, reg, offset, w, op) + +#define DSPLDST(i, m, reg, aop, w) \ + bfin_gen_dspldst (i, reg, aop, w, m) + +#define LDSTPMOD(ptr, reg, idx, aop, w) \ + bfin_gen_ldstpmod (ptr, reg, aop, w, idx) + +#define LDSTIIFP(offset, reg, w) \ + bfin_gen_ldstiifp (reg, offset, w) + +#define LOGI2OP(dst, src, opc) \ + bfin_gen_logi2op (opc, src, dst.regno & CODE_MASK) + +#define ALU2OP(dst, src, opc) \ + bfin_gen_alu2op (dst, src, opc) + +#define BRCC(t, b, offset) \ + bfin_gen_brcc (t, b, offset) + +#define UJUMP(offset) \ + bfin_gen_ujump (offset) + +#define PROGCTRL(prgfunc, poprnd) \ + bfin_gen_progctrl (prgfunc, poprnd) + +#define PUSHPOPMULTIPLE(dr, pr, d, p, w) \ + bfin_gen_pushpopmultiple (dr, pr, d, p, w) + +#define PUSHPOPREG(reg, w) \ + bfin_gen_pushpopreg (reg, w) + +#define CALLA(addr, s) \ + bfin_gen_calla (addr, s) + +#define LINKAGE(r, framesize) \ + bfin_gen_linkage (r, framesize) + +#define COMPI2OPD(dst, src, op) \ + bfin_gen_compi2opd (dst, src, op) + +#define COMPI2OPP(dst, src, op) \ + bfin_gen_compi2opp (dst, src, op) + +#define DAGMODIK(i, op) \ + bfin_gen_dagmodik (i, op) + +#define DAGMODIM(i, m, op, br) \ + bfin_gen_dagmodim (i, m, op, br) + +#define COMP3OP(dst, src0, src1, opc) \ + bfin_gen_comp3op (src0, src1, dst, opc) + +#define PTR2OP(dst, src, opc) \ + bfin_gen_ptr2op (dst, src, opc) + +#define CCFLAG(x, y, opc, i, g) \ + bfin_gen_ccflag (x, y, opc, i, g) + +#define CCMV(src, dst, t) \ + bfin_gen_ccmv (src, dst, t) + +#define CACTRL(reg, a, op) \ + bfin_gen_cactrl (reg, a, op) + +#define LOOPSETUP(soffset, c, rop, eoffset, reg) \ + bfin_gen_loopsetup (soffset, c, rop, eoffset, reg) + +#define HL2(r1, r0) (IS_H (r1) << 1 | IS_H (r0)) +#define IS_RANGE(bits, expr, sign, mul) \ + value_match(expr, bits, sign, mul, 1) +#define IS_URANGE(bits, expr, sign, mul) \ + value_match(expr, bits, sign, mul, 0) +#define IS_CONST(expr) (expr->type == Expr_Node_Constant) +#define IS_RELOC(expr) (expr->type != Expr_Node_Constant) +#define IS_IMM(expr, bits) value_match (expr, bits, 0, 1, 1) +#define IS_UIMM(expr, bits) value_match (expr, bits, 0, 1, 0) + +#define IS_PCREL4(expr) \ + (value_match (expr, 4, 0, 2, 0)) + +#define IS_LPPCREL10(expr) \ + (value_match (expr, 10, 0, 2, 0)) + +#define IS_PCREL10(expr) \ + (value_match (expr, 10, 0, 2, 1)) + +#define IS_PCREL12(expr) \ + (value_match (expr, 12, 0, 2, 1)) + +#define IS_PCREL24(expr) \ + (value_match (expr, 24, 0, 2, 1)) + + +static int value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned); + +extern FILE *errorf; +extern INSTR_T insn; + +static Expr_Node *binary (Expr_Op_Type, Expr_Node *, Expr_Node *); +static Expr_Node *unary (Expr_Op_Type, Expr_Node *); + +static void notethat (char *format, ...); + +char *current_inputline; +extern char *yytext; +int yyerror (char *msg); + +void error (char *format, ...) +{ + va_list ap; + char buffer[2000]; + + va_start (ap, format); + vsprintf (buffer, format, ap); + va_end (ap); + + as_bad (buffer); +} + +int +yyerror (char *msg) +{ + if (msg[0] == '\0') + error ("%s", msg); + + else if (yytext[0] != ';') + error ("%s. Input text was %s.", msg, yytext); + else + error ("%s.", msg); + + return -1; +} + +static int +in_range_p (Expr_Node *expr, int from, int to, unsigned int mask) +{ + int val = EXPR_VALUE (expr); + if (expr->type != Expr_Node_Constant) + return 0; + if (val < from || val > to) + return 0; + return (val & mask) == 0; +} + +extern int yylex (void); + +#define imm3(x) EXPR_VALUE (x) +#define imm4(x) EXPR_VALUE (x) +#define uimm4(x) EXPR_VALUE (x) +#define imm5(x) EXPR_VALUE (x) +#define uimm5(x) EXPR_VALUE (x) +#define imm6(x) EXPR_VALUE (x) +#define imm7(x) EXPR_VALUE (x) +#define imm16(x) EXPR_VALUE (x) +#define uimm16s4(x) ((EXPR_VALUE (x)) >> 2) +#define uimm16(x) EXPR_VALUE (x) + +/* Return true if a value is inside a range. */ +#define IN_RANGE(x, low, high) \ + (((EXPR_VALUE(x)) >= (low)) && (EXPR_VALUE(x)) <= ((high))) + +/* Auxiliary functions. */ + +static void +neg_value (Expr_Node *expr) +{ + expr->value.i_value = -expr->value.i_value; +} + +static int +valid_dreg_pair (Register *reg1, Expr_Node *reg2) +{ + if (!IS_DREG (*reg1)) + { + yyerror ("Dregs expected"); + return 0; + } + + if (reg1->regno != 1 && reg1->regno != 3) + { + yyerror ("Bad register pair"); + return 0; + } + + if (imm7 (reg2) != reg1->regno - 1) + { + yyerror ("Bad register pair"); + return 0; + } + + reg1->regno--; + return 1; +} + +static int +check_multiply_halfregs (Macfunc *aa, Macfunc *ab) +{ + if ((!REG_EQUAL (aa->s0, ab->s0) && !REG_EQUAL (aa->s0, ab->s1)) + || (!REG_EQUAL (aa->s1, ab->s1) && !REG_EQUAL (aa->s1, ab->s0))) + return yyerror ("Source multiplication register mismatch"); + + return 0; +} + + +/* Check (vector) mac funcs and ops. */ + +static int +check_macfuncs (Macfunc *aa, Opt_mode *opa, + Macfunc *ab, Opt_mode *opb) +{ + /* Variables for swapping. */ + Macfunc mtmp; + Opt_mode otmp; + + /* If a0macfunc comes before a1macfunc, swap them. */ + + if (aa->n == 0) + { + /* (M) is not allowed here. */ + if (opa->MM != 0) + return yyerror ("(M) not allowed with A0MAC"); + if (ab->n != 1) + return yyerror ("Vector AxMACs can't be same"); + + mtmp = *aa; *aa = *ab; *ab = mtmp; + otmp = *opa; *opa = *opb; *opb = otmp; + } + else + { + if (opb->MM != 0) + return yyerror ("(M) not allowed with A0MAC"); + if (opa->mod != 0) + return yyerror ("Bad opt mode"); + if (ab->n != 0) + return yyerror ("Vector AxMACs can't be same"); + } + + /* If both ops are one of 0, 1, or 2, we have multiply_halfregs in both + assignment_or_macfuncs. */ + if (aa->op < 3 && aa->op >=0 + && ab->op < 3 && ab->op >= 0) + { + if (check_multiply_halfregs (aa, ab) < 0) + return -1; + } + else + { + /* Only one of the assign_macfuncs has a half reg multiply + Evil trick: Just 'OR' their source register codes: + We can do that, because we know they were initialized to 0 + in the rules that don't use multiply_halfregs. */ + aa->s0.regno |= (ab->s0.regno & CODE_MASK); + aa->s1.regno |= (ab->s1.regno & CODE_MASK); + } + + if (aa->w == ab->w && aa->P != ab->P) + { + return yyerror ("macfuncs must differ"); + if (aa->w && (aa->dst.regno - ab->dst.regno != 1)) + return yyerror ("Destination Dregs must differ by one"); + } + /* We assign to full regs, thus obey even/odd rules. */ + else if ((aa->w && aa->P && IS_EVEN (aa->dst)) + || (ab->w && ab->P && !IS_EVEN (ab->dst))) + return yyerror ("Even/Odd register assignment mismatch"); + /* We assign to half regs, thus obey hi/low rules. */ + else if ( (aa->w && !aa->P && !IS_H (aa->dst)) + || (ab->w && !aa->P && IS_H (ab->dst))) + return yyerror ("High/Low register assignment mismatch"); + + /* Make sure first macfunc has got both P flags ORed. */ + aa->P |= ab->P; + + /* Make sure mod flags get ORed, too. */ + opb->mod |= opa->mod; + return 0; +} + + +static int +is_group1 (INSTR_T x) +{ + /* Group1 is dpsLDST, LDSTpmod, LDST, LDSTiiFP, LDSTii. */ + if ((x->value & 0xc000) == 0x8000 || (x->value == 0x0000)) + return 1; + + return 0; +} + +static int +is_group2 (INSTR_T x) +{ + if ((((x->value & 0xfc00) == 0x9c00) /* dspLDST. */ + && !((x->value & 0xfde0) == 0x9c60) /* dagMODim. */ + && !((x->value & 0xfde0) == 0x9ce0) /* dagMODim with bit rev. */ + && !((x->value & 0xfde0) == 0x9d60)) /* pick dagMODik. */ + || (x->value == 0x0000)) + return 1; + return 0; +} + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 366 "bfin-parse.y" +{ + INSTR_T instr; + Expr_Node *expr; + SYMBOL_T symbol; + long value; + Register reg; + Macfunc macfunc; + struct { int r0; int s0; int x0; int aop; } modcodes; + struct { int r0; } r0; + Opt_mode mod; +} +/* Line 187 of yacc.c. */ +#line 801 "bfin-parse.c" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 814 "bfin-parse.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 145 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 1278 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 175 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 47 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 348 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 1021 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 429 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 4, 6, 9, 16, 21, 23, 25, + 28, 34, 36, 43, 50, 54, 58, 76, 94, 106, + 118, 130, 143, 156, 169, 175, 179, 183, 187, 196, + 210, 223, 237, 251, 265, 274, 292, 299, 309, 313, + 320, 324, 330, 337, 346, 355, 358, 361, 366, 370, + 373, 378, 382, 389, 394, 402, 410, 414, 418, 425, + 429, 434, 438, 442, 446, 458, 470, 480, 486, 492, + 502, 508, 514, 521, 528, 534, 540, 546, 553, 560, + 566, 568, 572, 576, 580, 584, 589, 594, 604, 614, + 620, 628, 633, 640, 646, 653, 661, 671, 680, 689, + 701, 711, 716, 722, 729, 737, 744, 749, 756, 762, + 769, 776, 781, 790, 801, 812, 825, 831, 838, 844, + 851, 856, 861, 866, 874, 884, 894, 904, 911, 918, + 925, 934, 943, 950, 956, 962, 971, 976, 984, 986, + 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1007, + 1010, 1015, 1020, 1027, 1034, 1037, 1040, 1045, 1048, 1051, + 1054, 1057, 1060, 1063, 1070, 1077, 1083, 1088, 1092, 1096, + 1100, 1104, 1108, 1112, 1117, 1120, 1125, 1128, 1133, 1136, + 1141, 1144, 1152, 1161, 1170, 1178, 1186, 1194, 1204, 1212, + 1221, 1231, 1240, 1247, 1255, 1264, 1274, 1283, 1291, 1299, + 1306, 1318, 1326, 1338, 1346, 1350, 1353, 1355, 1363, 1373, + 1385, 1389, 1395, 1403, 1405, 1408, 1411, 1416, 1418, 1425, + 1432, 1439, 1441, 1443, 1444, 1450, 1456, 1460, 1464, 1468, + 1472, 1473, 1475, 1477, 1479, 1481, 1483, 1484, 1488, 1489, + 1493, 1497, 1498, 1502, 1506, 1512, 1518, 1519, 1523, 1527, + 1528, 1532, 1536, 1537, 1541, 1545, 1549, 1555, 1561, 1562, + 1566, 1567, 1571, 1573, 1575, 1577, 1579, 1580, 1584, 1588, + 1592, 1598, 1604, 1606, 1608, 1610, 1611, 1615, 1616, 1620, + 1625, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, + 1650, 1654, 1658, 1662, 1668, 1674, 1680, 1686, 1690, 1694, + 1700, 1706, 1707, 1709, 1711, 1714, 1717, 1720, 1724, 1726, + 1732, 1738, 1742, 1745, 1748, 1751, 1755, 1757, 1759, 1761, + 1763, 1767, 1771, 1775, 1779, 1781, 1783, 1785, 1787, 1791, + 1793, 1795, 1799, 1801, 1803, 1807, 1810, 1813, 1815, 1819, + 1823, 1827, 1831, 1835, 1839, 1843, 1847, 1851, 1855 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 176, 0, -1, -1, 177, -1, 178, 161, -1, 178, + 78, 178, 78, 178, 161, -1, 178, 78, 178, 161, + -1, 1, -1, 167, -1, 209, 180, -1, 209, 180, + 158, 209, 180, -1, 56, -1, 26, 98, 163, 208, + 179, 162, -1, 36, 98, 163, 208, 179, 162, -1, + 33, 98, 36, -1, 35, 98, 36, -1, 163, 26, + 158, 26, 162, 98, 3, 163, 26, 160, 220, 158, + 26, 160, 220, 162, 193, -1, 163, 26, 158, 26, + 162, 98, 4, 163, 26, 160, 220, 158, 26, 160, + 220, 162, 193, -1, 163, 26, 158, 26, 162, 98, + 9, 26, 160, 220, 193, -1, 163, 26, 158, 26, + 162, 98, 20, 26, 163, 192, 162, -1, 26, 98, + 34, 71, 35, 158, 26, 98, 32, 71, 33, -1, + 26, 98, 179, 71, 179, 158, 26, 98, 179, 70, + 179, 185, -1, 26, 98, 26, 202, 26, 158, 26, + 98, 26, 202, 26, 185, -1, 26, 98, 26, 201, + 26, 158, 26, 98, 26, 201, 26, 186, -1, 26, + 98, 77, 26, 190, -1, 206, 77, 179, -1, 32, + 98, 36, -1, 34, 98, 36, -1, 26, 98, 195, + 163, 26, 158, 26, 162, -1, 26, 98, 5, 163, + 26, 160, 220, 158, 26, 160, 220, 162, 194, -1, + 26, 98, 5, 163, 26, 160, 220, 158, 26, 160, + 220, 162, -1, 26, 98, 6, 163, 26, 160, 220, + 158, 26, 160, 220, 162, 203, -1, 26, 98, 7, + 163, 26, 160, 220, 158, 26, 160, 220, 162, 203, + -1, 26, 98, 8, 163, 26, 160, 220, 158, 26, + 160, 220, 162, 204, -1, 26, 98, 10, 163, 26, + 158, 26, 162, -1, 36, 98, 36, 98, 22, 163, + 36, 162, 72, 36, 71, 22, 163, 36, 162, 72, + 36, -1, 26, 98, 26, 202, 26, 185, -1, 26, + 98, 200, 163, 26, 158, 26, 162, 190, -1, 206, + 70, 179, -1, 36, 98, 36, 202, 36, 185, -1, + 206, 206, 220, -1, 206, 179, 163, 126, 162, -1, + 36, 98, 26, 163, 138, 162, -1, 36, 98, 26, + 202, 26, 163, 141, 162, -1, 36, 98, 26, 202, + 26, 163, 142, 162, -1, 206, 179, -1, 206, 26, + -1, 26, 98, 36, 187, -1, 36, 98, 220, -1, + 206, 220, -1, 26, 98, 220, 188, -1, 36, 98, + 26, -1, 26, 98, 26, 201, 26, 184, -1, 26, + 98, 29, 187, -1, 206, 77, 179, 158, 206, 77, + 179, -1, 206, 70, 179, 158, 206, 70, 179, -1, + 207, 179, 196, -1, 26, 103, 220, -1, 26, 104, + 26, 163, 132, 162, -1, 26, 103, 26, -1, 179, + 104, 179, 196, -1, 26, 104, 26, -1, 26, 104, + 220, -1, 26, 99, 26, -1, 12, 163, 26, 160, + 220, 158, 26, 160, 220, 162, 193, -1, 206, 179, + 163, 126, 162, 158, 206, 179, 163, 126, 162, -1, + 26, 98, 163, 26, 71, 26, 162, 91, 220, -1, + 26, 98, 26, 66, 26, -1, 26, 98, 26, 68, + 26, -1, 26, 98, 26, 71, 163, 26, 91, 220, + 162, -1, 28, 98, 179, 107, 179, -1, 28, 98, + 179, 112, 179, -1, 28, 98, 26, 112, 26, 197, + -1, 28, 98, 26, 112, 220, 197, -1, 28, 98, + 26, 107, 26, -1, 28, 98, 26, 107, 220, -1, + 28, 98, 179, 106, 179, -1, 28, 98, 26, 106, + 26, 197, -1, 28, 98, 26, 106, 220, 197, -1, + 26, 98, 26, 65, 26, -1, 213, -1, 26, 98, + 26, -1, 28, 98, 26, -1, 26, 98, 28, -1, + 28, 105, 28, -1, 36, 98, 211, 180, -1, 26, + 98, 211, 180, -1, 36, 98, 211, 180, 158, 36, + 98, 211, 180, -1, 26, 98, 211, 180, 158, 26, + 98, 211, 180, -1, 206, 87, 179, 159, 36, -1, + 36, 98, 87, 36, 159, 36, 191, -1, 206, 179, + 91, 220, -1, 26, 98, 26, 91, 220, 189, -1, + 36, 98, 36, 91, 220, -1, 36, 98, 36, 91, + 220, 191, -1, 26, 98, 87, 26, 159, 36, 189, + -1, 36, 98, 19, 163, 26, 158, 36, 162, 190, + -1, 36, 98, 19, 163, 36, 158, 36, 162, -1, + 26, 98, 18, 163, 26, 158, 26, 162, -1, 26, + 98, 18, 163, 26, 158, 26, 162, 163, 133, 162, + -1, 26, 98, 17, 163, 26, 158, 36, 162, 187, + -1, 206, 179, 93, 220, -1, 206, 86, 179, 159, + 36, -1, 36, 98, 86, 36, 159, 36, -1, 26, + 98, 86, 26, 159, 36, 190, -1, 26, 98, 85, + 26, 159, 36, -1, 206, 179, 92, 220, -1, 26, + 98, 26, 92, 220, 190, -1, 36, 98, 36, 92, + 220, -1, 36, 98, 36, 93, 220, 191, -1, 26, + 98, 26, 93, 220, 189, -1, 36, 98, 21, 26, + -1, 26, 98, 11, 163, 36, 158, 36, 162, -1, + 36, 98, 28, 98, 88, 163, 179, 158, 26, 162, + -1, 36, 98, 28, 98, 69, 163, 179, 158, 26, + 162, -1, 36, 98, 28, 98, 69, 163, 179, 158, + 179, 158, 28, 162, -1, 206, 90, 179, 159, 36, + -1, 26, 98, 90, 26, 159, 36, -1, 206, 90, + 179, 159, 220, -1, 26, 98, 90, 26, 159, 220, + -1, 36, 98, 23, 179, -1, 36, 98, 23, 26, + -1, 36, 98, 23, 36, -1, 36, 98, 16, 163, + 26, 162, 181, -1, 26, 98, 16, 163, 26, 158, + 26, 162, 181, -1, 150, 163, 26, 158, 26, 158, + 179, 162, 181, -1, 206, 88, 163, 179, 158, 179, + 158, 28, 162, -1, 147, 163, 26, 158, 220, 162, + -1, 148, 163, 26, 158, 220, 162, -1, 146, 163, + 26, 158, 220, 162, -1, 28, 105, 149, 163, 26, + 158, 220, 162, -1, 28, 98, 149, 163, 26, 158, + 220, 162, -1, 157, 64, 28, 26, 98, 26, -1, + 157, 28, 26, 98, 26, -1, 157, 64, 28, 57, + 220, -1, 157, 64, 28, 57, 220, 163, 131, 162, + -1, 157, 28, 57, 220, -1, 157, 28, 57, 220, + 163, 131, 162, -1, 37, -1, 39, -1, 38, -1, + 40, -1, 41, -1, 42, -1, 44, -1, 47, -1, + 48, -1, 49, -1, 46, 26, -1, 45, 26, -1, + 57, 163, 26, 162, -1, 60, 163, 26, 162, -1, + 60, 163, 27, 71, 26, 162, -1, 57, 163, 27, + 71, 26, 162, -1, 50, 220, -1, 51, 220, -1, + 120, 163, 26, 162, -1, 57, 220, -1, 58, 220, + -1, 59, 220, -1, 59, 218, -1, 60, 220, -1, + 60, 218, -1, 97, 163, 26, 158, 26, 162, -1, + 96, 163, 26, 158, 26, 162, -1, 26, 98, 70, + 26, 189, -1, 26, 98, 63, 26, -1, 26, 95, + 26, -1, 26, 95, 220, -1, 26, 89, 26, -1, + 26, 94, 26, -1, 26, 94, 220, -1, 26, 89, + 220, -1, 114, 164, 26, 165, -1, 114, 199, -1, + 113, 164, 26, 165, -1, 113, 199, -1, 115, 164, + 26, 165, -1, 115, 199, -1, 116, 164, 26, 165, + -1, 116, 199, -1, 123, 164, 26, 205, 165, 98, + 26, -1, 123, 164, 26, 202, 220, 165, 98, 26, + -1, 124, 164, 26, 202, 220, 165, 98, 26, -1, + 124, 164, 26, 205, 165, 98, 26, -1, 124, 164, + 26, 205, 165, 98, 36, -1, 164, 26, 202, 220, + 165, 98, 26, -1, 26, 98, 124, 164, 26, 202, + 220, 165, 187, -1, 36, 98, 124, 164, 26, 205, + 165, -1, 26, 98, 124, 164, 26, 205, 165, 187, + -1, 26, 98, 124, 164, 26, 84, 26, 165, 187, + -1, 36, 98, 124, 164, 26, 84, 26, 165, -1, + 164, 26, 205, 165, 98, 26, -1, 164, 26, 84, + 26, 165, 98, 26, -1, 124, 164, 26, 84, 26, + 165, 98, 36, -1, 26, 98, 123, 164, 26, 202, + 220, 165, 187, -1, 26, 98, 123, 164, 26, 205, + 165, 187, -1, 26, 98, 164, 26, 84, 26, 165, + -1, 26, 98, 164, 26, 202, 217, 165, -1, 26, + 98, 164, 26, 205, 165, -1, 198, 98, 163, 26, + 160, 220, 158, 26, 160, 220, 162, -1, 198, 98, + 163, 26, 160, 220, 162, -1, 163, 26, 160, 220, + 158, 26, 160, 220, 162, 98, 199, -1, 163, 26, + 160, 220, 162, 98, 199, -1, 198, 98, 26, -1, + 24, 220, -1, 25, -1, 52, 163, 220, 158, 220, + 162, 26, -1, 52, 163, 220, 158, 220, 162, 26, + 98, 26, -1, 52, 163, 220, 158, 220, 162, 26, + 98, 26, 92, 220, -1, 53, 220, 26, -1, 53, + 220, 26, 98, 26, -1, 53, 220, 26, 98, 26, + 92, 220, -1, 154, -1, 154, 179, -1, 154, 26, + -1, 156, 163, 26, 162, -1, 153, -1, 155, 163, + 36, 158, 220, 162, -1, 152, 163, 26, 158, 220, + 162, -1, 151, 163, 26, 158, 220, 162, -1, 30, + -1, 31, -1, -1, 163, 135, 158, 136, 162, -1, + 163, 136, 158, 135, 162, -1, 163, 136, 162, -1, + 163, 135, 162, -1, 163, 121, 162, -1, 163, 122, + 162, -1, -1, 126, -1, 127, -1, 128, -1, 121, + -1, 122, -1, -1, 163, 182, 162, -1, -1, 163, + 125, 162, -1, 163, 126, 162, -1, -1, 163, 183, + 162, -1, 163, 182, 162, -1, 163, 183, 158, 182, + 162, -1, 163, 182, 158, 183, 162, -1, -1, 163, + 134, 162, -1, 163, 133, 162, -1, -1, 163, 133, + 162, -1, 163, 134, 162, -1, -1, 163, 125, 162, + -1, 163, 126, 162, -1, 163, 143, 162, -1, 163, + 143, 158, 126, 162, -1, 163, 126, 158, 143, 162, + -1, -1, 163, 143, 162, -1, -1, 163, 126, 162, + -1, 108, -1, 111, -1, 110, -1, 109, -1, -1, + 163, 137, 162, -1, 163, 137, 162, -1, 163, 136, + 162, -1, 163, 136, 158, 137, 162, -1, 163, 137, + 158, 136, 162, -1, 13, -1, 14, -1, 15, -1, + -1, 163, 136, 162, -1, -1, 163, 136, 162, -1, + 164, 83, 26, 165, -1, 164, 26, 84, 165, -1, + 75, -1, 76, -1, 79, -1, 80, -1, 81, -1, + 82, -1, 71, -1, 70, -1, 163, 140, 162, -1, + 163, 129, 162, -1, 163, 139, 162, -1, 163, 130, + 162, -1, 163, 140, 158, 137, 162, -1, 163, 129, + 158, 137, 162, -1, 163, 139, 158, 137, 162, -1, + 163, 130, 158, 137, 162, -1, 163, 144, 162, -1, + 163, 145, 162, -1, 163, 144, 158, 137, 162, -1, + 163, 145, 158, 137, 162, -1, -1, 84, -1, 83, + -1, 179, 98, -1, 179, 103, -1, 179, 104, -1, + 26, 98, 179, -1, 210, -1, 26, 98, 163, 210, + 162, -1, 36, 98, 163, 210, 162, -1, 36, 98, + 179, -1, 206, 211, -1, 208, 211, -1, 207, 211, + -1, 36, 72, 36, -1, 98, -1, 100, -1, 102, + -1, 101, -1, 28, 212, 166, -1, 28, 212, 143, + -1, 166, 212, 28, -1, 143, 212, 28, -1, 168, + -1, 170, -1, 171, -1, 172, -1, 214, 173, 215, + -1, 216, -1, 220, -1, 214, 173, 174, -1, 169, + -1, 214, -1, 163, 221, 162, -1, 63, 221, -1, + 70, 221, -1, 221, -1, 221, 72, 221, -1, 221, + 73, 221, -1, 221, 67, 221, -1, 221, 71, 221, + -1, 221, 70, 221, -1, 221, 91, 221, -1, 221, + 92, 221, -1, 221, 65, 221, -1, 221, 68, 221, + -1, 221, 66, 221, -1, 219, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 567, 567, 568, 580, 582, 615, 642, 653, 657, + 692, 712, 717, 727, 737, 742, 747, 763, 779, 791, + 801, 814, 833, 851, 874, 896, 901, 911, 922, 933, + 947, 962, 978, 994, 1010, 1021, 1035, 1061, 1079, 1084, + 1090, 1102, 1113, 1124, 1135, 1146, 1157, 1168, 1194, 1208, + 1218, 1263, 1282, 1293, 1304, 1315, 1326, 1337, 1353, 1370, + 1386, 1397, 1408, 1439, 1450, 1463, 1474, 1513, 1523, 1533, + 1553, 1563, 1573, 1583, 1594, 1602, 1612, 1622, 1633, 1657, + 1668, 1674, 1685, 1696, 1707, 1715, 1736, 1762, 1791, 1822, + 1836, 1847, 1861, 1895, 1905, 1915, 1940, 1952, 1970, 1981, + 1992, 2003, 2016, 2027, 2038, 2049, 2060, 2071, 2104, 2114, + 2127, 2147, 2158, 2169, 2182, 2195, 2206, 2217, 2228, 2239, + 2249, 2260, 2271, 2283, 2294, 2305, 2316, 2329, 2341, 2353, + 2364, 2375, 2386, 2398, 2410, 2421, 2432, 2443, 2453, 2459, + 2465, 2471, 2477, 2483, 2489, 2495, 2501, 2507, 2513, 2524, + 2535, 2546, 2557, 2568, 2579, 2590, 2596, 2607, 2618, 2629, + 2640, 2651, 2661, 2674, 2682, 2690, 2714, 2725, 2736, 2747, + 2758, 2769, 2781, 2794, 2803, 2814, 2825, 2837, 2848, 2859, + 2870, 2884, 2896, 2911, 2930, 2941, 2959, 2993, 3011, 3028, + 3039, 3050, 3061, 3082, 3101, 3114, 3128, 3140, 3156, 3196, + 3227, 3243, 3262, 3276, 3295, 3311, 3319, 3328, 3339, 3351, + 3365, 3373, 3383, 3395, 3400, 3405, 3411, 3419, 3425, 3431, + 3437, 3450, 3454, 3464, 3468, 3473, 3478, 3483, 3490, 3494, + 3501, 3505, 3510, 3515, 3523, 3527, 3534, 3538, 3546, 3551, + 3557, 3566, 3571, 3577, 3583, 3589, 3598, 3601, 3605, 3612, + 3615, 3619, 3626, 3631, 3637, 3643, 3649, 3654, 3662, 3665, + 3672, 3675, 3682, 3686, 3690, 3694, 3701, 3704, 3711, 3716, + 3723, 3730, 3742, 3746, 3750, 3757, 3760, 3770, 3773, 3782, + 3788, 3797, 3801, 3808, 3812, 3816, 3820, 3827, 3831, 3838, + 3846, 3854, 3862, 3870, 3877, 3884, 3892, 3902, 3907, 3912, + 3917, 3925, 3928, 3932, 3941, 3948, 3955, 3962, 3977, 3983, + 3991, 3999, 4017, 4024, 4031, 4041, 4054, 4058, 4062, 4066, + 4073, 4079, 4085, 4091, 4101, 4110, 4112, 4114, 4118, 4126, + 4130, 4137, 4143, 4149, 4153, 4157, 4161, 4167, 4173, 4177, + 4181, 4185, 4189, 4193, 4197, 4201, 4205, 4209, 4213 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "BYTEOP16P", "BYTEOP16M", "BYTEOP1P", + "BYTEOP2P", "BYTEOP2M", "BYTEOP3P", "BYTEUNPACK", "BYTEPACK", "PACK", + "SAA", "ALIGN8", "ALIGN16", "ALIGN24", "VIT_MAX", "EXTRACT", "DEPOSIT", + "EXPADJ", "SEARCH", "ONES", "SIGN", "SIGNBITS", "LINK", "UNLINK", "REG", + "PC", "CCREG", "BYTE_DREG", "REG_A_DOUBLE_ZERO", "REG_A_DOUBLE_ONE", + "A_ZERO_DOT_L", "A_ZERO_DOT_H", "A_ONE_DOT_L", "A_ONE_DOT_H", "HALF_REG", + "NOP", "RTI", "RTS", "RTX", "RTN", "RTE", "HLT", "IDLE", "STI", "CLI", + "CSYNC", "SSYNC", "EMUEXCPT", "RAISE", "EXCPT", "LSETUP", "LOOP", + "LOOP_BEGIN", "LOOP_END", "DISALGNEXCPT", "JUMP", "JUMP_DOT_S", + "JUMP_DOT_L", "CALL", "ABORT", "NOT", "TILDA", "BANG", "AMPERSAND", + "BAR", "PERCENT", "CARET", "BXOR", "MINUS", "PLUS", "STAR", "SLASH", + "NEG", "MIN", "MAX", "ABS", "DOUBLE_BAR", "_PLUS_BAR_PLUS", + "_PLUS_BAR_MINUS", "_MINUS_BAR_PLUS", "_MINUS_BAR_MINUS", "_MINUS_MINUS", + "_PLUS_PLUS", "SHIFT", "LSHIFT", "ASHIFT", "BXORSHIFT", + "_GREATER_GREATER_GREATER_THAN_ASSIGN", "ROT", "LESS_LESS", + "GREATER_GREATER", "_GREATER_GREATER_GREATER", "_LESS_LESS_ASSIGN", + "_GREATER_GREATER_ASSIGN", "DIVS", "DIVQ", "ASSIGN", "_STAR_ASSIGN", + "_BAR_ASSIGN", "_CARET_ASSIGN", "_AMPERSAND_ASSIGN", "_MINUS_ASSIGN", + "_PLUS_ASSIGN", "_ASSIGN_BANG", "_LESS_THAN_ASSIGN", "_ASSIGN_ASSIGN", + "GE", "LT", "LE", "GT", "LESS_THAN", "FLUSHINV", "FLUSH", "IFLUSH", + "PREFETCH", "PRNT", "OUTC", "WHATREG", "TESTSET", "ASL", "ASR", "B", "W", + "NS", "S", "CO", "SCO", "TH", "TL", "BP", "BREV", "X", "Z", "M", "MMOD", + "R", "RND", "RNDL", "RNDH", "RND12", "RND20", "V", "LO", "HI", "BITTGL", + "BITCLR", "BITSET", "BITTST", "BITMUX", "DBGAL", "DBGAH", "DBGHALT", + "DBG", "DBGA", "DBGCMPLX", "IF", "COMMA", "BY", "COLON", "SEMICOLON", + "RPAREN", "LPAREN", "LBRACK", "RBRACK", "STATUS_REG", "MNOP", "SYMBOL", + "NUMBER", "GOT", "GOT17M4", "FUNCDESC_GOT17M4", "AT", "PLTPC", "$accept", + "statement", "asm", "asm_1", "REG_A", "opt_mode", "asr_asl", "sco", + "asr_asl_0", "amod0", "amod1", "amod2", "xpmod", "xpmod1", "vsmod", + "vmod", "smod", "searchmod", "aligndir", "byteop_mod", "c_align", + "w32_or_nothing", "iu_or_nothing", "reg_with_predec", "reg_with_postinc", + "min_max", "op_bar_op", "plus_minus", "rnd_op", "b3_op", "post_op", + "a_assign", "a_minusassign", "a_plusassign", "assign_macfunc", + "a_macfunc", "multiply_halfregs", "cc_op", "ccstat", "symbol", + "any_gotrel", "got", "got_or_expr", "pltpc", "eterm", "expr", "expr_1", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 175, 176, 176, 177, 177, 177, 177, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 178, 179, 179, 180, 180, 180, 180, 180, 181, 181, + 182, 182, 182, 182, 183, 183, 184, 184, 185, 185, + 185, 186, 186, 186, 186, 186, 187, 187, 187, 188, + 188, 188, 189, 189, 189, 189, 189, 189, 190, 190, + 191, 191, 192, 192, 192, 192, 193, 193, 194, 194, + 194, 194, 195, 195, 195, 196, 196, 197, 197, 198, + 199, 200, 200, 201, 201, 201, 201, 202, 202, 203, + 203, 203, 203, 203, 203, 203, 203, 204, 204, 204, + 204, 205, 205, 205, 206, 207, 208, 209, 209, 209, + 209, 209, 210, 210, 210, 211, 212, 212, 212, 212, + 213, 213, 213, 213, 214, 215, 215, 215, 216, 217, + 217, 218, 219, 219, 219, 219, 219, 220, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 1, 2, 6, 4, 1, 1, 2, + 5, 1, 6, 6, 3, 3, 17, 17, 11, 11, + 11, 12, 12, 12, 5, 3, 3, 3, 8, 13, + 12, 13, 13, 13, 8, 17, 6, 9, 3, 6, + 3, 5, 6, 8, 8, 2, 2, 4, 3, 2, + 4, 3, 6, 4, 7, 7, 3, 3, 6, 3, + 4, 3, 3, 3, 11, 11, 9, 5, 5, 9, + 5, 5, 6, 6, 5, 5, 5, 6, 6, 5, + 1, 3, 3, 3, 3, 4, 4, 9, 9, 5, + 7, 4, 6, 5, 6, 7, 9, 8, 8, 11, + 9, 4, 5, 6, 7, 6, 4, 6, 5, 6, + 6, 4, 8, 10, 10, 12, 5, 6, 5, 6, + 4, 4, 4, 7, 9, 9, 9, 6, 6, 6, + 8, 8, 6, 5, 5, 8, 4, 7, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 4, 4, 6, 6, 2, 2, 4, 2, 2, 2, + 2, 2, 2, 6, 6, 5, 4, 3, 3, 3, + 3, 3, 3, 4, 2, 4, 2, 4, 2, 4, + 2, 7, 8, 8, 7, 7, 7, 9, 7, 8, + 9, 8, 6, 7, 8, 9, 8, 7, 7, 6, + 11, 7, 11, 7, 3, 2, 1, 7, 9, 11, + 3, 5, 7, 1, 2, 2, 4, 1, 6, 6, + 6, 1, 1, 0, 5, 5, 3, 3, 3, 3, + 0, 1, 1, 1, 1, 1, 0, 3, 0, 3, + 3, 0, 3, 3, 5, 5, 0, 3, 3, 0, + 3, 3, 0, 3, 3, 3, 5, 5, 0, 3, + 0, 3, 1, 1, 1, 1, 0, 3, 3, 3, + 5, 5, 1, 1, 1, 0, 3, 0, 3, 4, + 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 3, 3, 3, 5, 5, 5, 5, 3, 3, 5, + 5, 0, 1, 1, 2, 2, 2, 3, 1, 5, + 5, 3, 2, 2, 2, 3, 1, 1, 1, 1, + 3, 3, 3, 3, 1, 1, 1, 1, 3, 1, + 1, 3, 1, 1, 3, 2, 2, 1, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 0, 7, 0, 0, 206, 0, 0, 221, 222, 0, + 0, 0, 0, 0, 138, 140, 139, 141, 142, 143, + 144, 0, 0, 145, 146, 147, 0, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 217, 213, 0, 0, 0, 0, 0, 0, 8, + 0, 3, 0, 0, 0, 0, 0, 0, 223, 308, + 80, 0, 0, 0, 0, 324, 332, 333, 348, 205, + 337, 0, 0, 0, 0, 0, 0, 0, 316, 317, + 319, 318, 0, 0, 0, 0, 0, 0, 0, 149, + 148, 154, 155, 0, 0, 0, 157, 158, 333, 160, + 159, 0, 162, 161, 0, 0, 0, 176, 0, 174, + 0, 178, 0, 180, 0, 0, 0, 316, 0, 0, + 0, 0, 0, 0, 0, 215, 214, 0, 0, 0, + 0, 0, 301, 0, 0, 1, 0, 4, 304, 305, + 306, 0, 46, 0, 0, 0, 0, 0, 0, 0, + 45, 0, 312, 49, 275, 314, 313, 0, 9, 0, + 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 169, 172, 170, 171, 167, 168, 0, + 0, 0, 0, 0, 0, 272, 273, 274, 0, 0, + 0, 81, 83, 246, 0, 246, 0, 0, 281, 282, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, + 0, 0, 223, 249, 63, 59, 57, 61, 62, 82, + 0, 0, 84, 0, 321, 320, 26, 14, 27, 15, + 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, + 0, 311, 223, 48, 0, 210, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 301, 301, + 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 288, 287, 303, 302, 0, 0, + 0, 322, 0, 275, 204, 0, 0, 38, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 40, 0, 56, + 0, 0, 0, 0, 334, 345, 347, 340, 346, 342, + 341, 338, 339, 343, 344, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 287, 283, 284, + 285, 286, 0, 0, 0, 0, 0, 0, 53, 0, + 47, 166, 252, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, + 86, 0, 50, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 121, 122, 120, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 0, 0, 150, 0, 331, 151, 0, 0, + 0, 0, 175, 173, 177, 179, 156, 302, 0, 0, + 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 216, 0, 136, 0, 0, 0, 0, 0, 0, 0, + 279, 0, 6, 60, 0, 315, 0, 0, 0, 0, + 0, 0, 91, 106, 101, 0, 0, 0, 227, 0, + 226, 0, 0, 223, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 79, 67, 68, 0, 252, 258, + 252, 236, 238, 0, 0, 0, 0, 165, 0, 24, + 0, 0, 0, 0, 301, 301, 0, 306, 0, 309, + 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 277, 277, 74, 75, 277, 277, 0, 76, 70, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 93, 108, + 260, 0, 238, 0, 0, 301, 0, 310, 0, 0, + 211, 0, 0, 0, 0, 280, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, + 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102, 89, 0, 116, 118, 41, 276, + 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 92, 107, 110, 0, + 230, 52, 0, 0, 36, 248, 247, 0, 0, 0, + 0, 0, 105, 258, 252, 117, 119, 0, 0, 302, + 0, 0, 0, 12, 0, 333, 329, 0, 330, 199, + 0, 0, 0, 0, 250, 251, 58, 0, 77, 78, + 72, 73, 0, 0, 0, 0, 0, 42, 0, 0, + 0, 0, 94, 109, 0, 39, 103, 260, 302, 0, + 13, 0, 0, 0, 153, 152, 164, 163, 0, 0, + 0, 0, 0, 129, 127, 128, 0, 220, 219, 218, + 0, 132, 0, 0, 0, 0, 0, 0, 192, 5, + 0, 0, 0, 0, 0, 224, 225, 0, 307, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 231, 232, 233, 0, 0, 0, 0, 0, + 253, 0, 254, 0, 255, 259, 104, 95, 0, 246, + 0, 0, 246, 0, 197, 0, 198, 0, 0, 0, + 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 0, 188, 0, 207, 212, + 0, 181, 0, 0, 184, 185, 0, 137, 0, 0, + 0, 0, 0, 0, 0, 203, 193, 186, 0, 201, + 55, 54, 0, 0, 0, 0, 0, 0, 0, 34, + 112, 0, 246, 98, 0, 0, 237, 0, 239, 240, + 0, 0, 0, 246, 196, 246, 246, 189, 0, 325, + 326, 327, 328, 0, 28, 258, 223, 278, 131, 130, + 0, 0, 258, 97, 43, 44, 0, 0, 261, 0, + 191, 223, 0, 182, 194, 183, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 124, 100, 0, 69, 0, 0, 0, 257, + 256, 195, 190, 187, 66, 0, 37, 88, 228, 229, + 96, 0, 0, 0, 0, 87, 208, 125, 0, 0, + 0, 0, 0, 0, 126, 0, 266, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 114, 0, 113, 0, + 0, 0, 0, 266, 262, 265, 264, 263, 0, 0, + 0, 0, 0, 64, 0, 0, 0, 0, 99, 241, + 238, 20, 238, 0, 0, 209, 0, 0, 18, 19, + 202, 200, 65, 0, 30, 0, 0, 0, 230, 23, + 22, 21, 115, 0, 0, 0, 267, 0, 29, 0, + 31, 32, 0, 33, 234, 235, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 230, 242, 0, 0, 0, 0, 269, 0, 268, + 0, 290, 0, 292, 0, 291, 0, 289, 0, 297, + 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 244, 0, 266, 266, + 270, 271, 294, 296, 295, 293, 299, 300, 35, 16, + 17 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 60, 61, 62, 361, 168, 745, 715, 957, 601, + 604, 939, 348, 372, 487, 489, 652, 908, 913, 948, + 220, 309, 638, 64, 117, 221, 345, 288, 950, 953, + 289, 362, 363, 67, 68, 69, 166, 93, 70, 77, + 812, 626, 627, 109, 78, 79, 80 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -907 +static const yytype_int16 yypact[] = +{ + 878, -907, -120, 291, -907, 614, 439, -907, -907, -35, + -11, 31, 61, 81, -907, -907, -907, -907, -907, -907, + -907, 183, 202, -907, -907, -907, 291, 291, -56, 291, + -907, 351, 291, 291, 354, 96, 111, 86, 160, 162, + 168, 122, 170, 172, 318, 134, 146, 196, 200, 217, + 228, -907, 230, 233, 252, 46, 207, 26, 318, -907, + 412, -907, -48, 195, 324, 270, 274, 394, 271, -907, + -907, 418, 291, 291, 291, -907, -907, -907, -907, -907, + 561, 55, 69, 71, 482, 421, 80, 107, 70, -907, + -907, -907, 5, -107, 414, 419, 422, 440, 121, -907, + -907, -907, -907, 291, 465, 42, -907, -907, 321, -907, + -907, 52, -907, -907, 479, 489, 495, -907, 502, -907, + 520, -907, 558, -907, 560, 569, 593, -907, 594, 599, + 604, 609, 630, 640, 643, -907, -907, 638, 650, 27, + 657, -22, 237, 663, 667, -907, 1024, -907, -907, -907, + 186, 9, -907, 568, 272, 186, 186, 186, 547, 186, + 174, 291, -907, -907, 548, -907, -907, 147, 556, 555, + -907, -907, 459, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, -907, -907, -907, -907, -907, -907, 562, + 563, 564, 565, 567, 570, -907, -907, -907, 572, 573, + 574, 508, -907, 575, 645, -52, 159, 201, -907, -907, + 697, 698, 703, 705, 706, 576, 577, 20, 708, 668, + 579, 580, 271, 581, -907, -907, -907, 582, -907, 239, + 583, 320, -907, 585, -907, -907, -907, -907, -907, -907, + 586, 587, 725, 145, 15, 654, 411, 717, 718, 591, + 272, -907, 271, -907, 598, 659, 597, 689, 588, 601, + 690, 606, 607, -46, -39, -37, -4, 605, 301, 323, + -907, 610, 613, 615, 616, 617, 618, 619, 621, 671, + 291, 47, 740, 291, -907, -907, -907, 744, 291, 620, + 622, -907, -47, 548, -907, 746, 742, 623, 626, 627, + 629, 186, 631, 291, 291, 291, 653, -907, 644, -907, + -42, -31, 374, 291, -907, 608, 571, -907, 600, 397, + 397, -907, -907, 510, 510, 763, 765, 766, 768, 769, + 760, 771, 772, 773, 774, 775, 776, 641, -907, -907, + -907, -907, 291, 291, 291, 777, 779, 219, -907, 778, + -907, -907, 646, 647, 648, 649, 652, 655, 780, 786, + 745, 403, 394, 394, 274, 656, 382, 186, 789, 791, + 661, 249, -907, 688, 218, 260, 268, 795, 186, 186, + 186, 796, 798, 154, -907, -907, -907, -907, 687, 800, + 33, 291, 291, 291, 805, 792, 670, 672, 804, 274, + 673, 674, 291, 807, -907, 808, -907, -907, 811, 812, + 813, 675, -907, -907, -907, -907, -907, -907, 291, 676, + 816, 291, 678, 291, 291, 291, 818, 291, 291, 291, + -907, 819, 683, 749, 291, 686, 0, 684, 685, 753, + -907, 1024, -907, -907, 692, -907, 186, 186, 817, 820, + 700, 210, -907, -907, -907, 693, 704, 723, -907, 730, + -907, 762, 770, 271, 709, 710, 711, 712, 713, 719, + 722, 726, 727, 728, -907, -907, -907, 843, 646, 647, + 646, 24, 105, 721, 729, 731, 87, -907, 738, -907, + 851, 852, 856, 305, 301, 464, 867, -907, 732, -907, + 869, 291, 733, 739, 741, 743, 870, 759, 781, 782, + 737, 737, -907, -907, 737, 737, 783, -907, -907, -907, + 784, 785, 787, 788, 790, 793, 794, 797, 799, -907, + 799, 801, 802, 871, 896, 481, 806, -907, 897, 809, + 847, 810, 814, 815, 821, -907, 822, 842, 823, 824, + 853, 828, 833, 834, 803, 835, 837, 838, -907, 827, + 924, 840, 855, 928, 857, 861, 865, 940, 825, 291, + 872, 899, 890, -907, -907, 186, -907, -907, 826, -907, + 844, 845, 11, 40, -907, 947, 291, 291, 291, 291, + 952, 943, 954, 945, 956, 894, -907, -907, -907, 978, + 428, -907, 979, 487, -907, -907, -907, 982, 848, 44, + 73, 849, -907, 647, 646, -907, -907, 291, 850, 983, + 291, 854, 858, -907, 862, 839, -907, 873, -907, -907, + 987, 988, 990, 919, -907, -907, -907, 882, -907, -907, + -907, -907, 291, 291, 859, 1001, 1003, -907, 513, 186, + 186, 914, -907, -907, 1007, -907, -907, 799, 997, 881, + -907, 949, 1025, 291, -907, -907, -907, -907, 955, 1041, + 980, 981, 178, -907, -907, -907, 186, -907, -907, -907, + 923, -907, 957, 238, 926, 925, 1061, 1064, -907, -907, + 133, 186, 186, 933, 186, -907, -907, 186, -907, 186, + 932, 935, 936, 937, 938, 939, 941, 942, 944, 946, + 291, 999, -907, -907, -907, 948, 1000, 950, 951, 1002, + -907, 959, -907, 973, -907, -907, -907, -907, 953, 575, + 958, 960, 575, 1014, -907, 477, -907, 1009, 962, 964, + 394, 965, 966, 967, 566, -907, 968, 969, 970, 971, + 961, 976, 974, 984, -907, 977, -907, 394, 1011, -907, + 1085, -907, 1078, 1089, -907, -907, 989, -907, 991, 972, + 986, 1090, 1091, 291, 1096, -907, -907, -907, 1115, -907, + -907, -907, 1117, 186, 291, 1124, 1126, 1128, 1129, -907, + -907, 859, 575, 993, 995, 1132, -907, 1133, -907, -907, + 1111, 998, 1004, 575, -907, 575, 575, -907, 291, -907, + -907, -907, -907, 186, -907, 647, 271, -907, -907, -907, + 1006, 1020, 647, -907, -907, -907, 313, 1135, -907, 1092, + -907, 271, 1136, -907, -907, -907, 859, -907, 1137, 1139, + 1013, 1021, 1023, 1099, 1026, 1027, 1029, 1031, 1034, 1035, + 1036, 1037, -907, -907, 1065, -907, 398, 612, 1098, -907, + -907, -907, -907, -907, -907, 1130, -907, -907, -907, -907, + -907, 1039, 1044, 1042, 1163, -907, 1113, -907, 1043, 1046, + 291, 611, 1109, 291, -907, 1082, 1047, 291, 291, 291, + 291, 1049, 1183, 1186, 1180, 186, -907, 1187, -907, 1143, + 291, 291, 291, 1047, -907, -907, -907, -907, 1054, 925, + 1055, 1056, 1083, -907, 1057, 1059, 1060, 1062, -907, 1063, + 802, -907, 802, 1066, 1201, -907, 1067, 1069, -907, -907, + -907, -907, -907, 1068, 1070, 1071, 1071, 1072, 476, -907, + -907, -907, -907, 1073, 1203, 1205, -907, 557, -907, 332, + -907, -907, 553, -907, -907, -907, 167, 380, 1196, 1077, + 1079, 391, 408, 413, 453, 456, 462, 499, 506, 584, + -907, 428, -907, 1076, 291, 291, 1103, -907, 1105, -907, + 1106, -907, 1107, -907, 1108, -907, 1110, -907, 1112, -907, + 1114, -907, 1080, 1084, 1176, 1088, 1093, 1094, 1095, 1097, + 1100, 1101, 1102, 1104, 1116, -907, -907, 1216, 1047, 1047, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -907, -907, -907, -122, 10, -208, -737, -906, 284, -907, + -509, -907, -196, -907, -451, -460, -502, -907, -863, -907, + -907, 975, -69, -907, -27, -907, 402, -180, 325, -907, + -243, 2, 22, -168, 963, -213, -50, 59, -907, -16, + -907, -907, -907, 1220, -907, -26, 19 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -3 +static const yytype_int16 yytable[] = +{ + 101, 102, 65, 104, 365, 106, 107, 110, 113, 350, + 63, 119, 121, 123, 370, 162, 165, 108, 108, 597, + 296, 346, 66, 655, 292, 419, 422, 596, 653, 598, + 146, 441, 956, 232, 222, 294, 234, 400, 411, 163, + 928, 7, 8, 71, 401, 411, 360, 411, 252, 364, + 7, 8, 142, 279, 852, 184, 186, 188, 223, 235, + 226, 228, 136, 94, 389, 993, 395, 161, 256, 257, + 7, 8, 253, 433, 139, 160, 164, 254, 259, 260, + 411, 183, 399, 72, 280, 284, 285, 95, 418, 421, + 73, 170, 171, 172, 219, 185, 229, 187, 231, 877, + 7, 8, 526, 128, 434, 72, 225, 103, 251, 143, + 140, 347, 73, 147, 442, 72, 457, 144, 72, 412, + 458, 527, 73, 502, 172, 73, 413, 459, 414, 96, + 172, 460, 72, 227, 72, 307, 282, 240, 283, 73, + 241, 73, 242, 72, 243, 1019, 1020, 244, 65, 245, + 73, 7, 8, 726, 233, 754, 63, 246, 563, 97, + 293, 415, 564, 727, 297, 298, 299, 300, 66, 302, + 72, 385, 295, 171, 697, 7, 8, 73, 388, 98, + 522, 386, 599, 74, 72, 351, 501, 600, 75, 76, + 523, 73, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 721, 699, 764, 74, 722, 247, 248, 99, + 75, 76, 608, 609, 765, 74, 7, 8, 74, 230, + 75, 76, 72, 75, 76, 170, 171, 352, 100, 73, + 610, 723, 74, 141, 74, 724, 172, 75, 76, 75, + 76, 769, 770, 74, 510, 249, 576, 771, 75, 76, + 116, 618, 621, 387, 432, 584, 135, 436, 772, 114, + 7, 8, 438, 602, 72, 303, 304, 305, 603, 172, + 74, 73, 148, 72, 115, 75, 76, 452, 453, 454, + 73, 72, 310, 311, 250, 124, 512, 464, 73, 75, + 76, 778, 659, 148, 514, 779, 152, 129, 149, 150, + 7, 8, 7, 8, 7, 8, 153, 284, 285, 130, + 153, 450, 162, 165, 617, 620, 478, 479, 480, 568, + 286, 287, 74, 72, 118, 969, 120, 75, 76, 970, + 73, 72, 122, 72, 125, 72, 126, 306, 73, 871, + 154, 615, 73, 7, 8, 374, 375, 155, 511, 513, + 515, 376, 483, 484, 72, 866, 156, 157, 158, 131, + 159, 73, 870, 132, 74, 528, 529, 530, 72, 75, + 76, 284, 285, 74, 498, 73, 539, 503, 75, 76, + 133, 74, 507, 508, 286, 417, 75, 76, 517, 518, + 519, 134, 546, 284, 285, 549, 137, 551, 552, 553, + 461, 555, 556, 557, 7, 8, 286, 420, 561, 536, + 462, 940, 145, 941, 72, 138, 127, 72, 89, 90, + 91, 73, 151, 74, 73, 577, 378, 379, 75, 76, + 153, 74, 380, 74, 167, 74, 75, 76, 75, 76, + 75, 76, 639, 65, 169, 640, 641, 224, 571, 572, + 236, 63, 284, 285, 74, 237, 570, 570, 238, 75, + 76, 963, 964, 66, 175, 286, 500, 616, 74, 179, + 180, 965, 966, 75, 76, 628, 239, 338, 339, 340, + 341, 284, 285, 296, 365, 625, 400, 189, 190, 191, + 192, 255, 193, 194, 258, 195, 196, 197, 198, 199, + 200, 148, 391, 392, 393, 261, 149, 497, 201, 394, + 202, 203, 7, 8, 105, 262, 204, 111, 205, 75, + 76, 263, 75, 76, 173, 174, 175, 176, 264, 177, + 178, 179, 180, 804, 284, 285, 807, 88, 971, 89, + 90, 91, 972, 690, 92, 206, 265, 286, 619, 976, + 181, 182, 207, 977, 712, 713, 714, 208, 209, 210, + 701, 702, 703, 704, 286, 658, 978, 211, 212, 213, + 979, 980, 214, 334, 335, 981, 336, 175, 284, 337, + 177, 178, 179, 180, 266, 693, 267, 338, 339, 340, + 341, 728, 698, 251, 731, 268, 853, 954, 955, 342, + 343, 344, 712, 713, 714, 215, 216, 861, 867, 862, + 863, 982, 717, 718, 984, 983, 742, 743, 985, 269, + 986, 314, 270, 875, 987, 271, 173, 174, 175, 176, + 272, 177, 178, 179, 180, 273, 173, 759, 175, 176, + 296, 177, 178, 179, 180, 217, 218, 809, 810, 811, + 75, 76, 181, 182, 748, 749, 274, 988, 775, 750, + 751, 989, 181, 182, 990, 173, 275, 175, 991, 276, + 177, 178, 179, 180, 277, 175, 278, 893, 177, 178, + 179, 180, 284, 285, 794, 281, 766, 820, 821, 290, + 816, 181, 182, 961, 962, 291, 783, 967, 968, 181, + 182, 780, 781, 81, 570, 954, 955, 831, 82, 83, + 301, 308, 84, 85, 312, 313, 349, 86, 87, 904, + 905, 906, 907, 353, 354, 325, 326, 327, 328, 355, + 329, 356, 357, 330, 366, 331, 332, 333, 347, 367, + 358, 359, 368, 369, 371, 373, 377, 842, 381, 382, + 383, 384, 390, 396, 397, 398, 402, 403, 847, 404, + 405, 408, 406, 407, 409, 410, 435, 416, 423, 431, + 437, 424, 444, 425, 426, 427, 428, 429, 445, 455, + 456, 446, 864, 430, 447, 439, 448, 440, 449, 465, + 451, 466, 467, 846, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 481, 477, 482, 494, 490, 491, 486, + 488, 492, 495, 485, 493, 504, 496, 505, 499, 506, + 509, 516, 520, 865, 521, 524, 525, 531, 532, 533, + 535, 534, 538, 540, 541, 537, 872, 542, 543, 544, + 545, 547, 548, 550, 554, 558, 559, 560, 562, 565, + 566, 567, 569, 573, 903, 578, 574, 910, 575, 580, + 582, 914, 915, 916, 917, 581, 579, 585, 583, 595, + 586, 587, 588, 589, 925, 926, 927, 590, -2, 1, + 591, 611, 930, 605, 592, 593, 594, 612, 613, 607, + 2, 606, 614, 622, 623, 624, 633, 630, 629, 631, + 637, 632, 3, 4, 5, 922, 6, 656, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 634, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 657, 661, 30, 31, 32, 33, 34, 663, + 669, 642, 643, 635, 636, 645, 646, 644, 995, 996, + 681, 672, 647, 683, 684, 685, 648, 649, 680, 686, + 650, 676, 651, 687, 654, 603, 688, 692, 660, 691, + 148, 662, 664, 700, 35, 36, 665, 666, 705, 706, + 707, 708, 709, 667, 694, 710, 689, 668, 670, 671, + 673, 37, 38, 39, 40, 674, 675, 677, 41, 678, + 679, 42, 43, 682, 711, 716, 695, 696, 719, 730, + 720, 725, 735, 737, 738, 729, 739, 740, 741, 732, + 733, 44, 744, 755, 45, 46, 47, 734, 48, 49, + 50, 51, 52, 53, 54, 55, 2, 746, 736, 747, + 752, 56, 57, 753, 58, 59, 756, 757, 3, 4, + 5, 758, 6, 760, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 761, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 762, 763, + 30, 31, 32, 33, 34, 767, 773, 776, 768, 774, + 777, 782, 784, 785, 786, 787, 788, 795, 797, 802, + 800, 789, 801, 790, 791, 808, 792, 813, 793, 832, + 796, 833, 798, 799, 834, 835, 840, 841, 803, 826, + 35, 36, 843, 805, 814, 806, 815, 817, 818, 819, + 822, 823, 824, 825, 827, 838, 828, 37, 38, 39, + 40, 844, 830, 858, 41, 845, 829, 42, 43, 839, + 848, 836, 849, 837, 850, 851, 854, 855, 856, 857, + 859, 873, 876, 878, 874, 879, 860, 44, 868, 894, + 45, 46, 47, 880, 48, 49, 50, 51, 52, 53, + 54, 55, 869, 411, 881, 882, 883, 56, 57, 884, + 58, 59, 885, 886, 887, 888, 889, 890, 891, 899, + 895, 896, 897, 901, 898, 900, 902, 909, 911, 919, + 912, 918, 920, 921, 924, 923, 929, 931, 932, 934, + 933, 935, 936, 943, 937, 944, 938, 945, 942, 959, + 946, 960, 973, 947, 949, 952, 958, 974, 994, 975, + 997, 998, 1005, 999, 1000, 1001, 1006, 1002, 1007, 1003, + 1008, 1004, 1018, 992, 112, 1009, 1010, 1011, 892, 1012, + 0, 951, 1013, 1014, 1015, 0, 1016, 0, 443, 0, + 0, 0, 0, 0, 0, 463, 0, 0, 1017 +}; + +static const yytype_int16 yycheck[] = +{ + 26, 27, 0, 29, 217, 31, 32, 33, 34, 205, + 0, 38, 39, 40, 222, 65, 66, 33, 34, 479, + 72, 201, 0, 532, 146, 268, 269, 478, 530, 480, + 78, 78, 938, 28, 84, 26, 143, 250, 84, 65, + 903, 30, 31, 163, 252, 84, 26, 84, 98, 217, + 30, 31, 26, 26, 791, 81, 82, 83, 84, 166, + 86, 87, 52, 98, 244, 971, 246, 65, 26, 27, + 30, 31, 98, 26, 28, 65, 66, 103, 26, 27, + 84, 26, 250, 63, 57, 70, 71, 98, 268, 269, + 70, 72, 73, 74, 84, 26, 26, 26, 88, 836, + 30, 31, 69, 44, 57, 63, 26, 163, 98, 83, + 64, 163, 70, 161, 161, 63, 158, 58, 63, 165, + 162, 88, 70, 366, 105, 70, 165, 158, 165, 98, + 111, 162, 63, 26, 63, 161, 158, 16, 160, 70, + 19, 70, 21, 63, 23, 1008, 1009, 26, 146, 28, + 70, 30, 31, 613, 149, 657, 146, 36, 158, 98, + 150, 165, 162, 614, 154, 155, 156, 157, 146, 159, + 63, 26, 163, 154, 163, 30, 31, 70, 163, 98, + 26, 36, 158, 163, 63, 26, 366, 163, 168, 169, + 36, 70, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 158, 163, 26, 163, 162, 86, 87, 26, + 168, 169, 125, 126, 36, 163, 30, 31, 163, 149, + 168, 169, 63, 168, 169, 206, 207, 26, 26, 70, + 143, 158, 163, 26, 163, 162, 217, 168, 169, 168, + 169, 3, 4, 163, 26, 124, 36, 9, 168, 169, + 164, 494, 495, 243, 280, 463, 26, 283, 20, 163, + 30, 31, 288, 158, 63, 91, 92, 93, 163, 250, + 163, 70, 98, 63, 163, 168, 169, 303, 304, 305, + 70, 63, 135, 136, 163, 163, 26, 313, 70, 168, + 169, 158, 535, 98, 26, 162, 26, 163, 103, 104, + 30, 31, 30, 31, 30, 31, 36, 70, 71, 163, + 36, 301, 362, 363, 494, 495, 342, 343, 344, 441, + 83, 84, 163, 63, 164, 158, 164, 168, 169, 162, + 70, 63, 164, 63, 164, 63, 164, 163, 70, 26, + 70, 36, 70, 30, 31, 106, 107, 77, 374, 375, + 376, 112, 133, 134, 63, 815, 86, 87, 88, 163, + 90, 70, 822, 163, 163, 391, 392, 393, 63, 168, + 169, 70, 71, 163, 364, 70, 402, 367, 168, 169, + 163, 163, 133, 134, 83, 84, 168, 169, 378, 379, + 380, 163, 418, 70, 71, 421, 163, 423, 424, 425, + 26, 427, 428, 429, 30, 31, 83, 84, 434, 399, + 36, 920, 0, 922, 63, 163, 98, 63, 100, 101, + 102, 70, 98, 163, 70, 451, 106, 107, 168, 169, + 36, 163, 112, 163, 163, 163, 168, 169, 168, 169, + 168, 169, 511, 441, 26, 514, 515, 26, 446, 447, + 36, 441, 70, 71, 163, 36, 446, 447, 36, 168, + 169, 129, 130, 441, 67, 83, 84, 493, 163, 72, + 73, 139, 140, 168, 169, 501, 36, 79, 80, 81, + 82, 70, 71, 72, 697, 501, 699, 5, 6, 7, + 8, 26, 10, 11, 173, 13, 14, 15, 16, 17, + 18, 98, 91, 92, 93, 26, 103, 104, 26, 98, + 28, 29, 30, 31, 163, 26, 34, 163, 36, 168, + 169, 26, 168, 169, 65, 66, 67, 68, 26, 70, + 71, 72, 73, 729, 70, 71, 732, 98, 158, 100, + 101, 102, 162, 569, 105, 63, 26, 83, 84, 158, + 91, 92, 70, 162, 126, 127, 128, 75, 76, 77, + 586, 587, 588, 589, 83, 84, 158, 85, 86, 87, + 162, 158, 90, 65, 66, 162, 68, 67, 70, 71, + 70, 71, 72, 73, 26, 575, 26, 79, 80, 81, + 82, 617, 582, 583, 620, 26, 792, 121, 122, 91, + 92, 93, 126, 127, 128, 123, 124, 803, 816, 805, + 806, 158, 125, 126, 158, 162, 642, 643, 162, 26, + 158, 162, 28, 831, 162, 26, 65, 66, 67, 68, + 26, 70, 71, 72, 73, 26, 65, 663, 67, 68, + 72, 70, 71, 72, 73, 163, 164, 170, 171, 172, + 168, 169, 91, 92, 141, 142, 26, 158, 685, 649, + 650, 162, 91, 92, 158, 65, 26, 67, 162, 26, + 70, 71, 72, 73, 36, 67, 26, 857, 70, 71, + 72, 73, 70, 71, 710, 28, 676, 121, 122, 26, + 740, 91, 92, 136, 137, 28, 694, 144, 145, 91, + 92, 691, 692, 89, 694, 121, 122, 757, 94, 95, + 163, 163, 98, 99, 158, 160, 71, 103, 104, 108, + 109, 110, 111, 26, 26, 163, 163, 163, 163, 26, + 163, 26, 26, 163, 26, 163, 163, 163, 163, 71, + 164, 164, 163, 163, 163, 163, 163, 773, 163, 163, + 163, 26, 98, 36, 36, 164, 158, 98, 784, 162, + 71, 71, 174, 162, 158, 158, 26, 162, 158, 98, + 26, 158, 26, 158, 158, 158, 158, 158, 36, 126, + 136, 158, 808, 162, 158, 165, 159, 165, 159, 26, + 159, 26, 26, 783, 26, 26, 36, 26, 26, 26, + 26, 26, 26, 26, 163, 26, 26, 159, 159, 163, + 163, 159, 26, 35, 159, 26, 71, 26, 162, 158, + 132, 26, 26, 813, 26, 138, 26, 22, 36, 159, + 26, 159, 158, 26, 26, 162, 826, 26, 26, 26, + 165, 165, 26, 165, 26, 26, 163, 98, 162, 165, + 165, 98, 160, 36, 880, 162, 36, 883, 158, 136, + 98, 887, 888, 889, 890, 135, 162, 158, 98, 26, + 160, 160, 160, 160, 900, 901, 902, 158, 0, 1, + 158, 143, 909, 162, 158, 158, 158, 36, 36, 158, + 12, 162, 36, 26, 162, 26, 26, 158, 165, 158, + 163, 158, 24, 25, 26, 895, 28, 36, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 162, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 36, 36, 56, 57, 58, 59, 60, 92, + 98, 158, 158, 162, 162, 158, 158, 162, 974, 975, + 26, 98, 162, 98, 26, 98, 163, 163, 131, 98, + 163, 158, 163, 98, 163, 163, 26, 77, 162, 70, + 98, 162, 162, 26, 96, 97, 162, 162, 26, 36, + 26, 36, 26, 162, 158, 91, 161, 165, 165, 165, + 162, 113, 114, 115, 116, 162, 162, 162, 120, 162, + 162, 123, 124, 163, 26, 26, 162, 162, 26, 26, + 162, 162, 173, 26, 26, 165, 26, 98, 136, 165, + 162, 143, 163, 26, 146, 147, 148, 165, 150, 151, + 152, 153, 154, 155, 156, 157, 12, 36, 165, 36, + 126, 163, 164, 36, 166, 167, 165, 98, 24, 25, + 26, 26, 28, 98, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 26, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 98, 98, + 56, 57, 58, 59, 60, 162, 160, 26, 131, 164, + 26, 158, 160, 158, 158, 158, 158, 98, 98, 126, + 98, 162, 143, 162, 162, 91, 162, 98, 162, 98, + 162, 26, 162, 162, 36, 26, 26, 26, 165, 158, + 96, 97, 26, 165, 162, 165, 162, 162, 162, 162, + 162, 162, 162, 162, 158, 163, 162, 113, 114, 115, + 116, 26, 165, 32, 120, 28, 162, 123, 124, 163, + 26, 162, 26, 162, 26, 26, 163, 162, 26, 26, + 162, 26, 26, 26, 72, 26, 162, 143, 162, 71, + 146, 147, 148, 160, 150, 151, 152, 153, 154, 155, + 156, 157, 162, 84, 163, 162, 160, 163, 164, 162, + 166, 167, 163, 162, 160, 160, 160, 160, 133, 36, + 70, 162, 158, 160, 162, 92, 160, 98, 126, 26, + 163, 162, 26, 33, 71, 28, 162, 162, 162, 162, + 137, 162, 162, 22, 162, 158, 163, 158, 162, 26, + 162, 26, 36, 163, 163, 163, 163, 160, 162, 160, + 137, 136, 162, 137, 137, 137, 162, 137, 72, 137, + 162, 137, 36, 969, 34, 162, 162, 162, 856, 162, + -1, 936, 162, 162, 162, -1, 162, -1, 293, -1, + -1, -1, -1, -1, -1, 312, -1, -1, 162 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 1, 12, 24, 25, 26, 28, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 56, 57, 58, 59, 60, 96, 97, 113, 114, 115, + 116, 120, 123, 124, 143, 146, 147, 148, 150, 151, + 152, 153, 154, 155, 156, 157, 163, 164, 166, 167, + 176, 177, 178, 179, 198, 206, 207, 208, 209, 210, + 213, 163, 63, 70, 163, 168, 169, 214, 219, 220, + 221, 89, 94, 95, 98, 99, 103, 104, 98, 100, + 101, 102, 105, 212, 98, 98, 98, 98, 98, 26, + 26, 220, 220, 163, 220, 163, 220, 220, 214, 218, + 220, 163, 218, 220, 163, 163, 164, 199, 164, 199, + 164, 199, 164, 199, 163, 164, 164, 98, 212, 163, + 163, 163, 163, 163, 163, 26, 179, 163, 163, 28, + 64, 26, 26, 83, 212, 0, 78, 161, 98, 103, + 104, 98, 26, 36, 70, 77, 86, 87, 88, 90, + 179, 206, 211, 220, 179, 211, 211, 163, 180, 26, + 221, 221, 221, 65, 66, 67, 68, 70, 71, 72, + 73, 91, 92, 26, 220, 26, 220, 26, 220, 5, + 6, 7, 8, 10, 11, 13, 14, 15, 16, 17, + 18, 26, 28, 29, 34, 36, 63, 70, 75, 76, + 77, 85, 86, 87, 90, 123, 124, 163, 164, 179, + 195, 200, 211, 220, 26, 26, 220, 26, 220, 26, + 149, 179, 28, 149, 143, 166, 36, 36, 36, 36, + 16, 19, 21, 23, 26, 28, 36, 86, 87, 124, + 163, 179, 211, 220, 220, 26, 26, 27, 173, 26, + 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 28, 26, 26, 26, 26, 26, 26, 36, 26, 26, + 57, 28, 158, 160, 70, 71, 83, 84, 202, 205, + 26, 28, 178, 179, 26, 163, 72, 179, 179, 179, + 179, 163, 179, 91, 92, 93, 163, 220, 163, 196, + 135, 136, 158, 160, 162, 221, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 65, 66, 68, 71, 79, 80, + 81, 82, 91, 92, 93, 201, 202, 163, 187, 71, + 187, 26, 26, 26, 26, 26, 26, 26, 164, 164, + 26, 179, 206, 207, 208, 210, 26, 71, 163, 163, + 180, 163, 188, 163, 106, 107, 112, 163, 106, 107, + 112, 163, 163, 163, 26, 26, 36, 179, 163, 202, + 98, 91, 92, 93, 98, 202, 36, 36, 164, 208, + 210, 180, 158, 98, 162, 71, 174, 162, 71, 158, + 158, 84, 165, 165, 165, 165, 162, 84, 202, 205, + 84, 202, 205, 158, 158, 158, 158, 158, 158, 158, + 162, 98, 220, 26, 57, 26, 220, 26, 220, 165, + 165, 78, 161, 196, 26, 36, 158, 158, 159, 159, + 179, 159, 220, 220, 220, 126, 136, 158, 162, 158, + 162, 26, 36, 209, 220, 26, 26, 26, 26, 26, + 36, 26, 26, 26, 26, 26, 26, 163, 220, 220, + 220, 26, 26, 133, 134, 35, 163, 189, 163, 190, + 159, 159, 159, 159, 26, 26, 71, 104, 179, 162, + 84, 202, 205, 179, 26, 26, 158, 133, 134, 132, + 26, 220, 26, 220, 26, 220, 26, 179, 179, 179, + 26, 26, 26, 36, 138, 26, 69, 88, 220, 220, + 220, 22, 36, 159, 159, 26, 179, 162, 158, 220, + 26, 26, 26, 26, 26, 165, 220, 165, 26, 220, + 165, 220, 220, 220, 26, 220, 220, 220, 26, 163, + 98, 220, 162, 158, 162, 165, 165, 98, 178, 160, + 179, 206, 206, 36, 36, 158, 36, 220, 162, 162, + 136, 135, 98, 98, 180, 158, 160, 160, 160, 160, + 158, 158, 158, 158, 158, 26, 189, 190, 189, 158, + 163, 184, 158, 163, 185, 162, 162, 158, 125, 126, + 143, 143, 36, 36, 36, 36, 220, 202, 205, 84, + 202, 205, 26, 162, 26, 214, 216, 217, 220, 165, + 158, 158, 158, 26, 162, 162, 162, 163, 197, 197, + 197, 197, 158, 158, 162, 158, 158, 162, 163, 163, + 163, 163, 191, 191, 163, 185, 36, 36, 84, 205, + 162, 36, 162, 92, 162, 162, 162, 162, 165, 98, + 165, 165, 98, 162, 162, 162, 158, 162, 162, 162, + 131, 26, 163, 98, 26, 98, 98, 98, 26, 161, + 220, 70, 77, 179, 158, 162, 162, 163, 179, 163, + 26, 220, 220, 220, 220, 26, 36, 26, 36, 26, + 91, 26, 126, 127, 128, 182, 26, 125, 126, 26, + 162, 158, 162, 158, 162, 162, 190, 189, 220, 165, + 26, 220, 165, 162, 165, 173, 165, 26, 26, 26, + 98, 136, 220, 220, 163, 181, 36, 36, 141, 142, + 179, 179, 126, 36, 191, 26, 165, 98, 26, 220, + 98, 26, 98, 98, 26, 36, 179, 162, 131, 3, + 4, 9, 20, 160, 164, 199, 26, 26, 158, 162, + 179, 179, 158, 206, 160, 158, 158, 158, 158, 162, + 162, 162, 162, 162, 220, 98, 162, 98, 162, 162, + 98, 143, 126, 165, 187, 165, 165, 187, 91, 170, + 171, 172, 215, 98, 162, 162, 211, 162, 162, 162, + 121, 122, 162, 162, 162, 162, 158, 158, 162, 162, + 165, 211, 98, 26, 36, 26, 162, 162, 163, 163, + 26, 26, 220, 26, 26, 28, 179, 220, 26, 26, + 26, 26, 181, 187, 163, 162, 26, 26, 32, 162, + 162, 187, 187, 187, 220, 179, 190, 180, 162, 162, + 190, 26, 179, 26, 72, 180, 26, 181, 26, 26, + 160, 163, 162, 160, 162, 163, 162, 160, 160, 160, + 160, 133, 201, 202, 71, 70, 162, 158, 162, 36, + 92, 160, 160, 220, 108, 109, 110, 111, 192, 98, + 220, 126, 163, 193, 220, 220, 220, 220, 162, 26, + 26, 33, 179, 28, 71, 220, 220, 220, 193, 162, + 199, 162, 162, 137, 162, 162, 162, 162, 163, 186, + 185, 185, 162, 22, 158, 158, 162, 163, 194, 163, + 203, 203, 163, 204, 121, 122, 182, 183, 163, 26, + 26, 136, 137, 129, 130, 139, 140, 144, 145, 158, + 162, 158, 162, 36, 160, 160, 158, 162, 158, 162, + 158, 162, 158, 162, 158, 162, 158, 162, 158, 162, + 158, 162, 183, 182, 162, 220, 220, 137, 136, 137, + 137, 137, 137, 137, 137, 162, 162, 72, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, 36, 193, + 193 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 3: +#line 569 "bfin-parse.y" + { + insn = (yyvsp[(1) - (1)].instr); + if (insn == (INSTR_T) 0) + return NO_INSN_GENERATED; + else if (insn == (INSTR_T) - 1) + return SEMANTIC_ERROR; + else + return INSN_GENERATED; + } + break; + + case 5: +#line 583 "bfin-parse.y" + { + if (((yyvsp[(1) - (6)].instr)->value & 0xf800) == 0xc000) + { + if (is_group1 ((yyvsp[(3) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr)); + else if (is_group2 ((yyvsp[(3) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr)); + else + return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instrution group"); + } + else if (((yyvsp[(3) - (6)].instr)->value & 0xf800) == 0xc000) + { + if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr)); + else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr)); + else + return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instrution group"); + } + else if (((yyvsp[(5) - (6)].instr)->value & 0xf800) == 0xc000) + { + if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(3) - (6)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr)); + else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(3) - (6)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr)); + else + return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instrution group"); + } + else + error ("\nIllegal Multi Issue Construct, at least any one of the slot must be DSP32 instruction group\n"); + } + break; + + case 6: +#line 616 "bfin-parse.y" + { + if (((yyvsp[(1) - (4)].instr)->value & 0xf800) == 0xc000) + { + if (is_group1 ((yyvsp[(3) - (4)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr), 0); + else if (is_group2 ((yyvsp[(3) - (4)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (4)].instr), 0, (yyvsp[(3) - (4)].instr)); + else + return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group"); + } + else if (((yyvsp[(3) - (4)].instr)->value & 0xf800) == 0xc000) + { + if (is_group1 ((yyvsp[(1) - (4)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr), 0); + else if (is_group2 ((yyvsp[(1) - (4)].instr))) + (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (4)].instr), 0, (yyvsp[(1) - (4)].instr)); + else + return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group"); + } + else if (is_group1 ((yyvsp[(1) - (4)].instr)) && is_group2 ((yyvsp[(3) - (4)].instr))) + (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr)); + else if (is_group2 ((yyvsp[(1) - (4)].instr)) && is_group1 ((yyvsp[(3) - (4)].instr))) + (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr)); + else + return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group"); + } + break; + + case 7: +#line 643 "bfin-parse.y" + { + (yyval.instr) = 0; + yyerror (""); + yyerrok; + } + break; + + case 8: +#line 654 "bfin-parse.y" + { + (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0); + } + break; + + case 9: +#line 658 "bfin-parse.y" + { + int op0, op1; + int w0 = 0, w1 = 0; + int h00, h10, h01, h11; + + if ((yyvsp[(1) - (2)].macfunc).n == 0) + { + if ((yyvsp[(2) - (2)].mod).MM) + return yyerror ("(m) not allowed with a0 unit"); + op1 = 3; + op0 = (yyvsp[(1) - (2)].macfunc).op; + w1 = 0; + w0 = (yyvsp[(1) - (2)].macfunc).w; + h00 = IS_H ((yyvsp[(1) - (2)].macfunc).s0); + h10 = IS_H ((yyvsp[(1) - (2)].macfunc).s1); + h01 = h11 = 0; + } + else + { + op1 = (yyvsp[(1) - (2)].macfunc).op; + op0 = 3; + w1 = (yyvsp[(1) - (2)].macfunc).w; + w0 = 0; + h00 = h10 = 0; + h01 = IS_H ((yyvsp[(1) - (2)].macfunc).s0); + h11 = IS_H ((yyvsp[(1) - (2)].macfunc).s1); + } + (yyval.instr) = DSP32MAC (op1, (yyvsp[(2) - (2)].mod).MM, (yyvsp[(2) - (2)].mod).mod, w1, (yyvsp[(1) - (2)].macfunc).P, h01, h11, h00, h10, + &(yyvsp[(1) - (2)].macfunc).dst, op0, &(yyvsp[(1) - (2)].macfunc).s0, &(yyvsp[(1) - (2)].macfunc).s1, w0); + } + break; + + case 10: +#line 693 "bfin-parse.y" + { + Register *dst; + + if (check_macfuncs (&(yyvsp[(1) - (5)].macfunc), &(yyvsp[(2) - (5)].mod), &(yyvsp[(4) - (5)].macfunc), &(yyvsp[(5) - (5)].mod)) < 0) + return -1; + notethat ("assign_macfunc (.), assign_macfunc (.)\n"); + + if ((yyvsp[(1) - (5)].macfunc).w) + dst = &(yyvsp[(1) - (5)].macfunc).dst; + else + dst = &(yyvsp[(4) - (5)].macfunc).dst; + + (yyval.instr) = DSP32MAC ((yyvsp[(1) - (5)].macfunc).op, (yyvsp[(2) - (5)].mod).MM, (yyvsp[(5) - (5)].mod).mod, (yyvsp[(1) - (5)].macfunc).w, (yyvsp[(1) - (5)].macfunc).P, + IS_H ((yyvsp[(1) - (5)].macfunc).s0), IS_H ((yyvsp[(1) - (5)].macfunc).s1), IS_H ((yyvsp[(4) - (5)].macfunc).s0), IS_H ((yyvsp[(4) - (5)].macfunc).s1), + dst, (yyvsp[(4) - (5)].macfunc).op, &(yyvsp[(1) - (5)].macfunc).s0, &(yyvsp[(1) - (5)].macfunc).s1, (yyvsp[(4) - (5)].macfunc).w); + } + break; + + case 11: +#line 713 "bfin-parse.y" + { + notethat ("dsp32alu: DISALGNEXCPT\n"); + (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3); + } + break; + + case 12: +#line 718 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && !IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg))) + { + notethat ("dsp32alu: dregs = ( A0 += A1 )\n"); + (yyval.instr) = DSP32ALU (11, 0, 0, &(yyvsp[(1) - (6)].reg), 0, 0, 0, 0, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 13: +#line 728 "bfin-parse.y" + { + if (!IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg))) + { + notethat ("dsp32alu: dregs_half = ( A0 += A1 )\n"); + (yyval.instr) = DSP32ALU (11, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), 0, 0, 0, 0, 1); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 14: +#line 738 "bfin-parse.y" + { + notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n"); + (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 0); + } + break; + + case 15: +#line 743 "bfin-parse.y" + { + notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n"); + (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 2); + } + break; + + case 16: +#line 749 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG ((yyvsp[(4) - (17)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(9) - (17)].reg), (yyvsp[(11) - (17)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(13) - (17)].reg), (yyvsp[(15) - (17)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16P (dregs_pair , dregs_pair ) (half)\n"); + (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[(2) - (17)].reg), &(yyvsp[(4) - (17)].reg), &(yyvsp[(9) - (17)].reg), &(yyvsp[(13) - (17)].reg), (yyvsp[(17) - (17)].r0).r0, 0, 0); + } + } + break; + + case 17: +#line 765 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG((yyvsp[(4) - (17)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(9) - (17)].reg), (yyvsp[(11) - (17)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(13) - (17)].reg), (yyvsp[(15) - (17)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16M (dregs_pair , dregs_pair ) (aligndir)\n"); + (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[(2) - (17)].reg), &(yyvsp[(4) - (17)].reg), &(yyvsp[(9) - (17)].reg), &(yyvsp[(13) - (17)].reg), (yyvsp[(17) - (17)].r0).r0, 0, 1); + } + } + break; + + case 18: +#line 780 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(2) - (11)].reg)) || !IS_DREG ((yyvsp[(4) - (11)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(8) - (11)].reg), (yyvsp[(10) - (11)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: (dregs , dregs ) = BYTEUNPACK dregs_pair (aligndir)\n"); + (yyval.instr) = DSP32ALU (24, 0, &(yyvsp[(2) - (11)].reg), &(yyvsp[(4) - (11)].reg), &(yyvsp[(8) - (11)].reg), 0, (yyvsp[(11) - (11)].r0).r0, 0, 1); + } + } + break; + + case 19: +#line 792 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(2) - (11)].reg)) && IS_DREG ((yyvsp[(4) - (11)].reg)) && IS_DREG ((yyvsp[(8) - (11)].reg))) + { + notethat ("dsp32alu: (dregs , dregs ) = SEARCH dregs (searchmod)\n"); + (yyval.instr) = DSP32ALU (13, 0, &(yyvsp[(2) - (11)].reg), &(yyvsp[(4) - (11)].reg), &(yyvsp[(8) - (11)].reg), 0, 0, 0, (yyvsp[(10) - (11)].r0).r0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 20: +#line 803 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg))) + { + notethat ("dsp32alu: dregs = A1.l + A1.h, dregs = A0.l + A0.h \n"); + (yyval.instr) = DSP32ALU (12, 0, &(yyvsp[(1) - (11)].reg), &(yyvsp[(7) - (11)].reg), 0, 0, 0, 0, 1); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 21: +#line 815 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(7) - (12)].reg)) && !REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(5) - (12)].reg)) + && IS_A1 ((yyvsp[(9) - (12)].reg)) && !IS_A1 ((yyvsp[(11) - (12)].reg))) + { + notethat ("dsp32alu: dregs = A1 + A0 , dregs = A1 - A0 (amod1)\n"); + (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), 0, 0, (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, 0); + + } + else if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(7) - (12)].reg)) && !REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(5) - (12)].reg)) + && !IS_A1 ((yyvsp[(9) - (12)].reg)) && IS_A1 ((yyvsp[(11) - (12)].reg))) + { + notethat ("dsp32alu: dregs = A0 + A1 , dregs = A0 - A1 (amod1)\n"); + (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), 0, 0, (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, 1); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 22: +#line 834 "bfin-parse.y" + { + if ((yyvsp[(4) - (12)].r0).r0 == (yyvsp[(10) - (12)].r0).r0) + return yyerror ("Operators must differ"); + + if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(3) - (12)].reg)) && IS_DREG ((yyvsp[(5) - (12)].reg)) + && REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(9) - (12)].reg)) && REG_SAME ((yyvsp[(5) - (12)].reg), (yyvsp[(11) - (12)].reg))) + { + notethat ("dsp32alu: dregs = dregs + dregs," + "dregs = dregs - dregs (amod1)\n"); + (yyval.instr) = DSP32ALU (4, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &(yyvsp[(3) - (12)].reg), &(yyvsp[(5) - (12)].reg), (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, 2); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 23: +#line 852 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(9) - (12)].reg)) || !REG_SAME ((yyvsp[(5) - (12)].reg), (yyvsp[(11) - (12)].reg))) + return yyerror ("Differing source registers"); + + if (!IS_DREG ((yyvsp[(1) - (12)].reg)) || !IS_DREG ((yyvsp[(3) - (12)].reg)) || !IS_DREG ((yyvsp[(5) - (12)].reg)) || !IS_DREG ((yyvsp[(7) - (12)].reg))) + return yyerror ("Dregs expected"); + + + if ((yyvsp[(4) - (12)].r0).r0 == 1 && (yyvsp[(10) - (12)].r0).r0 == 2) + { + notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n"); + (yyval.instr) = DSP32ALU (1, 1, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &(yyvsp[(3) - (12)].reg), &(yyvsp[(5) - (12)].reg), (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, (yyvsp[(12) - (12)].modcodes).r0); + } + else if ((yyvsp[(4) - (12)].r0).r0 == 0 && (yyvsp[(10) - (12)].r0).r0 == 3) + { + notethat ("dsp32alu: dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n"); + (yyval.instr) = DSP32ALU (1, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &(yyvsp[(3) - (12)].reg), &(yyvsp[(5) - (12)].reg), (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, (yyvsp[(12) - (12)].modcodes).r0); + } + else + return yyerror ("Bar operand mismatch"); + } + break; + + case 24: +#line 875 "bfin-parse.y" + { + int op; + + if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(4) - (5)].reg))) + { + if ((yyvsp[(5) - (5)].r0).r0) + { + notethat ("dsp32alu: dregs = ABS dregs (v)\n"); + op = 6; + } + else + { + /* Vector version of ABS. */ + notethat ("dsp32alu: dregs = ABS dregs\n"); + op = 7; + } + (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 0, 0, 0, 2); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 25: +#line 897 "bfin-parse.y" + { + notethat ("dsp32alu: Ax = ABS Ax\n"); + (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg))); + } + break; + + case 26: +#line 902 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(3) - (3)].reg))) + { + notethat ("dsp32alu: A0.l = reg_half\n"); + (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 0); + } + else + return yyerror ("A0.l = Rx.l expected"); + } + break; + + case 27: +#line 912 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(3) - (3)].reg))) + { + notethat ("dsp32alu: A1.l = reg_half\n"); + (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 2); + } + else + return yyerror ("A1.l = Rx.l expected"); + } + break; + + case 28: +#line 923 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) + { + notethat ("dsp32shift: dregs = ALIGN8 (dregs , dregs )\n"); + (yyval.instr) = DSP32SHIFT (13, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), (yyvsp[(3) - (8)].r0).r0, 0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 29: +#line 934 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (13)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(5) - (13)].reg), (yyvsp[(7) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(9) - (13)].reg), (yyvsp[(11) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n"); + (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[(1) - (13)].reg), &(yyvsp[(5) - (13)].reg), &(yyvsp[(9) - (13)].reg), (yyvsp[(13) - (13)].modcodes).s0, 0, (yyvsp[(13) - (13)].modcodes).r0); + } + } + break; + + case 30: +#line 948 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (12)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(5) - (12)].reg), (yyvsp[(7) - (12)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(9) - (12)].reg), (yyvsp[(11) - (12)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n"); + (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(5) - (12)].reg), &(yyvsp[(9) - (12)].reg), 0, 0, 0); + } + } + break; + + case 31: +#line 964 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (13)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(5) - (13)].reg), (yyvsp[(7) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(9) - (13)].reg), (yyvsp[(11) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n"); + (yyval.instr) = DSP32ALU (22, (yyvsp[(13) - (13)].modcodes).r0, 0, &(yyvsp[(1) - (13)].reg), &(yyvsp[(5) - (13)].reg), &(yyvsp[(9) - (13)].reg), (yyvsp[(13) - (13)].modcodes).s0, (yyvsp[(13) - (13)].modcodes).x0, (yyvsp[(13) - (13)].modcodes).aop); + } + } + break; + + case 32: +#line 980 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (13)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(5) - (13)].reg), (yyvsp[(7) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(9) - (13)].reg), (yyvsp[(11) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n"); + (yyval.instr) = DSP32ALU (22, (yyvsp[(13) - (13)].modcodes).r0, 0, &(yyvsp[(1) - (13)].reg), &(yyvsp[(5) - (13)].reg), &(yyvsp[(9) - (13)].reg), (yyvsp[(13) - (13)].modcodes).s0, 0, (yyvsp[(13) - (13)].modcodes).x0); + } + } + break; + + case 33: +#line 996 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (13)].reg))) + return yyerror ("Dregs expected"); + else if (!valid_dreg_pair (&(yyvsp[(5) - (13)].reg), (yyvsp[(7) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(9) - (13)].reg), (yyvsp[(11) - (13)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: dregs = BYTEOP3P (dregs_pair , dregs_pair ) (b3_op)\n"); + (yyval.instr) = DSP32ALU (23, (yyvsp[(13) - (13)].modcodes).x0, 0, &(yyvsp[(1) - (13)].reg), &(yyvsp[(5) - (13)].reg), &(yyvsp[(9) - (13)].reg), (yyvsp[(13) - (13)].modcodes).s0, 0, 0); + } + } + break; + + case 34: +#line 1011 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) + { + notethat ("dsp32alu: dregs = BYTEPACK (dregs , dregs )\n"); + (yyval.instr) = DSP32ALU (24, 0, 0, &(yyvsp[(1) - (8)].reg), &(yyvsp[(5) - (8)].reg), &(yyvsp[(7) - (8)].reg), 0, 0, 0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 35: +#line 1023 "bfin-parse.y" + { + if (IS_HCOMPL ((yyvsp[(1) - (17)].reg), (yyvsp[(3) - (17)].reg)) && IS_HCOMPL ((yyvsp[(7) - (17)].reg), (yyvsp[(14) - (17)].reg)) && IS_HCOMPL ((yyvsp[(10) - (17)].reg), (yyvsp[(17) - (17)].reg))) + { + notethat ("dsp32alu: dregs_hi = dregs_lo =" + "SIGN (dregs_hi) * dregs_hi + " + "SIGN (dregs_lo) * dregs_lo \n"); + + (yyval.instr) = DSP32ALU (12, 0, 0, &(yyvsp[(1) - (17)].reg), &(yyvsp[(7) - (17)].reg), &(yyvsp[(10) - (17)].reg), 0, 0, 0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 36: +#line 1036 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + { + if ((yyvsp[(6) - (6)].modcodes).aop == 0) + { + /* No saturation flag specified, generate the 16 bit variant. */ + notethat ("COMP3op: dregs = dregs +- dregs\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), (yyvsp[(4) - (6)].r0).r0); + } + else + { + /* Saturation flag specified, generate the 32 bit variant. */ + notethat ("dsp32alu: dregs = dregs +- dregs (amod1)\n"); + (yyval.instr) = DSP32ALU (4, 0, 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, (yyvsp[(6) - (6)].modcodes).x0, (yyvsp[(4) - (6)].r0).r0); + } + } + else + if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg)) && (yyvsp[(4) - (6)].r0).r0 == 0) + { + notethat ("COMP3op: pregs = pregs + pregs\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 5); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 37: +#line 1062 "bfin-parse.y" + { + int op; + + if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG ((yyvsp[(7) - (9)].reg))) + { + if ((yyvsp[(9) - (9)].r0).r0) + op = 6; + else + op = 7; + + notethat ("dsp32alu: dregs = {MIN|MAX} (dregs, dregs)\n"); + (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[(1) - (9)].reg), &(yyvsp[(5) - (9)].reg), &(yyvsp[(7) - (9)].reg), 0, 0, (yyvsp[(3) - (9)].r0).r0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 38: +#line 1080 "bfin-parse.y" + { + notethat ("dsp32alu: Ax = - Ax\n"); + (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg))); + } + break; + + case 39: +#line 1085 "bfin-parse.y" + { + notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n"); + (yyval.instr) = DSP32ALU (2 | (yyvsp[(4) - (6)].r0).r0, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), + (yyvsp[(6) - (6)].modcodes).s0, (yyvsp[(6) - (6)].modcodes).x0, HL2 ((yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg))); + } + break; + + case 40: +#line 1091 "bfin-parse.y" + { + if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 0 && !REG_SAME ((yyvsp[(1) - (3)].reg), (yyvsp[(2) - (3)].reg))) + { + notethat ("dsp32alu: A1 = A0 = 0\n"); + (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, 2); + } + else + return yyerror ("Bad value, 0 expected"); + } + break; + + case 41: +#line 1103 "bfin-parse.y" + { + if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(2) - (5)].reg))) + { + notethat ("dsp32alu: Ax = Ax (S)\n"); + (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 1, 0, IS_A1 ((yyvsp[(1) - (5)].reg))); + } + else + return yyerror ("Registers must be equal"); + } + break; + + case 42: +#line 1114 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (6)].reg))) + { + notethat ("dsp32alu: dregs_half = dregs (RND)\n"); + (yyval.instr) = DSP32ALU (12, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 0, 0, 0, 3); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 43: +#line 1125 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg))) + { + notethat ("dsp32alu: dregs_half = dregs (+-) dregs (RND12)\n"); + (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[(1) - (8)].reg)), 0, &(yyvsp[(1) - (8)].reg), &(yyvsp[(3) - (8)].reg), &(yyvsp[(5) - (8)].reg), 0, 0, (yyvsp[(4) - (8)].r0).r0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 44: +#line 1136 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg))) + { + notethat ("dsp32alu: dregs_half = dregs -+ dregs (RND20)\n"); + (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[(1) - (8)].reg)), 0, &(yyvsp[(1) - (8)].reg), &(yyvsp[(3) - (8)].reg), &(yyvsp[(5) - (8)].reg), 0, 1, (yyvsp[(4) - (8)].r0).r0 | 2); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 45: +#line 1147 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(1) - (2)].reg), (yyvsp[(2) - (2)].reg))) + { + notethat ("dsp32alu: An = Am\n"); + (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(1) - (2)].reg)), 0, 3); + } + else + return yyerror ("Accu reg arguments must differ"); + } + break; + + case 46: +#line 1158 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(2) - (2)].reg))) + { + notethat ("dsp32alu: An = dregs\n"); + (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[(2) - (2)].reg), 0, 1, 0, IS_A1 ((yyvsp[(1) - (2)].reg)) << 1); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 47: +#line 1169 "bfin-parse.y" + { + if (!IS_H ((yyvsp[(3) - (4)].reg))) + { + if ((yyvsp[(1) - (4)].reg).regno == REG_A0x && IS_DREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("dsp32alu: A0.x = dregs_lo\n"); + (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[(3) - (4)].reg), 0, 0, 0, 1); + } + else if ((yyvsp[(1) - (4)].reg).regno == REG_A1x && IS_DREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("dsp32alu: A1.x = dregs_lo\n"); + (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[(3) - (4)].reg), 0, 0, 0, 3); + } + else if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("ALU2op: dregs = dregs_lo\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (4)].reg), &(yyvsp[(3) - (4)].reg), 10 | ((yyvsp[(4) - (4)].r0).r0 ? 0: 1)); + } + else + return yyerror ("Register mismatch"); + } + else + return yyerror ("Low reg expected"); + } + break; + + case 48: +#line 1195 "bfin-parse.y" + { + notethat ("LDIMMhalf: pregs_half = imm16\n"); + + if (!IS_DREG ((yyvsp[(1) - (3)].reg)) && !IS_PREG ((yyvsp[(1) - (3)].reg)) && !IS_IREG ((yyvsp[(1) - (3)].reg)) + && !IS_MREG ((yyvsp[(1) - (3)].reg)) && !IS_BREG ((yyvsp[(1) - (3)].reg)) && !IS_LREG ((yyvsp[(1) - (3)].reg))) + return yyerror ("Wrong register for load immediate"); + + if (!IS_IMM ((yyvsp[(3) - (3)].expr), 16) && !IS_UIMM ((yyvsp[(3) - (3)].expr), 16)) + return yyerror ("Constant out of range"); + + (yyval.instr) = LDIMMHALF_R (&(yyvsp[(1) - (3)].reg), IS_H ((yyvsp[(1) - (3)].reg)), 0, 0, (yyvsp[(3) - (3)].expr)); + } + break; + + case 49: +#line 1209 "bfin-parse.y" + { + notethat ("dsp32alu: An = 0\n"); + + if (imm7 ((yyvsp[(2) - (2)].expr)) != 0) + return yyerror ("0 expected"); + + (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(1) - (2)].reg))); + } + break; + + case 50: +#line 1219 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (4)].reg)) && !IS_PREG ((yyvsp[(1) - (4)].reg)) && !IS_IREG ((yyvsp[(1) - (4)].reg)) + && !IS_MREG ((yyvsp[(1) - (4)].reg)) && !IS_BREG ((yyvsp[(1) - (4)].reg)) && !IS_LREG ((yyvsp[(1) - (4)].reg))) + return yyerror ("Wrong register for load immediate"); + + if ((yyvsp[(4) - (4)].r0).r0 == 0) + { + /* 7 bit immediate value if possible. + We will check for that constant value for efficiency + If it goes to reloc, it will be 16 bit. */ + if (IS_CONST ((yyvsp[(3) - (4)].expr)) && IS_IMM ((yyvsp[(3) - (4)].expr), 7) && IS_DREG ((yyvsp[(1) - (4)].reg))) + { + notethat ("COMPI2opD: dregs = imm7 (x) \n"); + (yyval.instr) = COMPI2OPD (&(yyvsp[(1) - (4)].reg), imm7 ((yyvsp[(3) - (4)].expr)), 0); + } + else if (IS_CONST ((yyvsp[(3) - (4)].expr)) && IS_IMM ((yyvsp[(3) - (4)].expr), 7) && IS_PREG ((yyvsp[(1) - (4)].reg))) + { + notethat ("COMPI2opP: pregs = imm7 (x)\n"); + (yyval.instr) = COMPI2OPP (&(yyvsp[(1) - (4)].reg), imm7 ((yyvsp[(3) - (4)].expr)), 0); + } + else + { + if (IS_CONST ((yyvsp[(3) - (4)].expr)) && !IS_IMM ((yyvsp[(3) - (4)].expr), 16)) + return yyerror ("Immediate value out of range"); + + notethat ("LDIMMhalf: regs = luimm16 (x)\n"); + /* reg, H, S, Z. */ + (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[(1) - (4)].reg), 0, 1, 0, (yyvsp[(3) - (4)].expr)); + } + } + else + { + /* (z) There is no 7 bit zero extended instruction. + If the expr is a relocation, generate it. */ + + if (IS_CONST ((yyvsp[(3) - (4)].expr)) && !IS_UIMM ((yyvsp[(3) - (4)].expr), 16)) + return yyerror ("Immediate value out of range"); + + notethat ("LDIMMhalf: regs = luimm16 (x)\n"); + /* reg, H, S, Z. */ + (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[(1) - (4)].reg), 0, 0, 1, (yyvsp[(3) - (4)].expr)); + } + } + break; + + case 51: +#line 1264 "bfin-parse.y" + { + if (IS_H ((yyvsp[(1) - (3)].reg))) + return yyerror ("Low reg expected"); + + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_A0x) + { + notethat ("dsp32alu: dregs_lo = A0.x\n"); + (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[(1) - (3)].reg), 0, 0, 0, 0, 0); + } + else if (IS_DREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_A1x) + { + notethat ("dsp32alu: dregs_lo = A1.x\n"); + (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[(1) - (3)].reg), 0, 0, 0, 0, 1); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 52: +#line 1283 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + { + notethat ("dsp32alu: dregs = dregs .|. dregs (amod0)\n"); + (yyval.instr) = DSP32ALU (0, 0, 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, (yyvsp[(6) - (6)].modcodes).x0, (yyvsp[(4) - (6)].r0).r0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 53: +#line 1294 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("ALU2op: dregs = dregs_byte\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (4)].reg), &(yyvsp[(3) - (4)].reg), 12 | ((yyvsp[(4) - (4)].r0).r0 ? 0: 1)); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 54: +#line 1305 "bfin-parse.y" + { + if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg))) + { + notethat ("dsp32alu: A1 = ABS A1 , A0 = ABS A0\n"); + (yyval.instr) = DSP32ALU (16, 0, 0, 0, 0, 0, 0, 0, 3); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 55: +#line 1316 "bfin-parse.y" + { + if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg))) + { + notethat ("dsp32alu: A1 = - A1 , A0 = - A0\n"); + (yyval.instr) = DSP32ALU (14, 0, 0, 0, 0, 0, 0, 0, 3); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 56: +#line 1327 "bfin-parse.y" + { + if (!IS_A1 ((yyvsp[(1) - (3)].reg)) && IS_A1 ((yyvsp[(2) - (3)].reg))) + { + notethat ("dsp32alu: A0 -= A1\n"); + (yyval.instr) = DSP32ALU (11, 0, 0, 0, 0, 0, (yyvsp[(3) - (3)].r0).r0, 0, 3); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 57: +#line 1338 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(1) - (3)].reg)) && EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 4) + { + notethat ("dagMODik: iregs -= 4\n"); + (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 3); + } + else if (IS_IREG ((yyvsp[(1) - (3)].reg)) && EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 2) + { + notethat ("dagMODik: iregs -= 2\n"); + (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 1); + } + else + return yyerror ("Register or value mismatch"); + } + break; + + case 58: +#line 1354 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(1) - (6)].reg)) && IS_MREG ((yyvsp[(3) - (6)].reg))) + { + notethat ("dagMODim: iregs += mregs (opt_brev)\n"); + /* i, m, op, br. */ + (yyval.instr) = DAGMODIM (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 0, 1); + } + else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg))) + { + notethat ("PTR2op: pregs += pregs (BREV )\n"); + (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 5); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 59: +#line 1371 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("dagMODim: iregs -= mregs\n"); + (yyval.instr) = DAGMODIM (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 1, 0); + } + else if (IS_PREG ((yyvsp[(1) - (3)].reg)) && IS_PREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("PTR2op: pregs -= pregs\n"); + (yyval.instr) = PTR2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 60: +#line 1387 "bfin-parse.y" + { + if (!IS_A1 ((yyvsp[(1) - (4)].reg)) && IS_A1 ((yyvsp[(3) - (4)].reg))) + { + notethat ("dsp32alu: A0 += A1 (W32)\n"); + (yyval.instr) = DSP32ALU (11, 0, 0, 0, 0, 0, (yyvsp[(4) - (4)].r0).r0, 0, 2); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 61: +#line 1398 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("dagMODim: iregs += mregs\n"); + (yyval.instr) = DAGMODIM (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 0, 0); + } + else + return yyerror ("iregs += mregs expected"); + } + break; + + case 62: +#line 1409 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(1) - (3)].reg))) + { + if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 4) + { + notethat ("dagMODik: iregs += 4\n"); + (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 2); + } + else if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 2) + { + notethat ("dagMODik: iregs += 2\n"); + (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 0); + } + else + return yyerror ("iregs += [ 2 | 4 "); + } + else if (IS_PREG ((yyvsp[(1) - (3)].reg)) && IS_IMM ((yyvsp[(3) - (3)].expr), 7)) + { + notethat ("COMPI2opP: pregs += imm7\n"); + (yyval.instr) = COMPI2OPP (&(yyvsp[(1) - (3)].reg), imm7 ((yyvsp[(3) - (3)].expr)), 1); + } + else if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_IMM ((yyvsp[(3) - (3)].expr), 7)) + { + notethat ("COMPI2opD: dregs += imm7\n"); + (yyval.instr) = COMPI2OPD (&(yyvsp[(1) - (3)].reg), imm7 ((yyvsp[(3) - (3)].expr)), 1); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 63: +#line 1440 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("ALU2op: dregs *= dregs\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 3); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 64: +#line 1451 "bfin-parse.y" + { + if (!valid_dreg_pair (&(yyvsp[(3) - (11)].reg), (yyvsp[(5) - (11)].expr))) + return yyerror ("Bad dreg pair"); + else if (!valid_dreg_pair (&(yyvsp[(7) - (11)].reg), (yyvsp[(9) - (11)].expr))) + return yyerror ("Bad dreg pair"); + else + { + notethat ("dsp32alu: SAA (dregs_pair , dregs_pair ) (aligndir)\n"); + (yyval.instr) = DSP32ALU (18, 0, 0, 0, &(yyvsp[(3) - (11)].reg), &(yyvsp[(7) - (11)].reg), (yyvsp[(11) - (11)].r0).r0, 0, 0); + } + } + break; + + case 65: +#line 1464 "bfin-parse.y" + { + if (REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(2) - (11)].reg)) && REG_SAME ((yyvsp[(7) - (11)].reg), (yyvsp[(8) - (11)].reg)) && !REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(7) - (11)].reg))) + { + notethat ("dsp32alu: A1 = A1 (S) , A0 = A0 (S)\n"); + (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 1, 0, 2); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 66: +#line 1475 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(4) - (9)].reg)) && IS_DREG ((yyvsp[(6) - (9)].reg)) + && REG_SAME ((yyvsp[(1) - (9)].reg), (yyvsp[(4) - (9)].reg))) + { + if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 1) + { + notethat ("ALU2op: dregs = (dregs + dregs) << 1\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 4); + } + else if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 2) + { + notethat ("ALU2op: dregs = (dregs + dregs) << 2\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 5); + } + else + return yyerror ("Bad shift value"); + } + else if (IS_PREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(4) - (9)].reg)) && IS_PREG ((yyvsp[(6) - (9)].reg)) + && REG_SAME ((yyvsp[(1) - (9)].reg), (yyvsp[(4) - (9)].reg))) + { + if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 1) + { + notethat ("PTR2op: pregs = (pregs + pregs) << 1\n"); + (yyval.instr) = PTR2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 6); + } + else if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 2) + { + notethat ("PTR2op: pregs = (pregs + pregs) << 2\n"); + (yyval.instr) = PTR2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 7); + } + else + return yyerror ("Bad shift value"); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 67: +#line 1514 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) + { + notethat ("COMP3op: dregs = dregs | dregs\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(3) - (5)].reg), &(yyvsp[(5) - (5)].reg), 3); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 68: +#line 1524 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) + { + notethat ("COMP3op: dregs = dregs ^ dregs\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(3) - (5)].reg), &(yyvsp[(5) - (5)].reg), 4); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 69: +#line 1534 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(3) - (9)].reg)) && IS_PREG ((yyvsp[(6) - (9)].reg))) + { + if (EXPR_VALUE ((yyvsp[(8) - (9)].expr)) == 1) + { + notethat ("COMP3op: pregs = pregs + (pregs << 1)\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(3) - (9)].reg), &(yyvsp[(6) - (9)].reg), 6); + } + else if (EXPR_VALUE ((yyvsp[(8) - (9)].expr)) == 2) + { + notethat ("COMP3op: pregs = pregs + (pregs << 2)\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(3) - (9)].reg), &(yyvsp[(6) - (9)].reg), 7); + } + else + return yyerror ("Bad shift value"); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 70: +#line 1554 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + { + notethat ("CCflag: CC = A0 == A1\n"); + (yyval.instr) = CCFLAG (0, 0, 5, 0, 0); + } + else + return yyerror ("CC register expected"); + } + break; + + case 71: +#line 1564 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + { + notethat ("CCflag: CC = A0 < A1\n"); + (yyval.instr) = CCFLAG (0, 0, 6, 0, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 72: +#line 1574 "bfin-parse.y" + { + if (REG_CLASS((yyvsp[(3) - (6)].reg)) == REG_CLASS((yyvsp[(5) - (6)].reg))) + { + notethat ("CCflag: CC = dpregs < dpregs\n"); + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK, (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); + } + else + return yyerror ("Compare only of same register class"); + } + break; + + case 73: +#line 1584 "bfin-parse.y" + { + if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3)) + || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3))) + { + notethat ("CCflag: CC = dpregs < (u)imm3\n"); + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), (yyvsp[(6) - (6)].r0).r0, 1, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); + } + else + return yyerror ("Bad constant value"); + } + break; + + case 74: +#line 1595 "bfin-parse.y" + { + if (REG_CLASS((yyvsp[(3) - (5)].reg)) == REG_CLASS((yyvsp[(5) - (5)].reg))) + { + notethat ("CCflag: CC = dpregs == dpregs\n"); + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[(3) - (5)].reg)) ? 1 : 0); + } + } + break; + + case 75: +#line 1603 "bfin-parse.y" + { + if (IS_IMM ((yyvsp[(5) - (5)].expr), 3)) + { + notethat ("CCflag: CC = dpregs == imm3\n"); + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (5)].reg), imm3 ((yyvsp[(5) - (5)].expr)), 0, 1, IS_PREG ((yyvsp[(3) - (5)].reg)) ? 1 : 0); + } + else + return yyerror ("Bad constant range"); + } + break; + + case 76: +#line 1613 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + { + notethat ("CCflag: CC = A0 <= A1\n"); + (yyval.instr) = CCFLAG (0, 0, 7, 0, 0); + } + else + return yyerror ("CC register expected"); + } + break; + + case 77: +#line 1623 "bfin-parse.y" + { + if (REG_CLASS((yyvsp[(3) - (6)].reg)) == REG_CLASS((yyvsp[(5) - (6)].reg))) + { + notethat ("CCflag: CC = pregs <= pregs (..)\n"); + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK, + 1 + (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); + } + else + return yyerror ("Compare only of same register class"); + } + break; + + case 78: +#line 1634 "bfin-parse.y" + { + if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3)) + || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3))) + { + if (IS_DREG ((yyvsp[(3) - (6)].reg))) + { + notethat ("CCflag: CC = dregs <= (u)imm3\n"); + /* x y opc I G */ + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, 0); + } + else if (IS_PREG ((yyvsp[(3) - (6)].reg))) + { + notethat ("CCflag: CC = pregs <= (u)imm3\n"); + /* x y opc I G */ + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, 1); + } + else + return yyerror ("Dreg or Preg expected"); + } + else + return yyerror ("Bad constant value"); + } + break; + + case 79: +#line 1658 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) + { + notethat ("COMP3op: dregs = dregs & dregs\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(3) - (5)].reg), &(yyvsp[(5) - (5)].reg), 2); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 80: +#line 1669 "bfin-parse.y" + { + notethat ("CC2stat operation\n"); + (yyval.instr) = bfin_gen_cc2stat ((yyvsp[(1) - (1)].modcodes).r0, (yyvsp[(1) - (1)].modcodes).x0, (yyvsp[(1) - (1)].modcodes).s0); + } + break; + + case 81: +#line 1675 "bfin-parse.y" + { + if (IS_ALLREG ((yyvsp[(1) - (3)].reg)) && IS_ALLREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("REGMV: allregs = allregs\n"); + (yyval.instr) = bfin_gen_regmv (&(yyvsp[(3) - (3)].reg), &(yyvsp[(1) - (3)].reg)); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 82: +#line 1686 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("CC2dreg: CC = dregs\n"); + (yyval.instr) = bfin_gen_cc2dreg (1, &(yyvsp[(3) - (3)].reg)); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 83: +#line 1697 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg))) + { + notethat ("CC2dreg: dregs = CC\n"); + (yyval.instr) = bfin_gen_cc2dreg (0, &(yyvsp[(1) - (3)].reg)); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 84: +#line 1708 "bfin-parse.y" + { + notethat ("CC2dreg: CC =! CC\n"); + (yyval.instr) = bfin_gen_cc2dreg (3, 0); + } + break; + + case 85: +#line 1716 "bfin-parse.y" + { + notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n"); + + if (!IS_H ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM) + return yyerror ("(M) not allowed with MAC0"); + + if (IS_H ((yyvsp[(1) - (4)].reg))) + { + (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (4)].mod).MM, (yyvsp[(4) - (4)].mod).mod, 1, 0, + IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1), 0, 0, + &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 0); + } + else + { + (yyval.instr) = DSP32MULT (0, 0, (yyvsp[(4) - (4)].mod).mod, 0, 0, + 0, 0, IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1), + &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 1); + } + } + break; + + case 86: +#line 1737 "bfin-parse.y" + { + /* Odd registers can use (M). */ + if (!IS_DREG ((yyvsp[(1) - (4)].reg))) + return yyerror ("Dreg expected"); + + if (IS_EVEN ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM) + return yyerror ("(M) not allowed with MAC0"); + + if (!IS_EVEN ((yyvsp[(1) - (4)].reg))) + { + notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n"); + + (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (4)].mod).MM, (yyvsp[(4) - (4)].mod).mod, 1, 1, + IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1), 0, 0, + &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 0); + } + else + { + notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n"); + (yyval.instr) = DSP32MULT (0, 0, (yyvsp[(4) - (4)].mod).mod, 0, 1, + 0, 0, IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1), + &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 1); + } + } + break; + + case 87: +#line 1764 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg))) + return yyerror ("Dregs expected"); + + if (!IS_HCOMPL((yyvsp[(1) - (9)].reg), (yyvsp[(6) - (9)].reg))) + return yyerror ("Dest registers mismatch"); + + if (check_multiply_halfregs (&(yyvsp[(3) - (9)].macfunc), &(yyvsp[(8) - (9)].macfunc)) < 0) + return -1; + + if ((!IS_H ((yyvsp[(1) - (9)].reg)) && (yyvsp[(4) - (9)].mod).MM) + || (!IS_H ((yyvsp[(6) - (9)].reg)) && (yyvsp[(9) - (9)].mod).MM)) + return yyerror ("(M) not allowed with MAC0"); + + notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, " + "dregs_lo = multiply_halfregs opt_mode\n"); + + if (IS_H ((yyvsp[(1) - (9)].reg))) + (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 0, + IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1), IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1), + &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1); + else + (yyval.instr) = DSP32MULT (0, (yyvsp[(9) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 0, + IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1), IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1), + &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1); + } + break; + + case 88: +#line 1792 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg))) + return yyerror ("Dregs expected"); + + if ((IS_EVEN ((yyvsp[(1) - (9)].reg)) && (yyvsp[(6) - (9)].reg).regno - (yyvsp[(1) - (9)].reg).regno != 1) + || (IS_EVEN ((yyvsp[(6) - (9)].reg)) && (yyvsp[(1) - (9)].reg).regno - (yyvsp[(6) - (9)].reg).regno != 1)) + return yyerror ("Dest registers mismatch"); + + if (check_multiply_halfregs (&(yyvsp[(3) - (9)].macfunc), &(yyvsp[(8) - (9)].macfunc)) < 0) + return -1; + + if ((IS_EVEN ((yyvsp[(1) - (9)].reg)) && (yyvsp[(4) - (9)].mod).MM) + || (IS_EVEN ((yyvsp[(6) - (9)].reg)) && (yyvsp[(9) - (9)].mod).MM)) + return yyerror ("(M) not allowed with MAC0"); + + notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, " + "dregs = multiply_halfregs opt_mode\n"); + + if (IS_EVEN ((yyvsp[(1) - (9)].reg))) + (yyval.instr) = DSP32MULT (0, (yyvsp[(9) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 1, + IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1), IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1), + &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1); + else + (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 1, + IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1), IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1), + &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1); + } + break; + + case 89: +#line 1823 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg))) + return yyerror ("Aregs must be same"); + + if (IS_DREG ((yyvsp[(5) - (5)].reg)) && !IS_H ((yyvsp[(5) - (5)].reg))) + { + notethat ("dsp32shift: A0 = ASHIFT A0 BY dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[(5) - (5)].reg), 0, 0, IS_A1 ((yyvsp[(1) - (5)].reg))); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 90: +#line 1837 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(6) - (7)].reg)) && !IS_H ((yyvsp[(6) - (7)].reg))) + { + notethat ("dsp32shift: dregs_half = ASHIFT dregs_half BY dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (0, &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), &(yyvsp[(4) - (7)].reg), (yyvsp[(7) - (7)].modcodes).s0, HL2 ((yyvsp[(1) - (7)].reg), (yyvsp[(4) - (7)].reg))); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 91: +#line 1848 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg))) + return yyerror ("Aregs must be same"); + + if (IS_UIMM ((yyvsp[(4) - (4)].expr), 5)) + { + notethat ("dsp32shiftimm: A0 = A0 << uimm5\n"); + (yyval.instr) = DSP32SHIFTIMM (3, 0, imm5 ((yyvsp[(4) - (4)].expr)), 0, 0, IS_A1 ((yyvsp[(1) - (4)].reg))); + } + else + return yyerror ("Bad shift value"); + } + break; + + case 92: +#line 1862 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + if ((yyvsp[(6) - (6)].modcodes).r0) + { + /* Vector? */ + notethat ("dsp32shiftimm: dregs = dregs << expr (V, .)\n"); + (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[(1) - (6)].reg), imm4 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0 ? 1 : 2, 0); + } + else + { + notethat ("dsp32shiftimm: dregs = dregs << uimm5 (.)\n"); + (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), imm6 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0 ? 1 : 2, 0); + } + } + else if ((yyvsp[(6) - (6)].modcodes).s0 == 0 && IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg))) + { + if (EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 2) + { + notethat ("PTR2op: pregs = pregs << 2\n"); + (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 1); + } + else if (EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 1) + { + notethat ("COMP3op: pregs = pregs << 1\n"); + (yyval.instr) = COMP3OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(3) - (6)].reg), 5); + } + else + return yyerror ("Bad shift value"); + } + else + return yyerror ("Bad shift value or register"); + } + break; + + case 93: +#line 1896 "bfin-parse.y" + { + if (IS_UIMM ((yyvsp[(5) - (5)].expr), 4)) + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); + (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (5)].reg), imm5 ((yyvsp[(5) - (5)].expr)), &(yyvsp[(3) - (5)].reg), 2, HL2 ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg))); + } + else + return yyerror ("Bad shift value"); + } + break; + + case 94: +#line 1906 "bfin-parse.y" + { + if (IS_UIMM ((yyvsp[(5) - (6)].expr), 4)) + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); + (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + } + else + return yyerror ("Bad shift value"); + } + break; + + case 95: +#line 1916 "bfin-parse.y" + { + int op; + + if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(4) - (7)].reg)) && IS_DREG ((yyvsp[(6) - (7)].reg)) && !IS_H ((yyvsp[(6) - (7)].reg))) + { + if ((yyvsp[(7) - (7)].modcodes).r0) + { + op = 1; + notethat ("dsp32shift: dregs = ASHIFT dregs BY " + "dregs_lo (V, .)\n"); + } + else + { + + op = 2; + notethat ("dsp32shift: dregs = ASHIFT dregs BY dregs_lo (.)\n"); + } + (yyval.instr) = DSP32SHIFT (op, &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), &(yyvsp[(4) - (7)].reg), (yyvsp[(7) - (7)].modcodes).s0, 0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 96: +#line 1941 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(1) - (9)].reg)) && IS_DREG_L ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg))) + { + notethat ("dsp32shift: dregs_lo = EXPADJ (dregs , dregs_lo )\n"); + (yyval.instr) = DSP32SHIFT (7, &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), &(yyvsp[(5) - (9)].reg), (yyvsp[(9) - (9)].r0).r0, 0); + } + else + return yyerror ("Bad shift value or register"); + } + break; + + case 97: +#line 1953 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(1) - (8)].reg)) && IS_DREG_L ((yyvsp[(5) - (8)].reg)) && IS_DREG_L ((yyvsp[(7) - (8)].reg))) + { + notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_lo, dregs_lo)\n"); + (yyval.instr) = DSP32SHIFT (7, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), 2, 0); + } + else if (IS_DREG_L ((yyvsp[(1) - (8)].reg)) && IS_DREG_H ((yyvsp[(5) - (8)].reg)) && IS_DREG_L ((yyvsp[(7) - (8)].reg))) + { + notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_hi, dregs_lo)\n"); + (yyval.instr) = DSP32SHIFT (7, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), 3, 0); + } + else + return yyerror ("Bad shift value or register"); + } + break; + + case 98: +#line 1971 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) + { + notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs )\n"); + (yyval.instr) = DSP32SHIFT (10, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), 2, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 99: +#line 1982 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(5) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg))) + { + notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs ) (X)\n"); + (yyval.instr) = DSP32SHIFT (10, &(yyvsp[(1) - (11)].reg), &(yyvsp[(7) - (11)].reg), &(yyvsp[(5) - (11)].reg), 3, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 100: +#line 1993 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg))) + { + notethat ("dsp32shift: dregs = EXTRACT (dregs, dregs_lo ) (.)\n"); + (yyval.instr) = DSP32SHIFT (10, &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), &(yyvsp[(5) - (9)].reg), (yyvsp[(9) - (9)].r0).r0, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 101: +#line 2004 "bfin-parse.y" + { + if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg))) + return yyerror ("Aregs must be same"); + + if (IS_UIMM ((yyvsp[(4) - (4)].expr), 5)) + { + notethat ("dsp32shiftimm: Ax = Ax >>> uimm5\n"); + (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[(4) - (4)].expr)), 0, 0, IS_A1 ((yyvsp[(1) - (4)].reg))); + } + else + return yyerror ("Shift value range error"); + } + break; + + case 102: +#line 2017 "bfin-parse.y" + { + if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg))) + { + notethat ("dsp32shift: Ax = LSHIFT Ax BY dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[(5) - (5)].reg), 0, 1, IS_A1 ((yyvsp[(1) - (5)].reg))); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 103: +#line 2028 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) + { + notethat ("dsp32shift: dregs_lo = LSHIFT dregs_hi BY dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 2, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(4) - (6)].reg))); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 104: +#line 2039 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(4) - (7)].reg)) && IS_DREG_L ((yyvsp[(6) - (7)].reg))) + { + notethat ("dsp32shift: dregs = LSHIFT dregs BY dregs_lo (V )\n"); + (yyval.instr) = DSP32SHIFT ((yyvsp[(7) - (7)].r0).r0 ? 1: 2, &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), &(yyvsp[(4) - (7)].reg), 2, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 105: +#line 2050 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) + { + notethat ("dsp32shift: dregs = SHIFT dregs BY dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (2, &(yyvsp[(1) - (6)].reg), &(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 2, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 106: +#line 2061 "bfin-parse.y" + { + if (REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg)) && IS_IMM ((yyvsp[(4) - (4)].expr), 6) >= 0) + { + notethat ("dsp32shiftimm: Ax = Ax >> imm6\n"); + (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[(4) - (4)].expr)), 0, 1, IS_A1 ((yyvsp[(1) - (4)].reg))); + } + else + return yyerror ("Accu register expected"); + } + break; + + case 107: +#line 2072 "bfin-parse.y" + { + if ((yyvsp[(6) - (6)].r0).r0 == 1) + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + notethat ("dsp32shiftimm: dregs = dregs >> uimm5 (V)\n"); + (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), 2, 0); + } + else + return yyerror ("Register mismatch"); + } + else + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + notethat ("dsp32shiftimm: dregs = dregs >> uimm5\n"); + (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), -imm6 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), 2, 0); + } + else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)) && EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 2) + { + notethat ("PTR2op: pregs = pregs >> 2\n"); + (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 3); + } + else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)) && EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 1) + { + notethat ("PTR2op: pregs = pregs >> 1\n"); + (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 4); + } + else + return yyerror ("Register mismatch"); + } + } + break; + + case 108: +#line 2105 "bfin-parse.y" + { + if (IS_UIMM ((yyvsp[(5) - (5)].expr), 5)) + { + notethat ("dsp32shiftimm: dregs_half = dregs_half >> uimm5\n"); + (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[(1) - (5)].reg), -uimm5 ((yyvsp[(5) - (5)].expr)), &(yyvsp[(3) - (5)].reg), 2, HL2 ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg))); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 109: +#line 2115 "bfin-parse.y" + { + if (IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + notethat ("dsp32shiftimm: dregs_half = dregs_half >>> uimm5\n"); + (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), + (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + } + else + return yyerror ("Register or modifier mismatch"); + } + break; + + case 110: +#line 2128 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + if ((yyvsp[(6) - (6)].modcodes).r0) + { + /* Vector? */ + notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (V, .)\n"); + (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, 0); + } + else + { + notethat ("dsp32shiftimm: dregs = dregs >>> uimm5 (.)\n"); + (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, 0); + } + } + else + return yyerror ("Register mismatch"); + } + break; + + case 111: +#line 2148 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) + { + notethat ("dsp32shift: dregs_lo = ONES dregs\n"); + (yyval.instr) = DSP32SHIFT (6, &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(4) - (4)].reg), 3, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 112: +#line 2159 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) + { + notethat ("dsp32shift: dregs = PACK (dregs_hi , dregs_hi )\n"); + (yyval.instr) = DSP32SHIFT (4, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), HL2 ((yyvsp[(5) - (8)].reg), (yyvsp[(7) - (8)].reg)), 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 113: +#line 2170 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (10)].reg)) + && (yyvsp[(7) - (10)].reg).regno == REG_A0 + && IS_DREG ((yyvsp[(9) - (10)].reg)) && !IS_H ((yyvsp[(1) - (10)].reg)) && !IS_A1 ((yyvsp[(7) - (10)].reg))) + { + notethat ("dsp32shift: dregs_lo = CC = BXORSHIFT (A0 , dregs )\n"); + (yyval.instr) = DSP32SHIFT (11, &(yyvsp[(1) - (10)].reg), &(yyvsp[(9) - (10)].reg), 0, 0, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 114: +#line 2183 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (10)].reg)) + && (yyvsp[(7) - (10)].reg).regno == REG_A0 + && IS_DREG ((yyvsp[(9) - (10)].reg)) && !IS_H ((yyvsp[(1) - (10)].reg)) && !IS_A1 ((yyvsp[(7) - (10)].reg))) + { + notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , dregs)\n"); + (yyval.instr) = DSP32SHIFT (11, &(yyvsp[(1) - (10)].reg), &(yyvsp[(9) - (10)].reg), 0, 1, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 115: +#line 2196 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (12)].reg)) && !IS_H ((yyvsp[(1) - (12)].reg)) && !REG_SAME ((yyvsp[(7) - (12)].reg), (yyvsp[(9) - (12)].reg))) + { + notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , A1 , CC)\n"); + (yyval.instr) = DSP32SHIFT (12, &(yyvsp[(1) - (12)].reg), 0, 0, 1, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 116: +#line 2207 "bfin-parse.y" + { + if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg))) + { + notethat ("dsp32shift: Ax = ROT Ax BY dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[(5) - (5)].reg), 0, 2, IS_A1 ((yyvsp[(1) - (5)].reg))); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 117: +#line 2218 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) + { + notethat ("dsp32shift: dregs = ROT dregs BY dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (2, &(yyvsp[(1) - (6)].reg), &(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 3, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 118: +#line 2229 "bfin-parse.y" + { + if (IS_IMM ((yyvsp[(5) - (5)].expr), 6)) + { + notethat ("dsp32shiftimm: An = ROT An BY imm6\n"); + (yyval.instr) = DSP32SHIFTIMM (3, 0, imm6 ((yyvsp[(5) - (5)].expr)), 0, 2, IS_A1 ((yyvsp[(1) - (5)].reg))); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 119: +#line 2240 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_IMM ((yyvsp[(6) - (6)].expr), 6)) + { + (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), imm6 ((yyvsp[(6) - (6)].expr)), &(yyvsp[(4) - (6)].reg), 3, IS_A1 ((yyvsp[(1) - (6)].reg))); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 120: +#line 2250 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(1) - (4)].reg))) + { + notethat ("dsp32shift: dregs_lo = SIGNBITS An\n"); + (yyval.instr) = DSP32SHIFT (6, &(yyvsp[(1) - (4)].reg), 0, 0, IS_A1 ((yyvsp[(4) - (4)].reg)), 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 121: +#line 2261 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) + { + notethat ("dsp32shift: dregs_lo = SIGNBITS dregs\n"); + (yyval.instr) = DSP32SHIFT (5, &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(4) - (4)].reg), 0, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 122: +#line 2272 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(1) - (4)].reg))) + { + notethat ("dsp32shift: dregs_lo = SIGNBITS dregs_lo\n"); + (yyval.instr) = DSP32SHIFT (5, &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(4) - (4)].reg), 1 + IS_H ((yyvsp[(4) - (4)].reg)), 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 123: +#line 2284 "bfin-parse.y" + { + if (IS_DREG_L ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(5) - (7)].reg))) + { + notethat ("dsp32shift: dregs_lo = VIT_MAX (dregs) (..)\n"); + (yyval.instr) = DSP32SHIFT (9, &(yyvsp[(1) - (7)].reg), 0, &(yyvsp[(5) - (7)].reg), ((yyvsp[(7) - (7)].r0).r0 ? 0 : 1), 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 124: +#line 2295 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG ((yyvsp[(7) - (9)].reg))) + { + notethat ("dsp32shift: dregs = VIT_MAX (dregs, dregs) (ASR)\n"); + (yyval.instr) = DSP32SHIFT (9, &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), &(yyvsp[(5) - (9)].reg), 2 | ((yyvsp[(9) - (9)].r0).r0 ? 0 : 1), 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 125: +#line 2306 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && !IS_A1 ((yyvsp[(7) - (9)].reg))) + { + notethat ("dsp32shift: BITMUX (dregs , dregs , A0) (ASR)\n"); + (yyval.instr) = DSP32SHIFT (8, 0, &(yyvsp[(3) - (9)].reg), &(yyvsp[(5) - (9)].reg), (yyvsp[(9) - (9)].r0).r0, 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 126: +#line 2317 "bfin-parse.y" + { + if (!IS_A1 ((yyvsp[(1) - (9)].reg)) && !IS_A1 ((yyvsp[(4) - (9)].reg)) && IS_A1 ((yyvsp[(6) - (9)].reg))) + { + notethat ("dsp32shift: A0 = BXORSHIFT (A0 , A1 , CC )\n"); + (yyval.instr) = DSP32SHIFT (12, 0, 0, 0, 0, 0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 127: +#line 2330 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(3) - (6)].reg), uimm5 ((yyvsp[(5) - (6)].expr)), 4); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 128: +#line 2342 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(3) - (6)].reg), uimm5 ((yyvsp[(5) - (6)].expr)), 2); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 129: +#line 2354 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) + { + notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(3) - (6)].reg), uimm5 ((yyvsp[(5) - (6)].expr)), 3); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 130: +#line 2365 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5)) + { + notethat ("LOGI2op: CC =! BITTST (dregs , uimm5 )\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(5) - (8)].reg), uimm5 ((yyvsp[(7) - (8)].expr)), 0); + } + else + return yyerror ("Register mismatch or value error"); + } + break; + + case 131: +#line 2376 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5)) + { + notethat ("LOGI2op: CC = BITTST (dregs , uimm5 )\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(5) - (8)].reg), uimm5 ((yyvsp[(7) - (8)].expr)), 1); + } + else + return yyerror ("Register mismatch or value error"); + } + break; + + case 132: +#line 2387 "bfin-parse.y" + { + if ((IS_DREG ((yyvsp[(4) - (6)].reg)) || IS_PREG ((yyvsp[(4) - (6)].reg))) + && (IS_DREG ((yyvsp[(6) - (6)].reg)) || IS_PREG ((yyvsp[(6) - (6)].reg)))) + { + notethat ("ccMV: IF ! CC gregs = gregs\n"); + (yyval.instr) = CCMV (&(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 0); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 133: +#line 2399 "bfin-parse.y" + { + if ((IS_DREG ((yyvsp[(5) - (5)].reg)) || IS_PREG ((yyvsp[(5) - (5)].reg))) + && (IS_DREG ((yyvsp[(3) - (5)].reg)) || IS_PREG ((yyvsp[(3) - (5)].reg)))) + { + notethat ("ccMV: IF CC gregs = gregs\n"); + (yyval.instr) = CCMV (&(yyvsp[(5) - (5)].reg), &(yyvsp[(3) - (5)].reg), 1); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 134: +#line 2411 "bfin-parse.y" + { + if (IS_PCREL10 ((yyvsp[(5) - (5)].expr))) + { + notethat ("BRCC: IF !CC JUMP pcrel11m2\n"); + (yyval.instr) = BRCC (0, 0, (yyvsp[(5) - (5)].expr)); + } + else + return yyerror ("Bad jump offset"); + } + break; + + case 135: +#line 2422 "bfin-parse.y" + { + if (IS_PCREL10 ((yyvsp[(5) - (8)].expr))) + { + notethat ("BRCC: IF !CC JUMP pcrel11m2\n"); + (yyval.instr) = BRCC (0, 1, (yyvsp[(5) - (8)].expr)); + } + else + return yyerror ("Bad jump offset"); + } + break; + + case 136: +#line 2433 "bfin-parse.y" + { + if (IS_PCREL10 ((yyvsp[(4) - (4)].expr))) + { + notethat ("BRCC: IF CC JUMP pcrel11m2\n"); + (yyval.instr) = BRCC (1, 0, (yyvsp[(4) - (4)].expr)); + } + else + return yyerror ("Bad jump offset"); + } + break; + + case 137: +#line 2444 "bfin-parse.y" + { + if (IS_PCREL10 ((yyvsp[(4) - (7)].expr))) + { + notethat ("BRCC: IF !CC JUMP pcrel11m2\n"); + (yyval.instr) = BRCC (1, 1, (yyvsp[(4) - (7)].expr)); + } + else + return yyerror ("Bad jump offset"); + } + break; + + case 138: +#line 2454 "bfin-parse.y" + { + notethat ("ProgCtrl: NOP\n"); + (yyval.instr) = PROGCTRL (0, 0); + } + break; + + case 139: +#line 2460 "bfin-parse.y" + { + notethat ("ProgCtrl: RTS\n"); + (yyval.instr) = PROGCTRL (1, 0); + } + break; + + case 140: +#line 2466 "bfin-parse.y" + { + notethat ("ProgCtrl: RTI\n"); + (yyval.instr) = PROGCTRL (1, 1); + } + break; + + case 141: +#line 2472 "bfin-parse.y" + { + notethat ("ProgCtrl: RTX\n"); + (yyval.instr) = PROGCTRL (1, 2); + } + break; + + case 142: +#line 2478 "bfin-parse.y" + { + notethat ("ProgCtrl: RTN\n"); + (yyval.instr) = PROGCTRL (1, 3); + } + break; + + case 143: +#line 2484 "bfin-parse.y" + { + notethat ("ProgCtrl: RTE\n"); + (yyval.instr) = PROGCTRL (1, 4); + } + break; + + case 144: +#line 2490 "bfin-parse.y" + { + notethat ("ProgCtrl: IDLE\n"); + (yyval.instr) = PROGCTRL (2, 0); + } + break; + + case 145: +#line 2496 "bfin-parse.y" + { + notethat ("ProgCtrl: CSYNC\n"); + (yyval.instr) = PROGCTRL (2, 3); + } + break; + + case 146: +#line 2502 "bfin-parse.y" + { + notethat ("ProgCtrl: SSYNC\n"); + (yyval.instr) = PROGCTRL (2, 4); + } + break; + + case 147: +#line 2508 "bfin-parse.y" + { + notethat ("ProgCtrl: EMUEXCPT\n"); + (yyval.instr) = PROGCTRL (2, 5); + } + break; + + case 148: +#line 2514 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(2) - (2)].reg))) + { + notethat ("ProgCtrl: CLI dregs\n"); + (yyval.instr) = PROGCTRL (3, (yyvsp[(2) - (2)].reg).regno & CODE_MASK); + } + else + return yyerror ("Dreg expected for CLI"); + } + break; + + case 149: +#line 2525 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(2) - (2)].reg))) + { + notethat ("ProgCtrl: STI dregs\n"); + (yyval.instr) = PROGCTRL (4, (yyvsp[(2) - (2)].reg).regno & CODE_MASK); + } + else + return yyerror ("Dreg expected for STI"); + } + break; + + case 150: +#line 2536 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("ProgCtrl: JUMP (pregs )\n"); + (yyval.instr) = PROGCTRL (5, (yyvsp[(3) - (4)].reg).regno & CODE_MASK); + } + else + return yyerror ("Bad register for indirect jump"); + } + break; + + case 151: +#line 2547 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("ProgCtrl: CALL (pregs )\n"); + (yyval.instr) = PROGCTRL (6, (yyvsp[(3) - (4)].reg).regno & CODE_MASK); + } + else + return yyerror ("Bad register for indirect call"); + } + break; + + case 152: +#line 2558 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(5) - (6)].reg))) + { + notethat ("ProgCtrl: CALL (PC + pregs )\n"); + (yyval.instr) = PROGCTRL (7, (yyvsp[(5) - (6)].reg).regno & CODE_MASK); + } + else + return yyerror ("Bad register for indirect call"); + } + break; + + case 153: +#line 2569 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(5) - (6)].reg))) + { + notethat ("ProgCtrl: JUMP (PC + pregs )\n"); + (yyval.instr) = PROGCTRL (8, (yyvsp[(5) - (6)].reg).regno & CODE_MASK); + } + else + return yyerror ("Bad register for indirect jump"); + } + break; + + case 154: +#line 2580 "bfin-parse.y" + { + if (IS_UIMM ((yyvsp[(2) - (2)].expr), 4)) + { + notethat ("ProgCtrl: RAISE uimm4\n"); + (yyval.instr) = PROGCTRL (9, uimm4 ((yyvsp[(2) - (2)].expr))); + } + else + return yyerror ("Bad value for RAISE"); + } + break; + + case 155: +#line 2591 "bfin-parse.y" + { + notethat ("ProgCtrl: EMUEXCPT\n"); + (yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[(2) - (2)].expr))); + } + break; + + case 156: +#line 2597 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("ProgCtrl: TESTSET (pregs )\n"); + (yyval.instr) = PROGCTRL (11, (yyvsp[(3) - (4)].reg).regno & CODE_MASK); + } + else + return yyerror ("Preg expected"); + } + break; + + case 157: +#line 2608 "bfin-parse.y" + { + if (IS_PCREL12 ((yyvsp[(2) - (2)].expr))) + { + notethat ("UJUMP: JUMP pcrel12\n"); + (yyval.instr) = UJUMP ((yyvsp[(2) - (2)].expr)); + } + else + return yyerror ("Bad value for relative jump"); + } + break; + + case 158: +#line 2619 "bfin-parse.y" + { + if (IS_PCREL12 ((yyvsp[(2) - (2)].expr))) + { + notethat ("UJUMP: JUMP_DOT_S pcrel12\n"); + (yyval.instr) = UJUMP((yyvsp[(2) - (2)].expr)); + } + else + return yyerror ("Bad value for relative jump"); + } + break; + + case 159: +#line 2630 "bfin-parse.y" + { + if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) + { + notethat ("CALLa: jump.l pcrel24\n"); + (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 0); + } + else + return yyerror ("Bad value for long jump"); + } + break; + + case 160: +#line 2641 "bfin-parse.y" + { + if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) + { + notethat ("CALLa: jump.l pcrel24\n"); + (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 2); + } + else + return yyerror ("Bad value for long jump"); + } + break; + + case 161: +#line 2652 "bfin-parse.y" + { + if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) + { + notethat ("CALLa: CALL pcrel25m2\n"); + (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 1); + } + else + return yyerror ("Bad call address"); + } + break; + + case 162: +#line 2662 "bfin-parse.y" + { + if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) + { + notethat ("CALLa: CALL pcrel25m2\n"); + (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 2); + } + else + return yyerror ("Bad call address"); + } + break; + + case 163: +#line 2675 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 8); + else + return yyerror ("Bad registers for DIVQ"); + } + break; + + case 164: +#line 2683 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 9); + else + return yyerror ("Bad registers for DIVS"); + } + break; + + case 165: +#line 2691 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(4) - (5)].reg))) + { + if ((yyvsp[(5) - (5)].modcodes).r0 == 0 && (yyvsp[(5) - (5)].modcodes).s0 == 0 && (yyvsp[(5) - (5)].modcodes).aop == 0) + { + notethat ("ALU2op: dregs = - dregs\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 14); + } + else if ((yyvsp[(5) - (5)].modcodes).r0 == 1 && (yyvsp[(5) - (5)].modcodes).s0 == 0 && (yyvsp[(5) - (5)].modcodes).aop == 3) + { + notethat ("dsp32alu: dregs = - dregs (.)\n"); + (yyval.instr) = DSP32ALU (15, 0, 0, &(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 0, (yyvsp[(5) - (5)].modcodes).s0, 0, 3); + } + else + { + notethat ("dsp32alu: dregs = - dregs (.)\n"); + (yyval.instr) = DSP32ALU (7, 0, 0, &(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 0, (yyvsp[(5) - (5)].modcodes).s0, 0, 3); + } + } + else + return yyerror ("Dregs expected"); + } + break; + + case 166: +#line 2715 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) + { + notethat ("ALU2op: dregs = ~dregs\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (4)].reg), &(yyvsp[(4) - (4)].reg), 15); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 167: +#line 2726 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("ALU2op: dregs >>= dregs\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 1); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 168: +#line 2737 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) + { + notethat ("LOGI2op: dregs >>= uimm5\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(1) - (3)].reg), uimm5 ((yyvsp[(3) - (3)].expr)), 6); + } + else + return yyerror ("Dregs expected or value error"); + } + break; + + case 169: +#line 2748 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("ALU2op: dregs >>>= dregs\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 0); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 170: +#line 2759 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("ALU2op: dregs <<= dregs\n"); + (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 2); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 171: +#line 2770 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) + { + notethat ("LOGI2op: dregs <<= uimm5\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(1) - (3)].reg), uimm5 ((yyvsp[(3) - (3)].expr)), 7); + } + else + return yyerror ("Dregs expected or const value error"); + } + break; + + case 172: +#line 2782 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) + { + notethat ("LOGI2op: dregs >>>= uimm5\n"); + (yyval.instr) = LOGI2OP ((yyvsp[(1) - (3)].reg), uimm5 ((yyvsp[(3) - (3)].expr)), 5); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 173: +#line 2795 "bfin-parse.y" + { + notethat ("CaCTRL: FLUSH [ pregs ]\n"); + if (IS_PREG ((yyvsp[(3) - (4)].reg))) + (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 2); + else + return yyerror ("Bad register(s) for FLUSH"); + } + break; + + case 174: +#line 2804 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(2) - (2)].reg))) + { + notethat ("CaCTRL: FLUSH [ pregs ++ ]\n"); + (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 2); + } + else + return yyerror ("Bad register(s) for FLUSH"); + } + break; + + case 175: +#line 2815 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("CaCTRL: FLUSHINV [ pregs ]\n"); + (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 1); + } + else + return yyerror ("Bad register(s) for FLUSH"); + } + break; + + case 176: +#line 2826 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(2) - (2)].reg))) + { + notethat ("CaCTRL: FLUSHINV [ pregs ++ ]\n"); + (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 1); + } + else + return yyerror ("Bad register(s) for FLUSH"); + } + break; + + case 177: +#line 2838 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("CaCTRL: IFLUSH [ pregs ]\n"); + (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 3); + } + else + return yyerror ("Bad register(s) for FLUSH"); + } + break; + + case 178: +#line 2849 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(2) - (2)].reg))) + { + notethat ("CaCTRL: IFLUSH [ pregs ++ ]\n"); + (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 3); + } + else + return yyerror ("Bad register(s) for FLUSH"); + } + break; + + case 179: +#line 2860 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (4)].reg))) + { + notethat ("CaCTRL: PREFETCH [ pregs ]\n"); + (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 0); + } + else + return yyerror ("Bad register(s) for PREFETCH"); + } + break; + + case 180: +#line 2871 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(2) - (2)].reg))) + { + notethat ("CaCTRL: PREFETCH [ pregs ++ ]\n"); + (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 0); + } + else + return yyerror ("Bad register(s) for PREFETCH"); + } + break; + + case 181: +#line 2885 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) + { + notethat ("LDST: B [ pregs ] = dregs\n"); + (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 2, 0, 1); + } + else + return yyerror ("Register mismatch"); + } + break; + + case 182: +#line 2897 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_RANGE(16, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 1) && IS_DREG ((yyvsp[(8) - (8)].reg))) + { + notethat ("LDST: B [ pregs + imm16 ] = dregs\n"); + if ((yyvsp[(4) - (8)].r0).r0) + neg_value ((yyvsp[(5) - (8)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 2, 0, (yyvsp[(5) - (8)].expr)); + } + else + return yyerror ("Register mismatch or const size wrong"); + } + break; + + case 183: +#line 2912 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_URANGE (4, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 2) && IS_DREG ((yyvsp[(8) - (8)].reg))) + { + notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n"); + (yyval.instr) = LDSTII (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), (yyvsp[(5) - (8)].expr), 1, 1); + } + else if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_RANGE(16, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 2) && IS_DREG ((yyvsp[(8) - (8)].reg))) + { + notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n"); + if ((yyvsp[(4) - (8)].r0).r0) + neg_value ((yyvsp[(5) - (8)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 1, 0, (yyvsp[(5) - (8)].expr)); + } + else + return yyerror ("Bad register(s) or wrong constant size"); + } + break; + + case 184: +#line 2931 "bfin-parse.y" + { + if (IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) + { + notethat ("LDST: W [ pregs ] = dregs\n"); + (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1, 0, 1); + } + else + return yyerror ("Bad register(s) for STORE"); + } + break; + + case 185: +#line 2942 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(3) - (7)].reg))) + { + notethat ("dspLDST: W [ iregs ] = dregs_half\n"); + (yyval.instr) = DSPLDST (&(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1); + } + else if ((yyvsp[(4) - (7)].modcodes).x0 == 2 && IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) + { + notethat ("LDSTpmod: W [ pregs ] = dregs_half\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), 1); + + } + else + return yyerror ("Bad register(s) for STORE"); + } + break; + + case 186: +#line 2960 "bfin-parse.y" + { + Expr_Node *tmp = (yyvsp[(4) - (7)].expr); + int ispreg = IS_PREG ((yyvsp[(7) - (7)].reg)); + + if (!IS_PREG ((yyvsp[(2) - (7)].reg))) + return yyerror ("Preg expected for indirect"); + + if (!IS_DREG ((yyvsp[(7) - (7)].reg)) && !ispreg) + return yyerror ("Bad source register for STORE"); + + if ((yyvsp[(3) - (7)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (in_range_p (tmp, 0, 63, 3)) + { + notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n"); + (yyval.instr) = LDSTII (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), tmp, 1, ispreg ? 3 : 0); + } + else if ((yyvsp[(2) - (7)].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3)) + { + notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n"); + tmp = unary (Expr_Op_Type_NEG, tmp); + (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[(7) - (7)].reg), 1); + } + else if (in_range_p (tmp, -131072, 131071, 3)) + { + notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n"); + (yyval.instr) = LDSTIDXI (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), 1, 0, ispreg ? 1: 0, tmp); + } + else + return yyerror ("Displacement out of range for store"); + } + break; + + case 187: +#line 2994 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_URANGE (4, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 2)) + { + notethat ("LDSTii: dregs = W [ pregs + uimm4s2 ] (.)\n"); + (yyval.instr) = LDSTII (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), (yyvsp[(7) - (9)].expr), 0, 1 << (yyvsp[(9) - (9)].r0).r0); + } + else if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_RANGE(16, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 2)) + { + notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n"); + if ((yyvsp[(6) - (9)].r0).r0) + neg_value ((yyvsp[(7) - (9)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 1, (yyvsp[(9) - (9)].r0).r0, (yyvsp[(7) - (9)].expr)); + } + else + return yyerror ("Bad register or constant for LOAD"); + } + break; + + case 188: +#line 3012 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(5) - (7)].reg))) + { + notethat ("dspLDST: dregs_half = W [ iregs ]\n"); + (yyval.instr) = DSPLDST(&(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), &(yyvsp[(1) - (7)].reg), (yyvsp[(6) - (7)].modcodes).x0, 0); + } + else if ((yyvsp[(6) - (7)].modcodes).x0 == 2 && IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_PREG ((yyvsp[(5) - (7)].reg))) + { + notethat ("LDSTpmod: dregs_half = W [ pregs ]\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), 0); + } + else + return yyerror ("Bad register or post_op for LOAD"); + } + break; + + case 189: +#line 3029 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) + { + notethat ("LDST: dregs = W [ pregs ] (.)\n"); + (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 1, (yyvsp[(8) - (8)].r0).r0, 0); + } + else + return yyerror ("Bad register for LOAD"); + } + break; + + case 190: +#line 3040 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_PREG ((yyvsp[(7) - (9)].reg))) + { + notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), 3, (yyvsp[(9) - (9)].r0).r0); + } + else + return yyerror ("Bad register for LOAD"); + } + break; + + case 191: +#line 3051 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg)) && IS_PREG ((yyvsp[(7) - (8)].reg))) + { + notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), 1 + IS_H ((yyvsp[(1) - (8)].reg)), 0); + } + else + return yyerror ("Bad register for LOAD"); + } + break; + + case 192: +#line 3062 "bfin-parse.y" + { + if (IS_IREG ((yyvsp[(2) - (6)].reg)) && IS_DREG ((yyvsp[(6) - (6)].reg))) + { + notethat ("dspLDST: [ iregs ] = dregs\n"); + (yyval.instr) = DSPLDST(&(yyvsp[(2) - (6)].reg), 0, &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 1); + } + else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && IS_DREG ((yyvsp[(6) - (6)].reg))) + { + notethat ("LDST: [ pregs ] = dregs\n"); + (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 0, 1); + } + else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && IS_PREG ((yyvsp[(6) - (6)].reg))) + { + notethat ("LDST: [ pregs ] = pregs\n"); + (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 1, 1); + } + else + return yyerror ("Bad register for STORE"); + } + break; + + case 193: +#line 3083 "bfin-parse.y" + { + if (! IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Expected Dreg for last argument"); + + if (IS_IREG ((yyvsp[(2) - (7)].reg)) && IS_MREG ((yyvsp[(4) - (7)].reg))) + { + notethat ("dspLDST: [ iregs ++ mregs ] = dregs\n"); + (yyval.instr) = DSPLDST(&(yyvsp[(2) - (7)].reg), (yyvsp[(4) - (7)].reg).regno & CODE_MASK, &(yyvsp[(7) - (7)].reg), 3, 1); + } + else if (IS_PREG ((yyvsp[(2) - (7)].reg)) && IS_PREG ((yyvsp[(4) - (7)].reg))) + { + notethat ("LDSTpmod: [ pregs ++ pregs ] = dregs\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(4) - (7)].reg), 0, 1); + } + else + return yyerror ("Bad register for STORE"); + } + break; + + case 194: +#line 3102 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(8) - (8)].reg))) + return yyerror ("Expect Dreg as last argument"); + if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) + { + notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), &(yyvsp[(5) - (8)].reg), 1 + IS_H ((yyvsp[(8) - (8)].reg)), 1); + } + else + return yyerror ("Bad register for STORE"); + } + break; + + case 195: +#line 3115 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_RANGE(16, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 1)) + { + notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n", + (yyvsp[(9) - (9)].r0).r0 ? 'X' : 'Z'); + if ((yyvsp[(6) - (9)].r0).r0) + neg_value ((yyvsp[(7) - (9)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 2, (yyvsp[(9) - (9)].r0).r0, (yyvsp[(7) - (9)].expr)); + } + else + return yyerror ("Bad register or value for LOAD"); + } + break; + + case 196: +#line 3129 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) + { + notethat ("LDST: dregs = B [ pregs ] (%c)\n", + (yyvsp[(8) - (8)].r0).r0 ? 'X' : 'Z'); + (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 2, (yyvsp[(8) - (8)].r0).r0, 0); + } + else + return yyerror ("Bad register for LOAD"); + } + break; + + case 197: +#line 3141 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_IREG ((yyvsp[(4) - (7)].reg)) && IS_MREG ((yyvsp[(6) - (7)].reg))) + { + notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n"); + (yyval.instr) = DSPLDST(&(yyvsp[(4) - (7)].reg), (yyvsp[(6) - (7)].reg).regno & CODE_MASK, &(yyvsp[(1) - (7)].reg), 3, 0); + } + else if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_PREG ((yyvsp[(4) - (7)].reg)) && IS_PREG ((yyvsp[(6) - (7)].reg))) + { + notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), 0, 0); + } + else + return yyerror ("Bad register for LOAD"); + } + break; + + case 198: +#line 3157 "bfin-parse.y" + { + Expr_Node *tmp = (yyvsp[(6) - (7)].expr); + int ispreg = IS_PREG ((yyvsp[(1) - (7)].reg)); + int isgot = IS_RELOC((yyvsp[(6) - (7)].expr)); + + if (!IS_PREG ((yyvsp[(4) - (7)].reg))) + return yyerror ("Preg expected for indirect"); + + if (!IS_DREG ((yyvsp[(1) - (7)].reg)) && !ispreg) + return yyerror ("Bad destination register for LOAD"); + + if ((yyvsp[(5) - (7)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if(isgot){ + notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n"); + (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1: 0, tmp); + } + else if (in_range_p (tmp, 0, 63, 3)) + { + notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n"); + (yyval.instr) = LDSTII (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), tmp, 0, ispreg ? 3 : 0); + } + else if ((yyvsp[(4) - (7)].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3)) + { + notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n"); + tmp = unary (Expr_Op_Type_NEG, tmp); + (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[(1) - (7)].reg), 0); + } + else if (in_range_p (tmp, -131072, 131071, 3)) + { + notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n"); + (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1: 0, tmp); + + } + else + return yyerror ("Displacement out of range for load"); + } + break; + + case 199: +#line 3197 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_IREG ((yyvsp[(4) - (6)].reg))) + { + notethat ("dspLDST: dregs = [ iregs ]\n"); + (yyval.instr) = DSPLDST (&(yyvsp[(4) - (6)].reg), 0, &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0); + } + else if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(4) - (6)].reg))) + { + notethat ("LDST: dregs = [ pregs ]\n"); + (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 0, 0); + } + else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(4) - (6)].reg))) + { + if (REG_SAME ((yyvsp[(1) - (6)].reg), (yyvsp[(4) - (6)].reg)) && (yyvsp[(5) - (6)].modcodes).x0 != 2) + return yyerror ("Pregs can't be same"); + + notethat ("LDST: pregs = [ pregs ]\n"); + (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 1, 0); + } + else if ((yyvsp[(4) - (6)].reg).regno == REG_SP && IS_ALLREG ((yyvsp[(1) - (6)].reg)) && (yyvsp[(5) - (6)].modcodes).x0 == 0) + { + notethat ("PushPopReg: allregs = [ SP ++ ]\n"); + (yyval.instr) = PUSHPOPREG (&(yyvsp[(1) - (6)].reg), 0); + } + else + return yyerror ("Bad register or value"); + } + break; + + case 200: +#line 3228 "bfin-parse.y" + { + if ((yyvsp[(1) - (11)].reg).regno != REG_SP) + yyerror ("Stack Pointer expected"); + if ((yyvsp[(4) - (11)].reg).regno == REG_R7 + && IN_RANGE ((yyvsp[(6) - (11)].expr), 0, 7) + && (yyvsp[(8) - (11)].reg).regno == REG_P5 + && IN_RANGE ((yyvsp[(10) - (11)].expr), 0, 5)) + { + notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim , P5 : reglim )\n"); + (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(6) - (11)].expr)), imm5 ((yyvsp[(10) - (11)].expr)), 1, 1, 1); + } + else + return yyerror ("Bad register for PushPopMultiple"); + } + break; + + case 201: +#line 3244 "bfin-parse.y" + { + if ((yyvsp[(1) - (7)].reg).regno != REG_SP) + yyerror ("Stack Pointer expected"); + + if ((yyvsp[(4) - (7)].reg).regno == REG_R7 && IN_RANGE ((yyvsp[(6) - (7)].expr), 0, 7)) + { + notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim )\n"); + (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(6) - (7)].expr)), 0, 1, 0, 1); + } + else if ((yyvsp[(4) - (7)].reg).regno == REG_P5 && IN_RANGE ((yyvsp[(6) - (7)].expr), 0, 6)) + { + notethat ("PushPopMultiple: [ -- SP ] = (P5 : reglim )\n"); + (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[(6) - (7)].expr)), 0, 1, 1); + } + else + return yyerror ("Bad register for PushPopMultiple"); + } + break; + + case 202: +#line 3263 "bfin-parse.y" + { + if ((yyvsp[(11) - (11)].reg).regno != REG_SP) + yyerror ("Stack Pointer expected"); + if ((yyvsp[(2) - (11)].reg).regno == REG_R7 && (IN_RANGE ((yyvsp[(4) - (11)].expr), 0, 7)) + && (yyvsp[(6) - (11)].reg).regno == REG_P5 && (IN_RANGE ((yyvsp[(8) - (11)].expr), 0, 6))) + { + notethat ("PushPopMultiple: (R7 : reglim , P5 : reglim ) = [ SP ++ ]\n"); + (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(4) - (11)].expr)), imm5 ((yyvsp[(8) - (11)].expr)), 1, 1, 0); + } + else + return yyerror ("Bad register range for PushPopMultiple"); + } + break; + + case 203: +#line 3277 "bfin-parse.y" + { + if ((yyvsp[(7) - (7)].reg).regno != REG_SP) + yyerror ("Stack Pointer expected"); + + if ((yyvsp[(2) - (7)].reg).regno == REG_R7 && IN_RANGE ((yyvsp[(4) - (7)].expr), 0, 7)) + { + notethat ("PushPopMultiple: (R7 : reglim ) = [ SP ++ ]\n"); + (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(4) - (7)].expr)), 0, 1, 0, 0); + } + else if ((yyvsp[(2) - (7)].reg).regno == REG_P5 && IN_RANGE ((yyvsp[(4) - (7)].expr), 0, 6)) + { + notethat ("PushPopMultiple: (P5 : reglim ) = [ SP ++ ]\n"); + (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[(4) - (7)].expr)), 0, 1, 0); + } + else + return yyerror ("Bad register range for PushPopMultiple"); + } + break; + + case 204: +#line 3296 "bfin-parse.y" + { + if ((yyvsp[(1) - (3)].reg).regno != REG_SP) + yyerror ("Stack Pointer expected"); + + if (IS_ALLREG ((yyvsp[(3) - (3)].reg))) + { + notethat ("PushPopReg: [ -- SP ] = allregs\n"); + (yyval.instr) = PUSHPOPREG (&(yyvsp[(3) - (3)].reg), 1); + } + else + return yyerror ("Bad register for PushPopReg"); + } + break; + + case 205: +#line 3312 "bfin-parse.y" + { + if (IS_URANGE (16, (yyvsp[(2) - (2)].expr), 0, 4)) + (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[(2) - (2)].expr))); + else + return yyerror ("Bad constant for LINK"); + } + break; + + case 206: +#line 3320 "bfin-parse.y" + { + notethat ("linkage: UNLINK\n"); + (yyval.instr) = LINKAGE (1, 0); + } + break; + + case 207: +#line 3329 "bfin-parse.y" + { + if (IS_PCREL4 ((yyvsp[(3) - (7)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (7)].expr)) && IS_CREG ((yyvsp[(7) - (7)].reg))) + { + notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters\n"); + (yyval.instr) = LOOPSETUP ((yyvsp[(3) - (7)].expr), &(yyvsp[(7) - (7)].reg), 0, (yyvsp[(5) - (7)].expr), 0); + } + else + return yyerror ("Bad register or values for LSETUP"); + + } + break; + + case 208: +#line 3340 "bfin-parse.y" + { + if (IS_PCREL4 ((yyvsp[(3) - (9)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (9)].expr)) + && IS_PREG ((yyvsp[(9) - (9)].reg)) && IS_CREG ((yyvsp[(7) - (9)].reg))) + { + notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs\n"); + (yyval.instr) = LOOPSETUP ((yyvsp[(3) - (9)].expr), &(yyvsp[(7) - (9)].reg), 1, (yyvsp[(5) - (9)].expr), &(yyvsp[(9) - (9)].reg)); + } + else + return yyerror ("Bad register or values for LSETUP"); + } + break; + + case 209: +#line 3352 "bfin-parse.y" + { + if (IS_PCREL4 ((yyvsp[(3) - (11)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (11)].expr)) + && IS_PREG ((yyvsp[(9) - (11)].reg)) && IS_CREG ((yyvsp[(7) - (11)].reg)) + && EXPR_VALUE ((yyvsp[(11) - (11)].expr)) == 1) + { + notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs >> 1\n"); + (yyval.instr) = LOOPSETUP ((yyvsp[(3) - (11)].expr), &(yyvsp[(7) - (11)].reg), 3, (yyvsp[(5) - (11)].expr), &(yyvsp[(9) - (11)].reg)); + } + else + return yyerror ("Bad register or values for LSETUP"); + } + break; + + case 210: +#line 3366 "bfin-parse.y" + { + if (!IS_RELOC ((yyvsp[(2) - (3)].expr))) + return yyerror ("Invalid expression in loop statement"); + if (!IS_CREG ((yyvsp[(3) - (3)].reg))) + return yyerror ("Invalid loop counter register"); + (yyval.instr) = bfin_gen_loop ((yyvsp[(2) - (3)].expr), &(yyvsp[(3) - (3)].reg), 0, 0); + } + break; + + case 211: +#line 3374 "bfin-parse.y" + { + if (IS_RELOC ((yyvsp[(2) - (5)].expr)) && IS_PREG ((yyvsp[(5) - (5)].reg)) && IS_CREG ((yyvsp[(3) - (5)].reg))) + { + notethat ("Loop: LOOP expr counters = pregs\n"); + (yyval.instr) = bfin_gen_loop ((yyvsp[(2) - (5)].expr), &(yyvsp[(3) - (5)].reg), 1, &(yyvsp[(5) - (5)].reg)); + } + else + return yyerror ("Bad register or values for LOOP"); + } + break; + + case 212: +#line 3384 "bfin-parse.y" + { + if (IS_RELOC ((yyvsp[(2) - (7)].expr)) && IS_PREG ((yyvsp[(5) - (7)].reg)) && IS_CREG ((yyvsp[(3) - (7)].reg)) && EXPR_VALUE ((yyvsp[(7) - (7)].expr)) == 1) + { + notethat ("Loop: LOOP expr counters = pregs >> 1\n"); + (yyval.instr) = bfin_gen_loop ((yyvsp[(2) - (7)].expr), &(yyvsp[(3) - (7)].reg), 3, &(yyvsp[(5) - (7)].reg)); + } + else + return yyerror ("Bad register or values for LOOP"); + } + break; + + case 213: +#line 3396 "bfin-parse.y" + { + notethat ("pseudoDEBUG: DBG\n"); + (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0); + } + break; + + case 214: +#line 3401 "bfin-parse.y" + { + notethat ("pseudoDEBUG: DBG REG_A\n"); + (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[(2) - (2)].reg)), 0); + } + break; + + case 215: +#line 3406 "bfin-parse.y" + { + notethat ("pseudoDEBUG: DBG allregs\n"); + (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[(2) - (2)].reg).regno & CODE_MASK, (yyvsp[(2) - (2)].reg).regno & CLASS_MASK); + } + break; + + case 216: +#line 3412 "bfin-parse.y" + { + if (!IS_DREG ((yyvsp[(3) - (4)].reg))) + return yyerror ("Dregs expected"); + notethat ("pseudoDEBUG: DBGCMPLX (dregs )\n"); + (yyval.instr) = bfin_gen_pseudodbg (3, 6, (yyvsp[(3) - (4)].reg).regno & CODE_MASK); + } + break; + + case 217: +#line 3420 "bfin-parse.y" + { + notethat ("psedoDEBUG: DBGHALT\n"); + (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0); + } + break; + + case 218: +#line 3426 "bfin-parse.y" + { + notethat ("pseudodbg_assert: DBGA (dregs_lo , uimm16 )\n"); + (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[(3) - (6)].reg)), &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); + } + break; + + case 219: +#line 3432 "bfin-parse.y" + { + notethat ("pseudodbg_assert: DBGAH (dregs , uimm16 )\n"); + (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); + } + break; + + case 220: +#line 3438 "bfin-parse.y" + { + notethat ("psedodbg_assert: DBGAL (dregs , uimm16 )\n"); + (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); + } + break; + + case 221: +#line 3451 "bfin-parse.y" + { + (yyval.reg) = (yyvsp[(1) - (1)].reg); + } + break; + + case 222: +#line 3455 "bfin-parse.y" + { + (yyval.reg) = (yyvsp[(1) - (1)].reg); + } + break; + + case 223: +#line 3464 "bfin-parse.y" + { + (yyval.mod).MM = 0; + (yyval.mod).mod = 0; + } + break; + + case 224: +#line 3469 "bfin-parse.y" + { + (yyval.mod).MM = 1; + (yyval.mod).mod = (yyvsp[(4) - (5)].value); + } + break; + + case 225: +#line 3474 "bfin-parse.y" + { + (yyval.mod).MM = 1; + (yyval.mod).mod = (yyvsp[(2) - (5)].value); + } + break; + + case 226: +#line 3479 "bfin-parse.y" + { + (yyval.mod).MM = 0; + (yyval.mod).mod = (yyvsp[(2) - (3)].value); + } + break; + + case 227: +#line 3484 "bfin-parse.y" + { + (yyval.mod).MM = 1; + (yyval.mod).mod = 0; + } + break; + + case 228: +#line 3491 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 229: +#line 3495 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 230: +#line 3501 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; + (yyval.modcodes).x0 = 0; + } + break; + + case 231: +#line 3506 "bfin-parse.y" + { + (yyval.modcodes).s0 = 1; + (yyval.modcodes).x0 = 0; + } + break; + + case 232: +#line 3511 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; + (yyval.modcodes).x0 = 1; + } + break; + + case 233: +#line 3516 "bfin-parse.y" + { + (yyval.modcodes).s0 = 1; + (yyval.modcodes).x0 = 1; + } + break; + + case 234: +#line 3524 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 235: +#line 3528 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 236: +#line 3534 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; + (yyval.modcodes).x0 = 0; + } + break; + + case 237: +#line 3539 "bfin-parse.y" + { + (yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].modcodes).x0; + } + break; + + case 238: +#line 3546 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; + (yyval.modcodes).x0 = 0; + (yyval.modcodes).aop = 0; + } + break; + + case 239: +#line 3552 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; + (yyval.modcodes).x0 = 0; + (yyval.modcodes).aop = 1; + } + break; + + case 240: +#line 3558 "bfin-parse.y" + { + (yyval.modcodes).s0 = 1; + (yyval.modcodes).x0 = 0; + (yyval.modcodes).aop = 1; + } + break; + + case 241: +#line 3566 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; + (yyval.modcodes).s0 = 0; + (yyval.modcodes).x0 = 0; + } + break; + + case 242: +#line 3572 "bfin-parse.y" + { + (yyval.modcodes).r0 = 2 + (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 0; + (yyval.modcodes).x0 = 0; + } + break; + + case 243: +#line 3578 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; + (yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].modcodes).x0; + } + break; + + case 244: +#line 3584 "bfin-parse.y" + { + (yyval.modcodes).r0 = 2 + (yyvsp[(2) - (5)].r0).r0; + (yyval.modcodes).s0 = (yyvsp[(4) - (5)].modcodes).s0; + (yyval.modcodes).x0 = (yyvsp[(4) - (5)].modcodes).x0; + } + break; + + case 245: +#line 3590 "bfin-parse.y" + { + (yyval.modcodes).r0 = 2 + (yyvsp[(4) - (5)].r0).r0; + (yyval.modcodes).s0 = (yyvsp[(2) - (5)].modcodes).s0; + (yyval.modcodes).x0 = (yyvsp[(2) - (5)].modcodes).x0; + } + break; + + case 246: +#line 3598 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 247: +#line 3602 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 248: +#line 3606 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 249: +#line 3612 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 250: +#line 3616 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 251: +#line 3620 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 252: +#line 3626 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; + (yyval.modcodes).s0 = 0; + (yyval.modcodes).aop = 0; + } + break; + + case 253: +#line 3632 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; + (yyval.modcodes).s0 = 0; + (yyval.modcodes).aop = 3; + } + break; + + case 254: +#line 3638 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; + (yyval.modcodes).s0 = 1; + (yyval.modcodes).aop = 3; + } + break; + + case 255: +#line 3644 "bfin-parse.y" + { + (yyval.modcodes).r0 = 1; + (yyval.modcodes).s0 = 0; + (yyval.modcodes).aop = 3; + } + break; + + case 256: +#line 3650 "bfin-parse.y" + { + (yyval.modcodes).r0 = 1; + (yyval.modcodes).s0 = 1; + } + break; + + case 257: +#line 3655 "bfin-parse.y" + { + (yyval.modcodes).r0 = 1; + (yyval.modcodes).s0 = 1; + } + break; + + case 258: +#line 3662 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 259: +#line 3666 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 260: +#line 3672 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; + } + break; + + case 261: +#line 3676 "bfin-parse.y" + { + (yyval.modcodes).s0 = 1; + } + break; + + case 262: +#line 3683 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 263: +#line 3687 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 264: +#line 3691 "bfin-parse.y" + { + (yyval.r0).r0 = 3; + } + break; + + case 265: +#line 3695 "bfin-parse.y" + { + (yyval.r0).r0 = 2; + } + break; + + case 266: +#line 3701 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 267: +#line 3705 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 268: +#line 3712 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; + (yyval.modcodes).s0 = 1; + } + break; + + case 269: +#line 3717 "bfin-parse.y" + { + if ((yyvsp[(2) - (3)].value) != M_T) + return yyerror ("Bad modifier"); + (yyval.modcodes).r0 = 1; + (yyval.modcodes).s0 = 0; + } + break; + + case 270: +#line 3724 "bfin-parse.y" + { + if ((yyvsp[(2) - (5)].value) != M_T) + return yyerror ("Bad modifier"); + (yyval.modcodes).r0 = 1; + (yyval.modcodes).s0 = 1; + } + break; + + case 271: +#line 3731 "bfin-parse.y" + { + if ((yyvsp[(4) - (5)].value) != M_T) + return yyerror ("Bad modifier"); + (yyval.modcodes).r0 = 1; + (yyval.modcodes).s0 = 1; + } + break; + + case 272: +#line 3743 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 273: +#line 3747 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 274: +#line 3751 "bfin-parse.y" + { + (yyval.r0).r0 = 2; + } + break; + + case 275: +#line 3757 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 276: +#line 3761 "bfin-parse.y" + { + if ((yyvsp[(2) - (3)].value) == M_W32) + (yyval.r0).r0 = 1; + else + return yyerror ("Only (W32) allowed"); + } + break; + + case 277: +#line 3770 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 278: +#line 3774 "bfin-parse.y" + { + if ((yyvsp[(2) - (3)].value) == M_IU) + (yyval.r0).r0 = 3; + else + return yyerror ("(IU) expected"); + } + break; + + case 279: +#line 3783 "bfin-parse.y" + { + (yyval.reg) = (yyvsp[(3) - (4)].reg); + } + break; + + case 280: +#line 3789 "bfin-parse.y" + { + (yyval.reg) = (yyvsp[(2) - (4)].reg); + } + break; + + case 281: +#line 3798 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 282: +#line 3802 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 283: +#line 3809 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 284: +#line 3813 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 285: +#line 3817 "bfin-parse.y" + { + (yyval.r0).r0 = 2; + } + break; + + case 286: +#line 3821 "bfin-parse.y" + { + (yyval.r0).r0 = 3; + } + break; + + case 287: +#line 3828 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 288: +#line 3832 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 289: +#line 3839 "bfin-parse.y" + { + (yyval.modcodes).r0 = 1; /* HL. */ + (yyval.modcodes).s0 = 0; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 0; /* aop. */ + } + break; + + case 290: +#line 3847 "bfin-parse.y" + { + (yyval.modcodes).r0 = 1; /* HL. */ + (yyval.modcodes).s0 = 0; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 1; /* aop. */ + } + break; + + case 291: +#line 3855 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; /* HL. */ + (yyval.modcodes).s0 = 0; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 0; /* aop. */ + } + break; + + case 292: +#line 3863 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; /* HL. */ + (yyval.modcodes).s0 = 0; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 1; + } + break; + + case 293: +#line 3871 "bfin-parse.y" + { + (yyval.modcodes).r0 = 1; /* HL. */ + (yyval.modcodes).s0 = 1; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 0; /* aop. */ + } + break; + + case 294: +#line 3878 "bfin-parse.y" + { + (yyval.modcodes).r0 = 1; /* HL. */ + (yyval.modcodes).s0 = 1; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 1; /* aop. */ + } + break; + + case 295: +#line 3885 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; /* HL. */ + (yyval.modcodes).s0 = 1; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 0; /* aop. */ + } + break; + + case 296: +#line 3893 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0; /* HL. */ + (yyval.modcodes).s0 = 1; /* s. */ + (yyval.modcodes).x0 = 0; /* x. */ + (yyval.modcodes).aop = 1; /* aop. */ + } + break; + + case 297: +#line 3903 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; /* s. */ + (yyval.modcodes).x0 = 0; /* HL. */ + } + break; + + case 298: +#line 3908 "bfin-parse.y" + { + (yyval.modcodes).s0 = 0; /* s. */ + (yyval.modcodes).x0 = 1; /* HL. */ + } + break; + + case 299: +#line 3913 "bfin-parse.y" + { + (yyval.modcodes).s0 = 1; /* s. */ + (yyval.modcodes).x0 = 0; /* HL. */ + } + break; + + case 300: +#line 3918 "bfin-parse.y" + { + (yyval.modcodes).s0 = 1; /* s. */ + (yyval.modcodes).x0 = 1; /* HL. */ + } + break; + + case 301: +#line 3925 "bfin-parse.y" + { + (yyval.modcodes).x0 = 2; + } + break; + + case 302: +#line 3929 "bfin-parse.y" + { + (yyval.modcodes).x0 = 0; + } + break; + + case 303: +#line 3933 "bfin-parse.y" + { + (yyval.modcodes).x0 = 1; + } + break; + + case 304: +#line 3942 "bfin-parse.y" + { + (yyval.reg) = (yyvsp[(1) - (2)].reg); + } + break; + + case 305: +#line 3949 "bfin-parse.y" + { + (yyval.reg) = (yyvsp[(1) - (2)].reg); + } + break; + + case 306: +#line 3956 "bfin-parse.y" + { + (yyval.reg) = (yyvsp[(1) - (2)].reg); + } + break; + + case 307: +#line 3963 "bfin-parse.y" + { + (yyval.macfunc).w = 1; + (yyval.macfunc).P = 1; + (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg)); + (yyval.macfunc).op = 3; + (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg); + (yyval.macfunc).s0.regno = 0; + (yyval.macfunc).s1.regno = 0; + + if (IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_EVEN ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A1 to even register"); + else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_EVEN ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A0 to odd register"); + } + break; + + case 308: +#line 3978 "bfin-parse.y" + { + (yyval.macfunc) = (yyvsp[(1) - (1)].macfunc); + (yyval.macfunc).w = 0; (yyval.macfunc).P = 0; + (yyval.macfunc).dst.regno = 0; + } + break; + + case 309: +#line 3984 "bfin-parse.y" + { + (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc); + (yyval.macfunc).w = 1; + (yyval.macfunc).P = 1; + (yyval.macfunc).dst = (yyvsp[(1) - (5)].reg); + } + break; + + case 310: +#line 3992 "bfin-parse.y" + { + (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc); + (yyval.macfunc).w = 1; + (yyval.macfunc).P = 0; + (yyval.macfunc).dst = (yyvsp[(1) - (5)].reg); + } + break; + + case 311: +#line 4000 "bfin-parse.y" + { + (yyval.macfunc).w = 1; + (yyval.macfunc).P = 0; + (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg)); + (yyval.macfunc).op = 3; + (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg); + (yyval.macfunc).s0.regno = 0; + (yyval.macfunc).s1.regno = 0; + + if (IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_H ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A1 to low half of register"); + else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_H ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A0 to high half of register"); + } + break; + + case 312: +#line 4018 "bfin-parse.y" + { + (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); + (yyval.macfunc).op = 0; + (yyval.macfunc).s0 = (yyvsp[(2) - (2)].macfunc).s0; + (yyval.macfunc).s1 = (yyvsp[(2) - (2)].macfunc).s1; + } + break; + + case 313: +#line 4025 "bfin-parse.y" + { + (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); + (yyval.macfunc).op = 1; + (yyval.macfunc).s0 = (yyvsp[(2) - (2)].macfunc).s0; + (yyval.macfunc).s1 = (yyvsp[(2) - (2)].macfunc).s1; + } + break; + + case 314: +#line 4032 "bfin-parse.y" + { + (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); + (yyval.macfunc).op = 2; + (yyval.macfunc).s0 = (yyvsp[(2) - (2)].macfunc).s0; + (yyval.macfunc).s1 = (yyvsp[(2) - (2)].macfunc).s1; + } + break; + + case 315: +#line 4042 "bfin-parse.y" + { + if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) + { + (yyval.macfunc).s0 = (yyvsp[(1) - (3)].reg); + (yyval.macfunc).s1 = (yyvsp[(3) - (3)].reg); + } + else + return yyerror ("Dregs expected"); + } + break; + + case 316: +#line 4055 "bfin-parse.y" + { + (yyval.r0).r0 = 0; + } + break; + + case 317: +#line 4059 "bfin-parse.y" + { + (yyval.r0).r0 = 1; + } + break; + + case 318: +#line 4063 "bfin-parse.y" + { + (yyval.r0).r0 = 2; + } + break; + + case 319: +#line 4067 "bfin-parse.y" + { + (yyval.r0).r0 = 3; + } + break; + + case 320: +#line 4074 "bfin-parse.y" + { + (yyval.modcodes).r0 = (yyvsp[(3) - (3)].reg).regno; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 0; + } + break; + + case 321: +#line 4080 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0x18; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 0; + } + break; + + case 322: +#line 4086 "bfin-parse.y" + { + (yyval.modcodes).r0 = (yyvsp[(1) - (3)].reg).regno; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 1; + } + break; + + case 323: +#line 4092 "bfin-parse.y" + { + (yyval.modcodes).r0 = 0x18; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 1; + } + break; + + case 324: +#line 4102 "bfin-parse.y" + { + Expr_Node_Value val; + val.s_value = S_GET_NAME((yyvsp[(1) - (1)].symbol)); + (yyval.expr) = Expr_Node_Create (Expr_Node_Reloc, val, NULL, NULL); + } + break; + + case 325: +#line 4111 "bfin-parse.y" + { (yyval.value) = BFD_RELOC_BFIN_GOT; } + break; + + case 326: +#line 4113 "bfin-parse.y" + { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; } + break; + + case 327: +#line 4115 "bfin-parse.y" + { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; } + break; + + case 328: +#line 4119 "bfin-parse.y" + { + Expr_Node_Value val; + val.i_value = (yyvsp[(3) - (3)].value); + (yyval.expr) = Expr_Node_Create (Expr_Node_GOT_Reloc, val, (yyvsp[(1) - (3)].expr), NULL); + } + break; + + case 329: +#line 4127 "bfin-parse.y" + { + (yyval.expr) = (yyvsp[(1) - (1)].expr); + } + break; + + case 330: +#line 4131 "bfin-parse.y" + { + (yyval.expr) = (yyvsp[(1) - (1)].expr); + } + break; + + case 331: +#line 4138 "bfin-parse.y" + { + (yyval.expr) = (yyvsp[(1) - (3)].expr); + } + break; + + case 332: +#line 4144 "bfin-parse.y" + { + Expr_Node_Value val; + val.i_value = (yyvsp[(1) - (1)].value); + (yyval.expr) = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL); + } + break; + + case 333: +#line 4150 "bfin-parse.y" + { + (yyval.expr) = (yyvsp[(1) - (1)].expr); + } + break; + + case 334: +#line 4154 "bfin-parse.y" + { + (yyval.expr) = (yyvsp[(2) - (3)].expr); + } + break; + + case 335: +#line 4158 "bfin-parse.y" + { + (yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[(2) - (2)].expr)); + } + break; + + case 336: +#line 4162 "bfin-parse.y" + { + (yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[(2) - (2)].expr)); + } + break; + + case 337: +#line 4168 "bfin-parse.y" + { + (yyval.expr) = (yyvsp[(1) - (1)].expr); + } + break; + + case 338: +#line 4174 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 339: +#line 4178 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 340: +#line 4182 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 341: +#line 4186 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 342: +#line 4190 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 343: +#line 4194 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 344: +#line 4198 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 345: +#line 4202 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 346: +#line 4206 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 347: +#line 4210 "bfin-parse.y" + { + (yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); + } + break; + + case 348: +#line 4214 "bfin-parse.y" + { + (yyval.expr) = (yyvsp[(1) - (1)].expr); + } + break; + + +/* Line 1267 of yacc.c. */ +#line 7266 "bfin-parse.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 4220 "bfin-parse.y" + + +EXPR_T +mkexpr (int x, SYMBOL_T s) +{ + EXPR_T e = (EXPR_T) ALLOCATE (sizeof (struct expression_cell)); + e->value = x; + EXPR_SYMBOL(e) = s; + return e; +} + +static int +value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned) +{ + long umax = (1L << sz) - 1; + long min = -1L << (sz - 1); + long max = (1L << (sz - 1)) - 1; + + long v = EXPR_VALUE (expr); + + if ((v % mul) != 0) + { + error ("%s:%d: Value Error -- Must align to %d\n", __FILE__, __LINE__, mul); + return 0; + } + + v /= mul; + + if (sign) + v = -v; + + if (issigned) + { + if (v >= min && v <= max) return 1; + +#ifdef DEBUG + fprintf(stderr, "signed value %lx out of range\n", v * mul); +#endif + return 0; + } + if (v <= umax && v >= 0) + return 1; +#ifdef DEBUG + fprintf(stderr, "unsigned value %lx out of range\n", v * mul); +#endif + return 0; +} + +/* Return the expression structure that allows symbol operations. + If the left and right children are constants, do the operation. */ +static Expr_Node * +binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y) +{ + Expr_Node_Value val; + + if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant) + { + switch (op) + { + case Expr_Op_Type_Add: + x->value.i_value += y->value.i_value; + break; + case Expr_Op_Type_Sub: + x->value.i_value -= y->value.i_value; + break; + case Expr_Op_Type_Mult: + x->value.i_value *= y->value.i_value; + break; + case Expr_Op_Type_Div: + if (y->value.i_value == 0) + error ("Illegal Expression: Division by zero."); + else + x->value.i_value /= y->value.i_value; + break; + case Expr_Op_Type_Mod: + x->value.i_value %= y->value.i_value; + break; + case Expr_Op_Type_Lshift: + x->value.i_value <<= y->value.i_value; + break; + case Expr_Op_Type_Rshift: + x->value.i_value >>= y->value.i_value; + break; + case Expr_Op_Type_BAND: + x->value.i_value &= y->value.i_value; + break; + case Expr_Op_Type_BOR: + x->value.i_value |= y->value.i_value; + break; + case Expr_Op_Type_BXOR: + x->value.i_value ^= y->value.i_value; + break; + case Expr_Op_Type_LAND: + x->value.i_value = x->value.i_value && y->value.i_value; + break; + case Expr_Op_Type_LOR: + x->value.i_value = x->value.i_value || y->value.i_value; + break; + + default: + error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + } + return x; + } + /* Canonicalize order to EXPR OP CONSTANT. */ + if (x->type == Expr_Node_Constant) + { + Expr_Node *t = x; + x = y; + y = t; + } + /* Canonicalize subtraction of const to addition of negated const. */ + if (op == Expr_Op_Type_Sub && y->type == Expr_Node_Constant) + { + op = Expr_Op_Type_Add; + y->value.i_value = -y->value.i_value; + } + if (y->type == Expr_Node_Constant && x->type == Expr_Node_Binop + && x->Right_Child->type == Expr_Node_Constant) + { + if (op == x->value.op_value && x->value.op_value == Expr_Op_Type_Add) + { + x->Right_Child->value.i_value += y->value.i_value; + return x; + } + } + + /* Create a new expression structure. */ + val.op_value = op; + return Expr_Node_Create (Expr_Node_Binop, val, x, y); +} + +static Expr_Node * +unary (Expr_Op_Type op, Expr_Node *x) +{ + if (x->type == Expr_Node_Constant) + { + switch (op) + { + case Expr_Op_Type_NEG: + x->value.i_value = -x->value.i_value; + break; + case Expr_Op_Type_COMP: + x->value.i_value = ~x->value.i_value; + break; + default: + error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + } + return x; + } + else + { + /* Create a new expression structure. */ + Expr_Node_Value val; + val.op_value = op; + return Expr_Node_Create (Expr_Node_Unop, val, x, NULL); + } +} + +int debug_codeselection = 0; +static void +notethat (char *format, ...) +{ + va_list ap; + va_start (ap, format); + if (debug_codeselection) + { + vfprintf (errorf, format, ap); + } + va_end (ap); +} + +#ifdef TEST +main (int argc, char **argv) +{ + yyparse(); +} +#endif + + diff --git a/gas/bfin-parse.h b/gas/bfin-parse.h new file mode 100644 index 000000000..f478b28d5 --- /dev/null +++ b/gas/bfin-parse.h @@ -0,0 +1,416 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + 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 2, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + BYTEOP16P = 258, + BYTEOP16M = 259, + BYTEOP1P = 260, + BYTEOP2P = 261, + BYTEOP2M = 262, + BYTEOP3P = 263, + BYTEUNPACK = 264, + BYTEPACK = 265, + PACK = 266, + SAA = 267, + ALIGN8 = 268, + ALIGN16 = 269, + ALIGN24 = 270, + VIT_MAX = 271, + EXTRACT = 272, + DEPOSIT = 273, + EXPADJ = 274, + SEARCH = 275, + ONES = 276, + SIGN = 277, + SIGNBITS = 278, + LINK = 279, + UNLINK = 280, + REG = 281, + PC = 282, + CCREG = 283, + BYTE_DREG = 284, + REG_A_DOUBLE_ZERO = 285, + REG_A_DOUBLE_ONE = 286, + A_ZERO_DOT_L = 287, + A_ZERO_DOT_H = 288, + A_ONE_DOT_L = 289, + A_ONE_DOT_H = 290, + HALF_REG = 291, + NOP = 292, + RTI = 293, + RTS = 294, + RTX = 295, + RTN = 296, + RTE = 297, + HLT = 298, + IDLE = 299, + STI = 300, + CLI = 301, + CSYNC = 302, + SSYNC = 303, + EMUEXCPT = 304, + RAISE = 305, + EXCPT = 306, + LSETUP = 307, + LOOP = 308, + LOOP_BEGIN = 309, + LOOP_END = 310, + DISALGNEXCPT = 311, + JUMP = 312, + JUMP_DOT_S = 313, + JUMP_DOT_L = 314, + CALL = 315, + ABORT = 316, + NOT = 317, + TILDA = 318, + BANG = 319, + AMPERSAND = 320, + BAR = 321, + PERCENT = 322, + CARET = 323, + BXOR = 324, + MINUS = 325, + PLUS = 326, + STAR = 327, + SLASH = 328, + NEG = 329, + MIN = 330, + MAX = 331, + ABS = 332, + DOUBLE_BAR = 333, + _PLUS_BAR_PLUS = 334, + _PLUS_BAR_MINUS = 335, + _MINUS_BAR_PLUS = 336, + _MINUS_BAR_MINUS = 337, + _MINUS_MINUS = 338, + _PLUS_PLUS = 339, + SHIFT = 340, + LSHIFT = 341, + ASHIFT = 342, + BXORSHIFT = 343, + _GREATER_GREATER_GREATER_THAN_ASSIGN = 344, + ROT = 345, + LESS_LESS = 346, + GREATER_GREATER = 347, + _GREATER_GREATER_GREATER = 348, + _LESS_LESS_ASSIGN = 349, + _GREATER_GREATER_ASSIGN = 350, + DIVS = 351, + DIVQ = 352, + ASSIGN = 353, + _STAR_ASSIGN = 354, + _BAR_ASSIGN = 355, + _CARET_ASSIGN = 356, + _AMPERSAND_ASSIGN = 357, + _MINUS_ASSIGN = 358, + _PLUS_ASSIGN = 359, + _ASSIGN_BANG = 360, + _LESS_THAN_ASSIGN = 361, + _ASSIGN_ASSIGN = 362, + GE = 363, + LT = 364, + LE = 365, + GT = 366, + LESS_THAN = 367, + FLUSHINV = 368, + FLUSH = 369, + IFLUSH = 370, + PREFETCH = 371, + PRNT = 372, + OUTC = 373, + WHATREG = 374, + TESTSET = 375, + ASL = 376, + ASR = 377, + B = 378, + W = 379, + NS = 380, + S = 381, + CO = 382, + SCO = 383, + TH = 384, + TL = 385, + BP = 386, + BREV = 387, + X = 388, + Z = 389, + M = 390, + MMOD = 391, + R = 392, + RND = 393, + RNDL = 394, + RNDH = 395, + RND12 = 396, + RND20 = 397, + V = 398, + LO = 399, + HI = 400, + BITTGL = 401, + BITCLR = 402, + BITSET = 403, + BITTST = 404, + BITMUX = 405, + DBGAL = 406, + DBGAH = 407, + DBGHALT = 408, + DBG = 409, + DBGA = 410, + DBGCMPLX = 411, + IF = 412, + COMMA = 413, + BY = 414, + COLON = 415, + SEMICOLON = 416, + RPAREN = 417, + LPAREN = 418, + LBRACK = 419, + RBRACK = 420, + STATUS_REG = 421, + MNOP = 422, + SYMBOL = 423, + NUMBER = 424, + GOT = 425, + GOT17M4 = 426, + FUNCDESC_GOT17M4 = 427, + AT = 428, + PLTPC = 429 + }; +#endif +/* Tokens. */ +#define BYTEOP16P 258 +#define BYTEOP16M 259 +#define BYTEOP1P 260 +#define BYTEOP2P 261 +#define BYTEOP2M 262 +#define BYTEOP3P 263 +#define BYTEUNPACK 264 +#define BYTEPACK 265 +#define PACK 266 +#define SAA 267 +#define ALIGN8 268 +#define ALIGN16 269 +#define ALIGN24 270 +#define VIT_MAX 271 +#define EXTRACT 272 +#define DEPOSIT 273 +#define EXPADJ 274 +#define SEARCH 275 +#define ONES 276 +#define SIGN 277 +#define SIGNBITS 278 +#define LINK 279 +#define UNLINK 280 +#define REG 281 +#define PC 282 +#define CCREG 283 +#define BYTE_DREG 284 +#define REG_A_DOUBLE_ZERO 285 +#define REG_A_DOUBLE_ONE 286 +#define A_ZERO_DOT_L 287 +#define A_ZERO_DOT_H 288 +#define A_ONE_DOT_L 289 +#define A_ONE_DOT_H 290 +#define HALF_REG 291 +#define NOP 292 +#define RTI 293 +#define RTS 294 +#define RTX 295 +#define RTN 296 +#define RTE 297 +#define HLT 298 +#define IDLE 299 +#define STI 300 +#define CLI 301 +#define CSYNC 302 +#define SSYNC 303 +#define EMUEXCPT 304 +#define RAISE 305 +#define EXCPT 306 +#define LSETUP 307 +#define LOOP 308 +#define LOOP_BEGIN 309 +#define LOOP_END 310 +#define DISALGNEXCPT 311 +#define JUMP 312 +#define JUMP_DOT_S 313 +#define JUMP_DOT_L 314 +#define CALL 315 +#define ABORT 316 +#define NOT 317 +#define TILDA 318 +#define BANG 319 +#define AMPERSAND 320 +#define BAR 321 +#define PERCENT 322 +#define CARET 323 +#define BXOR 324 +#define MINUS 325 +#define PLUS 326 +#define STAR 327 +#define SLASH 328 +#define NEG 329 +#define MIN 330 +#define MAX 331 +#define ABS 332 +#define DOUBLE_BAR 333 +#define _PLUS_BAR_PLUS 334 +#define _PLUS_BAR_MINUS 335 +#define _MINUS_BAR_PLUS 336 +#define _MINUS_BAR_MINUS 337 +#define _MINUS_MINUS 338 +#define _PLUS_PLUS 339 +#define SHIFT 340 +#define LSHIFT 341 +#define ASHIFT 342 +#define BXORSHIFT 343 +#define _GREATER_GREATER_GREATER_THAN_ASSIGN 344 +#define ROT 345 +#define LESS_LESS 346 +#define GREATER_GREATER 347 +#define _GREATER_GREATER_GREATER 348 +#define _LESS_LESS_ASSIGN 349 +#define _GREATER_GREATER_ASSIGN 350 +#define DIVS 351 +#define DIVQ 352 +#define ASSIGN 353 +#define _STAR_ASSIGN 354 +#define _BAR_ASSIGN 355 +#define _CARET_ASSIGN 356 +#define _AMPERSAND_ASSIGN 357 +#define _MINUS_ASSIGN 358 +#define _PLUS_ASSIGN 359 +#define _ASSIGN_BANG 360 +#define _LESS_THAN_ASSIGN 361 +#define _ASSIGN_ASSIGN 362 +#define GE 363 +#define LT 364 +#define LE 365 +#define GT 366 +#define LESS_THAN 367 +#define FLUSHINV 368 +#define FLUSH 369 +#define IFLUSH 370 +#define PREFETCH 371 +#define PRNT 372 +#define OUTC 373 +#define WHATREG 374 +#define TESTSET 375 +#define ASL 376 +#define ASR 377 +#define B 378 +#define W 379 +#define NS 380 +#define S 381 +#define CO 382 +#define SCO 383 +#define TH 384 +#define TL 385 +#define BP 386 +#define BREV 387 +#define X 388 +#define Z 389 +#define M 390 +#define MMOD 391 +#define R 392 +#define RND 393 +#define RNDL 394 +#define RNDH 395 +#define RND12 396 +#define RND20 397 +#define V 398 +#define LO 399 +#define HI 400 +#define BITTGL 401 +#define BITCLR 402 +#define BITSET 403 +#define BITTST 404 +#define BITMUX 405 +#define DBGAL 406 +#define DBGAH 407 +#define DBGHALT 408 +#define DBG 409 +#define DBGA 410 +#define DBGCMPLX 411 +#define IF 412 +#define COMMA 413 +#define BY 414 +#define COLON 415 +#define SEMICOLON 416 +#define RPAREN 417 +#define LPAREN 418 +#define LBRACK 419 +#define RBRACK 420 +#define STATUS_REG 421 +#define MNOP 422 +#define SYMBOL 423 +#define NUMBER 424 +#define GOT 425 +#define GOT17M4 426 +#define FUNCDESC_GOT17M4 427 +#define AT 428 +#define PLTPC 429 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 366 "bfin-parse.y" +{ + INSTR_T instr; + Expr_Node *expr; + SYMBOL_T symbol; + long value; + Register reg; + Macfunc macfunc; + struct { int r0; int s0; int x0; int aop; } modcodes; + struct { int r0; } r0; + Opt_mode mod; +} +/* Line 1489 of yacc.c. */ +#line 409 "bfin-parse.h" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/gas/doc/as.1 b/gas/doc/as.1 new file mode 100644 index 000000000..96e0f4139 --- /dev/null +++ b/gas/doc/as.1 @@ -0,0 +1,1134 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "AS 1" +.TH AS 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.SH "NAME" +AS \- the portable GNU assembler. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +as [\fB\-a\fR[\fBcdhlns\fR][=\fIfile\fR]] [\fB\-\-alternate\fR] [\fB\-D\fR] + [\fB\-\-defsym\fR \fIsym\fR=\fIval\fR] [\fB\-f\fR] [\fB\-g\fR] [\fB\-\-gstabs\fR] + [\fB\-\-gstabs+\fR] [\fB\-\-gdwarf\-2\fR] [\fB\-\-help\fR] [\fB\-I\fR \fIdir\fR] [\fB\-J\fR] + [\fB\-K\fR] [\fB\-L\fR] [\fB\-\-listing\-lhs\-width\fR=\fI\s-1NUM\s0\fR] + [\fB\-\-listing\-lhs\-width2\fR=\fI\s-1NUM\s0\fR] [\fB\-\-listing\-rhs\-width\fR=\fI\s-1NUM\s0\fR] + [\fB\-\-listing\-cont\-lines\fR=\fI\s-1NUM\s0\fR] [\fB\-\-keep\-locals\fR] [\fB\-o\fR + \fIobjfile\fR] [\fB\-R\fR] [\fB\-\-reduce\-memory\-overheads\fR] [\fB\-\-statistics\fR] + [\fB\-v\fR] [\fB\-version\fR] [\fB\-\-version\fR] [\fB\-W\fR] [\fB\-\-warn\fR] + [\fB\-\-fatal\-warnings\fR] [\fB\-w\fR] [\fB\-x\fR] [\fB\-Z\fR] [\fB@\fR\fI\s-1FILE\s0\fR] + [\fB\-\-target\-help\fR] [\fItarget-options\fR] + [\fB\-\-\fR|\fIfiles\fR ...] +.PP +\&\fITarget Alpha options:\fR + [\fB\-m\fR\fIcpu\fR] + [\fB\-mdebug\fR | \fB\-no\-mdebug\fR] + [\fB\-relax\fR] [\fB\-g\fR] [\fB\-G\fR\fIsize\fR] + [\fB\-F\fR] [\fB\-32addr\fR] +.PP +\&\fITarget \s-1ARC\s0 options:\fR + [\fB\-marc[5|6|7|8]\fR] + [\fB\-EB\fR|\fB\-EL\fR] +.PP +\&\fITarget \s-1ARM\s0 options:\fR + [\fB\-mcpu\fR=\fIprocessor\fR[+\fIextension\fR...]] + [\fB\-march\fR=\fIarchitecture\fR[+\fIextension\fR...]] + [\fB\-mfpu\fR=\fIfloating-point-format\fR] + [\fB\-mfloat\-abi\fR=\fIabi\fR] + [\fB\-meabi\fR=\fIver\fR] + [\fB\-mthumb\fR] + [\fB\-EB\fR|\fB\-EL\fR] + [\fB\-mapcs\-32\fR|\fB\-mapcs\-26\fR|\fB\-mapcs\-float\fR| + \fB\-mapcs\-reentrant\fR] + [\fB\-mthumb\-interwork\fR] [\fB\-k\fR] +.PP +\&\fITarget \s-1CRIS\s0 options:\fR + [\fB\-\-underscore\fR | \fB\-\-no\-underscore\fR] + [\fB\-\-pic\fR] [\fB\-N\fR] + [\fB\-\-emulation=criself\fR | \fB\-\-emulation=crisaout\fR] + [\fB\-\-march=v0_v10\fR | \fB\-\-march=v10\fR | \fB\-\-march=v32\fR | \fB\-\-march=common_v10_v32\fR] +.PP +\&\fITarget D10V options:\fR + [\fB\-O\fR] +.PP +\&\fITarget D30V options:\fR + [\fB\-O\fR|\fB\-n\fR|\fB\-N\fR] +.PP +\&\fITarget i386 options:\fR + [\fB\-\-32\fR|\fB\-\-64\fR] [\fB\-n\fR] + [\fB\-march\fR=\fI\s-1CPU\s0\fR] [\fB\-mtune\fR=\fI\s-1CPU\s0\fR] +.PP +\&\fITarget i960 options:\fR + [\fB\-ACA\fR|\fB\-ACA_A\fR|\fB\-ACB\fR|\fB\-ACC\fR|\fB\-AKA\fR|\fB\-AKB\fR| + \fB\-AKC\fR|\fB\-AMC\fR] + [\fB\-b\fR] [\fB\-no\-relax\fR] +.PP +\&\fITarget \s-1IA\-64\s0 options:\fR + [\fB\-mconstant\-gp\fR|\fB\-mauto\-pic\fR] + [\fB\-milp32\fR|\fB\-milp64\fR|\fB\-mlp64\fR|\fB\-mp64\fR] + [\fB\-mle\fR|\fBmbe\fR] + [\fB\-mtune=itanium1\fR|\fB\-mtune=itanium2\fR] + [\fB\-munwind\-check=warning\fR|\fB\-munwind\-check=error\fR] + [\fB\-mhint.b=ok\fR|\fB\-mhint.b=warning\fR|\fB\-mhint.b=error\fR] + [\fB\-x\fR|\fB\-xexplicit\fR] [\fB\-xauto\fR] [\fB\-xdebug\fR] +.PP +\&\fITarget \s-1IP2K\s0 options:\fR + [\fB\-mip2022\fR|\fB\-mip2022ext\fR] +.PP +\&\fITarget M32C options:\fR + [\fB\-m32c\fR|\fB\-m16c\fR] +.PP +\&\fITarget M32R options:\fR + [\fB\-\-m32rx\fR|\fB\-\-[no\-]warn\-explicit\-parallel\-conflicts\fR| + \fB\-\-W[n]p\fR] +.PP +\&\fITarget M680X0 options:\fR + [\fB\-l\fR] [\fB\-m68000\fR|\fB\-m68010\fR|\fB\-m68020\fR|...] +.PP +\&\fITarget M68HC11 options:\fR + [\fB\-m68hc11\fR|\fB\-m68hc12\fR|\fB\-m68hcs12\fR] + [\fB\-mshort\fR|\fB\-mlong\fR] + [\fB\-mshort\-double\fR|\fB\-mlong\-double\fR] + [\fB\-\-force\-long\-branches\fR] [\fB\-\-short\-branches\fR] + [\fB\-\-strict\-direct\-mode\fR] [\fB\-\-print\-insn\-syntax\fR] + [\fB\-\-print\-opcodes\fR] [\fB\-\-generate\-example\fR] +.PP +\&\fITarget \s-1MCORE\s0 options:\fR + [\fB\-jsri2bsr\fR] [\fB\-sifilter\fR] [\fB\-relax\fR] + [\fB\-mcpu=[210|340]\fR] +.PP +\&\fITarget \s-1MIPS\s0 options:\fR + [\fB\-nocpp\fR] [\fB\-EL\fR] [\fB\-EB\fR] [\fB\-O\fR[\fIoptimization level\fR]] + [\fB\-g\fR[\fIdebug level\fR]] [\fB\-G\fR \fInum\fR] [\fB\-KPIC\fR] [\fB\-call_shared\fR] + [\fB\-non_shared\fR] [\fB\-xgot\fR [\fB\-mvxworks\-pic\fR] + [\fB\-mabi\fR=\fI\s-1ABI\s0\fR] [\fB\-32\fR] [\fB\-n32\fR] [\fB\-64\fR] [\fB\-mfp32\fR] [\fB\-mgp32\fR] + [\fB\-march\fR=\fI\s-1CPU\s0\fR] [\fB\-mtune\fR=\fI\s-1CPU\s0\fR] [\fB\-mips1\fR] [\fB\-mips2\fR] + [\fB\-mips3\fR] [\fB\-mips4\fR] [\fB\-mips5\fR] [\fB\-mips32\fR] [\fB\-mips32r2\fR] + [\fB\-mips64\fR] [\fB\-mips64r2\fR] + [\fB\-construct\-floats\fR] [\fB\-no\-construct\-floats\fR] + [\fB\-trap\fR] [\fB\-no\-break\fR] [\fB\-break\fR] [\fB\-no\-trap\fR] + [\fB\-mfix7000\fR] [\fB\-mno\-fix7000\fR] + [\fB\-mips16\fR] [\fB\-no\-mips16\fR] + [\fB\-msmartmips\fR] [\fB\-mno\-smartmips\fR] + [\fB\-mips3d\fR] [\fB\-no\-mips3d\fR] + [\fB\-mdmx\fR] [\fB\-no\-mdmx\fR] + [\fB\-mdsp\fR] [\fB\-mno\-dsp\fR] + [\fB\-mdspr2\fR] [\fB\-mno\-dspr2\fR] + [\fB\-mmt\fR] [\fB\-mno\-mt\fR] + [\fB\-mdebug\fR] [\fB\-no\-mdebug\fR] + [\fB\-mpdr\fR] [\fB\-mno\-pdr\fR] +.PP +\&\fITarget \s-1MMIX\s0 options:\fR + [\fB\-\-fixed\-special\-register\-names\fR] [\fB\-\-globalize\-symbols\fR] + [\fB\-\-gnu\-syntax\fR] [\fB\-\-relax\fR] [\fB\-\-no\-predefined\-symbols\fR] + [\fB\-\-no\-expand\fR] [\fB\-\-no\-merge\-gregs\fR] [\fB\-x\fR] + [\fB\-\-linker\-allocated\-gregs\fR] +.PP +\&\fITarget \s-1PDP11\s0 options:\fR + [\fB\-mpic\fR|\fB\-mno\-pic\fR] [\fB\-mall\fR] [\fB\-mno\-extensions\fR] + [\fB\-m\fR\fIextension\fR|\fB\-mno\-\fR\fIextension\fR] + [\fB\-m\fR\fIcpu\fR] [\fB\-m\fR\fImachine\fR] +.PP +\&\fITarget picoJava options:\fR + [\fB\-mb\fR|\fB\-me\fR] +.PP +\&\fITarget PowerPC options:\fR + [\fB\-mpwrx\fR|\fB\-mpwr2\fR|\fB\-mpwr\fR|\fB\-m601\fR|\fB\-mppc\fR|\fB\-mppc32\fR|\fB\-m603\fR|\fB\-m604\fR| + \fB\-m403\fR|\fB\-m405\fR|\fB\-mppc64\fR|\fB\-m620\fR|\fB\-mppc64bridge\fR|\fB\-mbooke\fR| + \fB\-mbooke32\fR|\fB\-mbooke64\fR] + [\fB\-mcom\fR|\fB\-many\fR|\fB\-maltivec\fR] [\fB\-memb\fR] + [\fB\-mregnames\fR|\fB\-mno\-regnames\fR] + [\fB\-mrelocatable\fR|\fB\-mrelocatable\-lib\fR] + [\fB\-mlittle\fR|\fB\-mlittle\-endian\fR|\fB\-mbig\fR|\fB\-mbig\-endian\fR] + [\fB\-msolaris\fR|\fB\-mno\-solaris\fR] +.PP +\&\fITarget \s-1SPARC\s0 options:\fR + [\fB\-Av6\fR|\fB\-Av7\fR|\fB\-Av8\fR|\fB\-Asparclet\fR|\fB\-Asparclite\fR + \fB\-Av8plus\fR|\fB\-Av8plusa\fR|\fB\-Av9\fR|\fB\-Av9a\fR] + [\fB\-xarch=v8plus\fR|\fB\-xarch=v8plusa\fR] [\fB\-bump\fR] + [\fB\-32\fR|\fB\-64\fR] +.PP +\&\fITarget \s-1TIC54X\s0 options:\fR + [\fB\-mcpu=54[123589]\fR|\fB\-mcpu=54[56]lp\fR] [\fB\-mfar\-mode\fR|\fB\-mf\fR] + [\fB\-merrors\-to\-file\fR \fI\fR|\fB\-me\fR \fI\fR] +.PP +\&\fITarget Z80 options:\fR + [\fB\-z80\fR] [\fB\-r800\fR] + [ \fB\-ignore\-undocumented\-instructions\fR] [\fB\-Wnud\fR] + [ \fB\-ignore\-unportable\-instructions\fR] [\fB\-Wnup\fR] + [ \fB\-warn\-undocumented\-instructions\fR] [\fB\-Wud\fR] + [ \fB\-warn\-unportable\-instructions\fR] [\fB\-Wup\fR] + [ \fB\-forbid\-undocumented\-instructions\fR] [\fB\-Fud\fR] + [ \fB\-forbid\-unportable\-instructions\fR] [\fB\-Fup\fR] +.PP +\&\fITarget Xtensa options:\fR + [\fB\-\-[no\-]text\-section\-literals\fR] [\fB\-\-[no\-]absolute\-literals\fR] + [\fB\-\-[no\-]target\-align\fR] [\fB\-\-[no\-]longcalls\fR] + [\fB\-\-[no\-]transform\fR] + [\fB\-\-rename\-section\fR \fIoldname\fR=\fInewname\fR] +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\s-1GNU\s0 \fBas\fR is really a family of assemblers. +If you use (or have used) the \s-1GNU\s0 assembler on one architecture, you +should find a fairly similar environment when you use it on another +architecture. Each version has much in common with the others, +including object file formats, most assembler directives (often called +\&\fIpseudo-ops\fR) and assembler syntax. +.PP +\&\fBas\fR is primarily intended to assemble the output of the +\&\s-1GNU\s0 C compiler \f(CW\*(C`gcc\*(C'\fR for use by the linker +\&\f(CW\*(C`ld\*(C'\fR. Nevertheless, we've tried to make \fBas\fR +assemble correctly everything that other assemblers for the same +machine would assemble. +Any exceptions are documented explicitly. +This doesn't mean \fBas\fR always uses the same syntax as another +assembler for the same architecture; for example, we know of several +incompatible versions of 680x0 assembly language syntax. +.PP +Each time you run \fBas\fR it assembles exactly one source +program. The source program is made up of one or more files. +(The standard input is also a file.) +.PP +You give \fBas\fR a command line that has zero or more input file +names. The input files are read (from left file name to right). A +command line argument (in any position) that has no special meaning +is taken to be an input file name. +.PP +If you give \fBas\fR no file names it attempts to read one input file +from the \fBas\fR standard input, which is normally your terminal. You +may have to type \fBctl-D\fR to tell \fBas\fR there is no more program +to assemble. +.PP +Use \fB\-\-\fR if you need to explicitly name the standard input file +in your command line. +.PP +If the source is empty, \fBas\fR produces a small, empty object +file. +.PP +\&\fBas\fR may write warnings and error messages to the standard error +file (usually your terminal). This should not happen when a compiler +runs \fBas\fR automatically. Warnings report an assumption made so +that \fBas\fR could keep assembling a flawed program; errors report a +grave problem that stops the assembly. +.PP +If you are invoking \fBas\fR via the \s-1GNU\s0 C compiler, +you can use the \fB\-Wa\fR option to pass arguments through to the assembler. +The assembler arguments must be separated from each other (and the \fB\-Wa\fR) +by commas. For example: +.PP +.Vb 1 +\& gcc \-c \-g \-O \-Wa,\-alh,\-L file.c +.Ve +.PP +This passes two options to the assembler: \fB\-alh\fR (emit a listing to +standard output with high-level and assembly source) and \fB\-L\fR (retain +local symbols in the symbol table). +.PP +Usually you do not need to use this \fB\-Wa\fR mechanism, since many compiler +command-line options are automatically passed to the assembler by the compiler. +(You can call the \s-1GNU\s0 compiler driver with the \fB\-v\fR option to see +precisely what options it passes to each compilation pass, including the +assembler.) +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB@\fR\fIfile\fR" 4 +.IX Item "@file" +Read command-line options from \fIfile\fR. The options read are +inserted in place of the original @\fIfile\fR option. If \fIfile\fR +does not exist, or cannot be read, then the option will be treated +literally, and not removed. +.Sp +Options in \fIfile\fR are separated by whitespace. A whitespace +character may be included in an option by surrounding the entire +option in either single or double quotes. Any character (including a +backslash) may be included by prefixing the character to be included +with a backslash. The \fIfile\fR may itself contain additional +@\fIfile\fR options; any such options will be processed recursively. +.IP "\fB\-a[cdhlmns]\fR" 4 +.IX Item "-a[cdhlmns]" +Turn on listings, in any of a variety of ways: +.RS 4 +.IP "\fB\-ac\fR" 4 +.IX Item "-ac" +omit false conditionals +.IP "\fB\-ad\fR" 4 +.IX Item "-ad" +omit debugging directives +.IP "\fB\-ah\fR" 4 +.IX Item "-ah" +include high-level source +.IP "\fB\-al\fR" 4 +.IX Item "-al" +include assembly +.IP "\fB\-am\fR" 4 +.IX Item "-am" +include macro expansions +.IP "\fB\-an\fR" 4 +.IX Item "-an" +omit forms processing +.IP "\fB\-as\fR" 4 +.IX Item "-as" +include symbols +.IP "\fB=file\fR" 4 +.IX Item "=file" +set the name of the listing file +.RE +.RS 4 +.Sp +You may combine these options; for example, use \fB\-aln\fR for assembly +listing without forms processing. The \fB=file\fR option, if used, must be +the last one. By itself, \fB\-a\fR defaults to \fB\-ahls\fR. +.RE +.IP "\fB\-\-alternate\fR" 4 +.IX Item "--alternate" +Begin in alternate macro mode. +.IP "\fB\-D\fR" 4 +.IX Item "-D" +Ignored. This option is accepted for script compatibility with calls to +other assemblers. +.IP "\fB\-\-defsym\fR \fIsym\fR\fB=\fR\fIvalue\fR" 4 +.IX Item "--defsym sym=value" +Define the symbol \fIsym\fR to be \fIvalue\fR before assembling the input file. +\&\fIvalue\fR must be an integer constant. As in C, a leading \fB0x\fR +indicates a hexadecimal value, and a leading \fB0\fR indicates an octal +value. The value of the symbol can be overridden inside a source file via the +use of a \f(CW\*(C`.set\*(C'\fR pseudo\-op. +.IP "\fB\-f\fR" 4 +.IX Item "-f" +\&\*(L"fast\*(R"\-\-\-skip whitespace and comment preprocessing (assume source is +compiler output). +.IP "\fB\-g\fR" 4 +.IX Item "-g" +.PD 0 +.IP "\fB\-\-gen\-debug\fR" 4 +.IX Item "--gen-debug" +.PD +Generate debugging information for each assembler source line using whichever +debug format is preferred by the target. This currently means either \s-1STABS\s0, +\&\s-1ECOFF\s0 or \s-1DWARF2\s0. +.IP "\fB\-\-gstabs\fR" 4 +.IX Item "--gstabs" +Generate stabs debugging information for each assembler line. This +may help debugging assembler code, if the debugger can handle it. +.IP "\fB\-\-gstabs+\fR" 4 +.IX Item "--gstabs+" +Generate stabs debugging information for each assembler line, with \s-1GNU\s0 +extensions that probably only gdb can handle, and that could make other +debuggers crash or refuse to read your program. This +may help debugging assembler code. Currently the only \s-1GNU\s0 extension is +the location of the current working directory at assembling time. +.IP "\fB\-\-gdwarf\-2\fR" 4 +.IX Item "--gdwarf-2" +Generate \s-1DWARF2\s0 debugging information for each assembler line. This +may help debugging assembler code, if the debugger can handle it. Note\-\-\-this +option is only supported by some targets, not all of them. +.IP "\fB\-\-help\fR" 4 +.IX Item "--help" +Print a summary of the command line options and exit. +.IP "\fB\-\-target\-help\fR" 4 +.IX Item "--target-help" +Print a summary of all target specific options and exit. +.IP "\fB\-I\fR \fIdir\fR" 4 +.IX Item "-I dir" +Add directory \fIdir\fR to the search list for \f(CW\*(C`.include\*(C'\fR directives. +.IP "\fB\-J\fR" 4 +.IX Item "-J" +Don't warn about signed overflow. +.IP "\fB\-K\fR" 4 +.IX Item "-K" +Issue warnings when difference tables altered for long displacements. +.IP "\fB\-L\fR" 4 +.IX Item "-L" +.PD 0 +.IP "\fB\-\-keep\-locals\fR" 4 +.IX Item "--keep-locals" +.PD +Keep (in the symbol table) local symbols. These symbols start with +system-specific local label prefixes, typically \fB.L\fR for \s-1ELF\s0 systems +or \fBL\fR for traditional a.out systems. +.IP "\fB\-\-listing\-lhs\-width=\fR\fInumber\fR" 4 +.IX Item "--listing-lhs-width=number" +Set the maximum width, in words, of the output data column for an assembler +listing to \fInumber\fR. +.IP "\fB\-\-listing\-lhs\-width2=\fR\fInumber\fR" 4 +.IX Item "--listing-lhs-width2=number" +Set the maximum width, in words, of the output data column for continuation +lines in an assembler listing to \fInumber\fR. +.IP "\fB\-\-listing\-rhs\-width=\fR\fInumber\fR" 4 +.IX Item "--listing-rhs-width=number" +Set the maximum width of an input source line, as displayed in a listing, to +\&\fInumber\fR bytes. +.IP "\fB\-\-listing\-cont\-lines=\fR\fInumber\fR" 4 +.IX Item "--listing-cont-lines=number" +Set the maximum number of lines printed in a listing for a single line of input +to \fInumber\fR + 1. +.IP "\fB\-o\fR \fIobjfile\fR" 4 +.IX Item "-o objfile" +Name the object-file output from \fBas\fR \fIobjfile\fR. +.IP "\fB\-R\fR" 4 +.IX Item "-R" +Fold the data section into the text section. +.Sp +Set the default size of \s-1GAS\s0's hash tables to a prime number close to +\&\fInumber\fR. Increasing this value can reduce the length of time it takes the +assembler to perform its tasks, at the expense of increasing the assembler's +memory requirements. Similarly reducing this value can reduce the memory +requirements at the expense of speed. +.IP "\fB\-\-reduce\-memory\-overheads\fR" 4 +.IX Item "--reduce-memory-overheads" +This option reduces \s-1GAS\s0's memory requirements, at the expense of making the +assembly processes slower. Currently this switch is a synonym for +\&\fB\-\-hash\-size=4051\fR, but in the future it may have other effects as well. +.IP "\fB\-\-statistics\fR" 4 +.IX Item "--statistics" +Print the maximum space (in bytes) and total time (in seconds) used by +assembly. +.IP "\fB\-\-strip\-local\-absolute\fR" 4 +.IX Item "--strip-local-absolute" +Remove local absolute symbols from the outgoing symbol table. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +.PD 0 +.IP "\fB\-version\fR" 4 +.IX Item "-version" +.PD +Print the \fBas\fR version. +.IP "\fB\-\-version\fR" 4 +.IX Item "--version" +Print the \fBas\fR version and exit. +.IP "\fB\-W\fR" 4 +.IX Item "-W" +.PD 0 +.IP "\fB\-\-no\-warn\fR" 4 +.IX Item "--no-warn" +.PD +Suppress warning messages. +.IP "\fB\-\-fatal\-warnings\fR" 4 +.IX Item "--fatal-warnings" +Treat warnings as errors. +.IP "\fB\-\-warn\fR" 4 +.IX Item "--warn" +Don't suppress warning messages or treat them as errors. +.IP "\fB\-w\fR" 4 +.IX Item "-w" +Ignored. +.IP "\fB\-x\fR" 4 +.IX Item "-x" +Ignored. +.IP "\fB\-Z\fR" 4 +.IX Item "-Z" +Generate an object file even after errors. +.IP "\fB\-\- |\fR \fIfiles\fR \fB...\fR" 4 +.IX Item "-- | files ..." +Standard input, or source files to assemble. +.PP +The following options are available when as is configured for +an \s-1ARC\s0 processor. +.IP "\fB\-marc[5|6|7|8]\fR" 4 +.IX Item "-marc[5|6|7|8]" +This option selects the core processor variant. +.IP "\fB\-EB | \-EL\fR" 4 +.IX Item "-EB | -EL" +Select either big-endian (\-EB) or little-endian (\-EL) output. +.PP +The following options are available when as is configured for the \s-1ARM\s0 +processor family. +.IP "\fB\-mcpu=\fR\fIprocessor\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4 +.IX Item "-mcpu=processor[+extension...]" +Specify which \s-1ARM\s0 processor variant is the target. +.IP "\fB\-march=\fR\fIarchitecture\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4 +.IX Item "-march=architecture[+extension...]" +Specify which \s-1ARM\s0 architecture variant is used by the target. +.IP "\fB\-mfpu=\fR\fIfloating-point-format\fR" 4 +.IX Item "-mfpu=floating-point-format" +Select which Floating Point architecture is the target. +.IP "\fB\-mfloat\-abi=\fR\fIabi\fR" 4 +.IX Item "-mfloat-abi=abi" +Select which floating point \s-1ABI\s0 is in use. +.IP "\fB\-mthumb\fR" 4 +.IX Item "-mthumb" +Enable Thumb only instruction decoding. +.IP "\fB\-mapcs\-32 | \-mapcs\-26 | \-mapcs\-float | \-mapcs\-reentrant\fR" 4 +.IX Item "-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant" +Select which procedure calling convention is in use. +.IP "\fB\-EB | \-EL\fR" 4 +.IX Item "-EB | -EL" +Select either big-endian (\-EB) or little-endian (\-EL) output. +.IP "\fB\-mthumb\-interwork\fR" 4 +.IX Item "-mthumb-interwork" +Specify that the code has been generated with interworking between Thumb and +\&\s-1ARM\s0 code in mind. +.IP "\fB\-k\fR" 4 +.IX Item "-k" +Specify that \s-1PIC\s0 code has been generated. +.PP +See the info pages for documentation of the CRIS-specific options. +.PP +The following options are available when as is configured for +a D10V processor. +.IP "\fB\-O\fR" 4 +.IX Item "-O" +Optimize output by parallelizing instructions. +.PP +The following options are available when as is configured for a D30V +processor. +.IP "\fB\-O\fR" 4 +.IX Item "-O" +Optimize output by parallelizing instructions. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +Warn when nops are generated. +.IP "\fB\-N\fR" 4 +.IX Item "-N" +Warn when a nop after a 32\-bit multiply instruction is generated. +.PP +The following options are available when as is configured for the +Intel 80960 processor. +.IP "\fB\-ACA | \-ACA_A | \-ACB | \-ACC | \-AKA | \-AKB | \-AKC | \-AMC\fR" 4 +.IX Item "-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC" +Specify which variant of the 960 architecture is the target. +.IP "\fB\-b\fR" 4 +.IX Item "-b" +Add code to collect statistics about branches taken. +.IP "\fB\-no\-relax\fR" 4 +.IX Item "-no-relax" +Do not alter compare-and-branch instructions for long displacements; +error if necessary. +.PP +The following options are available when as is configured for the +Ubicom \s-1IP2K\s0 series. +.IP "\fB\-mip2022ext\fR" 4 +.IX Item "-mip2022ext" +Specifies that the extended \s-1IP2022\s0 instructions are allowed. +.IP "\fB\-mip2022\fR" 4 +.IX Item "-mip2022" +Restores the default behaviour, which restricts the permitted instructions to +just the basic \s-1IP2022\s0 ones. +.PP +The following options are available when as is configured for the +Renesas M32C and M16C processors. +.IP "\fB\-m32c\fR" 4 +.IX Item "-m32c" +Assemble M32C instructions. +.IP "\fB\-m16c\fR" 4 +.IX Item "-m16c" +Assemble M16C instructions (the default). +.PP +The following options are available when as is configured for the +Renesas M32R (formerly Mitsubishi M32R) series. +.IP "\fB\-\-m32rx\fR" 4 +.IX Item "--m32rx" +Specify which processor in the M32R family is the target. The default +is normally the M32R, but this option changes it to the M32RX. +.IP "\fB\-\-warn\-explicit\-parallel\-conflicts or \-\-Wp\fR" 4 +.IX Item "--warn-explicit-parallel-conflicts or --Wp" +Produce warning messages when questionable parallel constructs are +encountered. +.IP "\fB\-\-no\-warn\-explicit\-parallel\-conflicts or \-\-Wnp\fR" 4 +.IX Item "--no-warn-explicit-parallel-conflicts or --Wnp" +Do not produce warning messages when questionable parallel constructs are +encountered. +.PP +The following options are available when as is configured for the +Motorola 68000 series. +.IP "\fB\-l\fR" 4 +.IX Item "-l" +Shorten references to undefined symbols, to one word instead of two. +.IP "\fB\-m68000 | \-m68008 | \-m68010 | \-m68020 | \-m68030\fR" 4 +.IX Item "-m68000 | -m68008 | -m68010 | -m68020 | -m68030" +.PD 0 +.IP "\fB| \-m68040 | \-m68060 | \-m68302 | \-m68331 | \-m68332\fR" 4 +.IX Item "| -m68040 | -m68060 | -m68302 | -m68331 | -m68332" +.IP "\fB| \-m68333 | \-m68340 | \-mcpu32 | \-m5200\fR" 4 +.IX Item "| -m68333 | -m68340 | -mcpu32 | -m5200" +.PD +Specify what processor in the 68000 family is the target. The default +is normally the 68020, but this can be changed at configuration time. +.IP "\fB\-m68881 | \-m68882 | \-mno\-68881 | \-mno\-68882\fR" 4 +.IX Item "-m68881 | -m68882 | -mno-68881 | -mno-68882" +The target machine does (or does not) have a floating-point coprocessor. +The default is to assume a coprocessor for 68020, 68030, and cpu32. Although +the basic 68000 is not compatible with the 68881, a combination of the +two can be specified, since it's possible to do emulation of the +coprocessor instructions with the main processor. +.IP "\fB\-m68851 | \-mno\-68851\fR" 4 +.IX Item "-m68851 | -mno-68851" +The target machine does (or does not) have a memory-management +unit coprocessor. The default is to assume an \s-1MMU\s0 for 68020 and up. +.PP +For details about the \s-1PDP\-11\s0 machine dependent features options, +see \fBPDP\-11\-Options\fR. +.IP "\fB\-mpic | \-mno\-pic\fR" 4 +.IX Item "-mpic | -mno-pic" +Generate position-independent (or position\-dependent) code. The +default is \fB\-mpic\fR. +.IP "\fB\-mall\fR" 4 +.IX Item "-mall" +.PD 0 +.IP "\fB\-mall\-extensions\fR" 4 +.IX Item "-mall-extensions" +.PD +Enable all instruction set extensions. This is the default. +.IP "\fB\-mno\-extensions\fR" 4 +.IX Item "-mno-extensions" +Disable all instruction set extensions. +.IP "\fB\-m\fR\fIextension\fR \fB| \-mno\-\fR\fIextension\fR" 4 +.IX Item "-mextension | -mno-extension" +Enable (or disable) a particular instruction set extension. +.IP "\fB\-m\fR\fIcpu\fR" 4 +.IX Item "-mcpu" +Enable the instruction set extensions supported by a particular \s-1CPU\s0, and +disable all other extensions. +.IP "\fB\-m\fR\fImachine\fR" 4 +.IX Item "-mmachine" +Enable the instruction set extensions supported by a particular machine +model, and disable all other extensions. +.PP +The following options are available when as is configured for +a picoJava processor. +.IP "\fB\-mb\fR" 4 +.IX Item "-mb" +Generate \*(L"big endian\*(R" format output. +.IP "\fB\-ml\fR" 4 +.IX Item "-ml" +Generate \*(L"little endian\*(R" format output. +.PP +The following options are available when as is configured for the +Motorola 68HC11 or 68HC12 series. +.IP "\fB\-m68hc11 | \-m68hc12 | \-m68hcs12\fR" 4 +.IX Item "-m68hc11 | -m68hc12 | -m68hcs12" +Specify what processor is the target. The default is +defined by the configuration option when building the assembler. +.IP "\fB\-mshort\fR" 4 +.IX Item "-mshort" +Specify to use the 16\-bit integer \s-1ABI\s0. +.IP "\fB\-mlong\fR" 4 +.IX Item "-mlong" +Specify to use the 32\-bit integer \s-1ABI\s0. +.IP "\fB\-mshort\-double\fR" 4 +.IX Item "-mshort-double" +Specify to use the 32\-bit double \s-1ABI\s0. +.IP "\fB\-mlong\-double\fR" 4 +.IX Item "-mlong-double" +Specify to use the 64\-bit double \s-1ABI\s0. +.IP "\fB\-\-force\-long\-branches\fR" 4 +.IX Item "--force-long-branches" +Relative branches are turned into absolute ones. This concerns +conditional branches, unconditional branches and branches to a +sub routine. +.IP "\fB\-S | \-\-short\-branches\fR" 4 +.IX Item "-S | --short-branches" +Do not turn relative branches into absolute ones +when the offset is out of range. +.IP "\fB\-\-strict\-direct\-mode\fR" 4 +.IX Item "--strict-direct-mode" +Do not turn the direct addressing mode into extended addressing mode +when the instruction does not support direct addressing mode. +.IP "\fB\-\-print\-insn\-syntax\fR" 4 +.IX Item "--print-insn-syntax" +Print the syntax of instruction in case of error. +.IP "\fB\-\-print\-opcodes\fR" 4 +.IX Item "--print-opcodes" +print the list of instructions with syntax and then exit. +.IP "\fB\-\-generate\-example\fR" 4 +.IX Item "--generate-example" +print an example of instruction for each possible instruction and then exit. +This option is only useful for testing \fBas\fR. +.PP +The following options are available when \fBas\fR is configured +for the \s-1SPARC\s0 architecture: +.IP "\fB\-Av6 | \-Av7 | \-Av8 | \-Asparclet | \-Asparclite\fR" 4 +.IX Item "-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite" +.PD 0 +.IP "\fB\-Av8plus | \-Av8plusa | \-Av9 | \-Av9a\fR" 4 +.IX Item "-Av8plus | -Av8plusa | -Av9 | -Av9a" +.PD +Explicitly select a variant of the \s-1SPARC\s0 architecture. +.Sp +\&\fB\-Av8plus\fR and \fB\-Av8plusa\fR select a 32 bit environment. +\&\fB\-Av9\fR and \fB\-Av9a\fR select a 64 bit environment. +.Sp +\&\fB\-Av8plusa\fR and \fB\-Av9a\fR enable the \s-1SPARC\s0 V9 instruction set with +UltraSPARC extensions. +.IP "\fB\-xarch=v8plus | \-xarch=v8plusa\fR" 4 +.IX Item "-xarch=v8plus | -xarch=v8plusa" +For compatibility with the Solaris v9 assembler. These options are +equivalent to \-Av8plus and \-Av8plusa, respectively. +.IP "\fB\-bump\fR" 4 +.IX Item "-bump" +Warn when the assembler switches to another architecture. +.PP +The following options are available when as is configured for the 'c54x +architecture. +.IP "\fB\-mfar\-mode\fR" 4 +.IX Item "-mfar-mode" +Enable extended addressing mode. All addresses and relocations will assume +extended addressing (usually 23 bits). +.IP "\fB\-mcpu=\fR\fI\s-1CPU_VERSION\s0\fR" 4 +.IX Item "-mcpu=CPU_VERSION" +Sets the \s-1CPU\s0 version being compiled for. +.IP "\fB\-merrors\-to\-file\fR \fI\s-1FILENAME\s0\fR" 4 +.IX Item "-merrors-to-file FILENAME" +Redirect error output to a file, for broken systems which don't support such +behaviour in the shell. +.PP +The following options are available when as is configured for +a \s-1MIPS\s0 processor. +.IP "\fB\-G\fR \fInum\fR" 4 +.IX Item "-G num" +This option sets the largest size of an object that can be referenced +implicitly with the \f(CW\*(C`gp\*(C'\fR register. It is only accepted for targets that +use \s-1ECOFF\s0 format, such as a DECstation running Ultrix. The default value is 8. +.IP "\fB\-EB\fR" 4 +.IX Item "-EB" +Generate \*(L"big endian\*(R" format output. +.IP "\fB\-EL\fR" 4 +.IX Item "-EL" +Generate \*(L"little endian\*(R" format output. +.IP "\fB\-mips1\fR" 4 +.IX Item "-mips1" +.PD 0 +.IP "\fB\-mips2\fR" 4 +.IX Item "-mips2" +.IP "\fB\-mips3\fR" 4 +.IX Item "-mips3" +.IP "\fB\-mips4\fR" 4 +.IX Item "-mips4" +.IP "\fB\-mips5\fR" 4 +.IX Item "-mips5" +.IP "\fB\-mips32\fR" 4 +.IX Item "-mips32" +.IP "\fB\-mips32r2\fR" 4 +.IX Item "-mips32r2" +.IP "\fB\-mips64\fR" 4 +.IX Item "-mips64" +.IP "\fB\-mips64r2\fR" 4 +.IX Item "-mips64r2" +.PD +Generate code for a particular \s-1MIPS\s0 Instruction Set Architecture level. +\&\fB\-mips1\fR is an alias for \fB\-march=r3000\fR, \fB\-mips2\fR is an +alias for \fB\-march=r6000\fR, \fB\-mips3\fR is an alias for +\&\fB\-march=r4000\fR and \fB\-mips4\fR is an alias for \fB\-march=r8000\fR. +\&\fB\-mips5\fR, \fB\-mips32\fR, \fB\-mips32r2\fR, \fB\-mips64\fR, and +\&\fB\-mips64r2\fR +correspond to generic +\&\fB\s-1MIPS\s0 V\fR, \fB\s-1MIPS32\s0\fR, \fB\s-1MIPS32\s0 Release 2\fR, \fB\s-1MIPS64\s0\fR, +and \fB\s-1MIPS64\s0 Release 2\fR +\&\s-1ISA\s0 processors, respectively. +.IP "\fB\-march=\fR\fI\s-1CPU\s0\fR" 4 +.IX Item "-march=CPU" +Generate code for a particular \s-1MIPS\s0 cpu. +.IP "\fB\-mtune=\fR\fIcpu\fR" 4 +.IX Item "-mtune=cpu" +Schedule and tune for a particular \s-1MIPS\s0 cpu. +.IP "\fB\-mfix7000\fR" 4 +.IX Item "-mfix7000" +.PD 0 +.IP "\fB\-mno\-fix7000\fR" 4 +.IX Item "-mno-fix7000" +.PD +Cause nops to be inserted if the read of the destination register +of an mfhi or mflo instruction occurs in the following two instructions. +.IP "\fB\-mdebug\fR" 4 +.IX Item "-mdebug" +.PD 0 +.IP "\fB\-no\-mdebug\fR" 4 +.IX Item "-no-mdebug" +.PD +Cause stabs-style debugging output to go into an ECOFF-style .mdebug +section instead of the standard \s-1ELF\s0 .stabs sections. +.IP "\fB\-mpdr\fR" 4 +.IX Item "-mpdr" +.PD 0 +.IP "\fB\-mno\-pdr\fR" 4 +.IX Item "-mno-pdr" +.PD +Control generation of \f(CW\*(C`.pdr\*(C'\fR sections. +.IP "\fB\-mgp32\fR" 4 +.IX Item "-mgp32" +.PD 0 +.IP "\fB\-mfp32\fR" 4 +.IX Item "-mfp32" +.PD +The register sizes are normally inferred from the \s-1ISA\s0 and \s-1ABI\s0, but these +flags force a certain group of registers to be treated as 32 bits wide at +all times. \fB\-mgp32\fR controls the size of general-purpose registers +and \fB\-mfp32\fR controls the size of floating-point registers. +.IP "\fB\-mips16\fR" 4 +.IX Item "-mips16" +.PD 0 +.IP "\fB\-no\-mips16\fR" 4 +.IX Item "-no-mips16" +.PD +Generate code for the \s-1MIPS\s0 16 processor. This is equivalent to putting +\&\f(CW\*(C`.set mips16\*(C'\fR at the start of the assembly file. \fB\-no\-mips16\fR +turns off this option. +.IP "\fB\-msmartmips\fR" 4 +.IX Item "-msmartmips" +.PD 0 +.IP "\fB\-mno\-smartmips\fR" 4 +.IX Item "-mno-smartmips" +.PD +Enables the SmartMIPS extension to the \s-1MIPS32\s0 instruction set. This is +equivalent to putting \f(CW\*(C`.set smartmips\*(C'\fR at the start of the assembly file. +\&\fB\-mno\-smartmips\fR turns off this option. +.IP "\fB\-mips3d\fR" 4 +.IX Item "-mips3d" +.PD 0 +.IP "\fB\-no\-mips3d\fR" 4 +.IX Item "-no-mips3d" +.PD +Generate code for the \s-1MIPS\-3D\s0 Application Specific Extension. +This tells the assembler to accept \s-1MIPS\-3D\s0 instructions. +\&\fB\-no\-mips3d\fR turns off this option. +.IP "\fB\-mdmx\fR" 4 +.IX Item "-mdmx" +.PD 0 +.IP "\fB\-no\-mdmx\fR" 4 +.IX Item "-no-mdmx" +.PD +Generate code for the \s-1MDMX\s0 Application Specific Extension. +This tells the assembler to accept \s-1MDMX\s0 instructions. +\&\fB\-no\-mdmx\fR turns off this option. +.IP "\fB\-mdsp\fR" 4 +.IX Item "-mdsp" +.PD 0 +.IP "\fB\-mno\-dsp\fR" 4 +.IX Item "-mno-dsp" +.PD +Generate code for the \s-1DSP\s0 Release 1 Application Specific Extension. +This tells the assembler to accept \s-1DSP\s0 Release 1 instructions. +\&\fB\-mno\-dsp\fR turns off this option. +.IP "\fB\-mdspr2\fR" 4 +.IX Item "-mdspr2" +.PD 0 +.IP "\fB\-mno\-dspr2\fR" 4 +.IX Item "-mno-dspr2" +.PD +Generate code for the \s-1DSP\s0 Release 2 Application Specific Extension. +This option implies \-mdsp. +This tells the assembler to accept \s-1DSP\s0 Release 2 instructions. +\&\fB\-mno\-dspr2\fR turns off this option. +.IP "\fB\-mmt\fR" 4 +.IX Item "-mmt" +.PD 0 +.IP "\fB\-mno\-mt\fR" 4 +.IX Item "-mno-mt" +.PD +Generate code for the \s-1MT\s0 Application Specific Extension. +This tells the assembler to accept \s-1MT\s0 instructions. +\&\fB\-mno\-mt\fR turns off this option. +.IP "\fB\-\-construct\-floats\fR" 4 +.IX Item "--construct-floats" +.PD 0 +.IP "\fB\-\-no\-construct\-floats\fR" 4 +.IX Item "--no-construct-floats" +.PD +The \fB\-\-no\-construct\-floats\fR option disables the construction of +double width floating point constants by loading the two halves of the +value into the two single width floating point registers that make up +the double width register. By default \fB\-\-construct\-floats\fR is +selected, allowing construction of these floating point constants. +.IP "\fB\-\-emulation=\fR\fIname\fR" 4 +.IX Item "--emulation=name" +This option causes \fBas\fR to emulate \fBas\fR configured +for some other target, in all respects, including output format (choosing +between \s-1ELF\s0 and \s-1ECOFF\s0 only), handling of pseudo-opcodes which may generate +debugging information or store symbol table information, and default +endianness. The available configuration names are: \fBmipsecoff\fR, +\&\fBmipself\fR, \fBmipslecoff\fR, \fBmipsbecoff\fR, \fBmipslelf\fR, +\&\fBmipsbelf\fR. The first two do not alter the default endianness from that +of the primary target for which the assembler was configured; the others change +the default to little\- or big-endian as indicated by the \fBb\fR or \fBl\fR +in the name. Using \fB\-EB\fR or \fB\-EL\fR will override the endianness +selection in any case. +.Sp +This option is currently supported only when the primary target +\&\fBas\fR is configured for is a \s-1MIPS\s0 \s-1ELF\s0 or \s-1ECOFF\s0 target. +Furthermore, the primary target or others specified with +\&\fB\-\-enable\-targets=...\fR at configuration time must include support for +the other format, if both are to be available. For example, the Irix 5 +configuration includes support for both. +.Sp +Eventually, this option will support more configurations, with more +fine-grained control over the assembler's behavior, and will be supported for +more processors. +.IP "\fB\-nocpp\fR" 4 +.IX Item "-nocpp" +\&\fBas\fR ignores this option. It is accepted for compatibility with +the native tools. +.IP "\fB\-\-trap\fR" 4 +.IX Item "--trap" +.PD 0 +.IP "\fB\-\-no\-trap\fR" 4 +.IX Item "--no-trap" +.IP "\fB\-\-break\fR" 4 +.IX Item "--break" +.IP "\fB\-\-no\-break\fR" 4 +.IX Item "--no-break" +.PD +Control how to deal with multiplication overflow and division by zero. +\&\fB\-\-trap\fR or \fB\-\-no\-break\fR (which are synonyms) take a trap exception +(and only work for Instruction Set Architecture level 2 and higher); +\&\fB\-\-break\fR or \fB\-\-no\-trap\fR (also synonyms, and the default) take a +break exception. +.IP "\fB\-n\fR" 4 +.IX Item "-n" +When this option is used, \fBas\fR will issue a warning every +time it generates a nop instruction from a macro. +.PP +The following options are available when as is configured for +an MCore processor. +.IP "\fB\-jsri2bsr\fR" 4 +.IX Item "-jsri2bsr" +.PD 0 +.IP "\fB\-nojsri2bsr\fR" 4 +.IX Item "-nojsri2bsr" +.PD +Enable or disable the \s-1JSRI\s0 to \s-1BSR\s0 transformation. By default this is enabled. +The command line option \fB\-nojsri2bsr\fR can be used to disable it. +.IP "\fB\-sifilter\fR" 4 +.IX Item "-sifilter" +.PD 0 +.IP "\fB\-nosifilter\fR" 4 +.IX Item "-nosifilter" +.PD +Enable or disable the silicon filter behaviour. By default this is disabled. +The default can be overridden by the \fB\-sifilter\fR command line option. +.IP "\fB\-relax\fR" 4 +.IX Item "-relax" +Alter jump instructions for long displacements. +.IP "\fB\-mcpu=[210|340]\fR" 4 +.IX Item "-mcpu=[210|340]" +Select the cpu type on the target hardware. This controls which instructions +can be assembled. +.IP "\fB\-EB\fR" 4 +.IX Item "-EB" +Assemble for a big endian target. +.IP "\fB\-EL\fR" 4 +.IX Item "-EL" +Assemble for a little endian target. +.PP +See the info pages for documentation of the MMIX-specific options. +.PP +The following options are available when as is configured for +an Xtensa processor. +.IP "\fB\-\-text\-section\-literals | \-\-no\-text\-section\-literals\fR" 4 +.IX Item "--text-section-literals | --no-text-section-literals" +With \fB\-\-text\-section\-literals\fR, literal pools are interspersed +in the text section. The default is +\&\fB\-\-no\-text\-section\-literals\fR, which places literals in a +separate section in the output file. These options only affect literals +referenced via PC-relative \f(CW\*(C`L32R\*(C'\fR instructions; literals for +absolute mode \f(CW\*(C`L32R\*(C'\fR instructions are handled separately. +.IP "\fB\-\-absolute\-literals | \-\-no\-absolute\-literals\fR" 4 +.IX Item "--absolute-literals | --no-absolute-literals" +Indicate to the assembler whether \f(CW\*(C`L32R\*(C'\fR instructions use absolute +or PC-relative addressing. The default is to assume absolute addressing +if the Xtensa processor includes the absolute \f(CW\*(C`L32R\*(C'\fR addressing +option. Otherwise, only the PC-relative \f(CW\*(C`L32R\*(C'\fR mode can be used. +.IP "\fB\-\-target\-align | \-\-no\-target\-align\fR" 4 +.IX Item "--target-align | --no-target-align" +Enable or disable automatic alignment to reduce branch penalties at the +expense of some code density. The default is \fB\-\-target\-align\fR. +.IP "\fB\-\-longcalls | \-\-no\-longcalls\fR" 4 +.IX Item "--longcalls | --no-longcalls" +Enable or disable transformation of call instructions to allow calls +across a greater range of addresses. The default is +\&\fB\-\-no\-longcalls\fR. +.IP "\fB\-\-transform | \-\-no\-transform\fR" 4 +.IX Item "--transform | --no-transform" +Enable or disable all assembler transformations of Xtensa instructions. +The default is \fB\-\-transform\fR; +\&\fB\-\-no\-transform\fR should be used only in the rare cases when the +instructions must be exactly as specified in the assembly source. +.PP +The following options are available when as is configured for +a Z80 family processor. +.IP "\fB\-z80\fR" 4 +.IX Item "-z80" +Assemble for Z80 processor. +.IP "\fB\-r800\fR" 4 +.IX Item "-r800" +Assemble for R800 processor. +.IP "\fB\-ignore\-undocumented\-instructions\fR" 4 +.IX Item "-ignore-undocumented-instructions" +.PD 0 +.IP "\fB\-Wnud\fR" 4 +.IX Item "-Wnud" +.PD +Assemble undocumented Z80 instructions that also work on R800 without warning. +.IP "\fB\-ignore\-unportable\-instructions\fR" 4 +.IX Item "-ignore-unportable-instructions" +.PD 0 +.IP "\fB\-Wnup\fR" 4 +.IX Item "-Wnup" +.PD +Assemble all undocumented Z80 instructions without warning. +.IP "\fB\-warn\-undocumented\-instructions\fR" 4 +.IX Item "-warn-undocumented-instructions" +.PD 0 +.IP "\fB\-Wud\fR" 4 +.IX Item "-Wud" +.PD +Issue a warning for undocumented Z80 instructions that also work on R800. +.IP "\fB\-warn\-unportable\-instructions\fR" 4 +.IX Item "-warn-unportable-instructions" +.PD 0 +.IP "\fB\-Wup\fR" 4 +.IX Item "-Wup" +.PD +Issue a warning for undocumented Z80 instructions that do not work on R800. +.IP "\fB\-forbid\-undocumented\-instructions\fR" 4 +.IX Item "-forbid-undocumented-instructions" +.PD 0 +.IP "\fB\-Fud\fR" 4 +.IX Item "-Fud" +.PD +Treat all undocumented instructions as errors. +.IP "\fB\-forbid\-unportable\-instructions\fR" 4 +.IX Item "-forbid-unportable-instructions" +.PD 0 +.IP "\fB\-Fup\fR" 4 +.IX Item "-Fup" +.PD +Treat undocumented Z80 instructions that do not work on R800 as errors. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIgcc\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIbinutils\fR and \fIld\fR. +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, +2006, 2007 Free Software Foundation, Inc. +.PP +Permission is granted to copy, distribute and/or modify this document +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". diff --git a/gas/doc/as.info b/gas/doc/as.info new file mode 100644 index 000000000..a669c4ce4 --- /dev/null +++ b/gas/doc/as.info @@ -0,0 +1,19163 @@ +This is as.info, produced by makeinfo version 4.8 from as.texinfo. + +START-INFO-DIR-ENTRY +* As: (as). The GNU assembler. +* Gas: (as). The GNU assembler. +END-INFO-DIR-ENTRY + + This file documents the GNU Assembler "as". + + Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, +2006, 2007 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.1 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled "GNU +Free Documentation License". + + +File: as.info, Node: Top, Next: Overview, Up: (dir) + +Using as +******** + +This file is a user guide to the GNU assembler `as' (GNU Binutils) +version 2.17.90. + + This document is distributed under the terms of the GNU Free +Documentation License. A copy of the license is included in the +section entitled "GNU Free Documentation License". + +* Menu: + +* Overview:: Overview +* Invoking:: Command-Line Options +* Syntax:: Syntax +* Sections:: Sections and Relocation +* Symbols:: Symbols +* Expressions:: Expressions +* Pseudo Ops:: Assembler Directives +* Machine Dependencies:: Machine Dependent Features +* Reporting Bugs:: Reporting Bugs +* Acknowledgements:: Who Did What +* GNU Free Documentation License:: GNU Free Documentation License +* AS Index:: AS Index + + +File: as.info, Node: Overview, Next: Invoking, Prev: Top, Up: Top + +1 Overview +********** + +Here is a brief summary of how to invoke `as'. For details, see *Note +Command-Line Options: Invoking. + + as [-a[cdhlns][=FILE]] [-alternate] [-D] + [-defsym SYM=VAL] [-f] [-g] [-gstabs] + [-gstabs+] [-gdwarf-2] [-help] [-I DIR] [-J] + [-K] [-L] [-listing-lhs-width=NUM] + [-listing-lhs-width2=NUM] [-listing-rhs-width=NUM] + [-listing-cont-lines=NUM] [-keep-locals] [-o + OBJFILE] [-R] [-reduce-memory-overheads] [-statistics] + [-v] [-version] [-version] [-W] [-warn] + [-fatal-warnings] [-w] [-x] [-Z] [@FILE] + [-target-help] [TARGET-OPTIONS] + [-|FILES ...] + + _Target Alpha options:_ + [-mCPU] + [-mdebug | -no-mdebug] + [-relax] [-g] [-GSIZE] + [-F] [-32addr] + + _Target ARC options:_ + [-marc[5|6|7|8]] + [-EB|-EL] + + _Target ARM options:_ + [-mcpu=PROCESSOR[+EXTENSION...]] + [-march=ARCHITECTURE[+EXTENSION...]] + [-mfpu=FLOATING-POINT-FORMAT] + [-mfloat-abi=ABI] + [-meabi=VER] + [-mthumb] + [-EB|-EL] + [-mapcs-32|-mapcs-26|-mapcs-float| + -mapcs-reentrant] + [-mthumb-interwork] [-k] + + _Target CRIS options:_ + [-underscore | -no-underscore] + [-pic] [-N] + [-emulation=criself | -emulation=crisaout] + [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32] + + _Target D10V options:_ + [-O] + + _Target D30V options:_ + [-O|-n|-N] + + _Target i386 options:_ + [-32|-64] [-n] + [-march=CPU] [-mtune=CPU] + + _Target i960 options:_ + [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB| + -AKC|-AMC] + [-b] [-no-relax] + + _Target IA-64 options:_ + [-mconstant-gp|-mauto-pic] + [-milp32|-milp64|-mlp64|-mp64] + [-mle|mbe] + [-mtune=itanium1|-mtune=itanium2] + [-munwind-check=warning|-munwind-check=error] + [-mhint.b=ok|-mhint.b=warning|-mhint.b=error] + [-x|-xexplicit] [-xauto] [-xdebug] + + _Target IP2K options:_ + [-mip2022|-mip2022ext] + + _Target M32C options:_ + [-m32c|-m16c] + + _Target M32R options:_ + [-m32rx|-[no-]warn-explicit-parallel-conflicts| + -W[n]p] + + _Target M680X0 options:_ + [-l] [-m68000|-m68010|-m68020|...] + + _Target M68HC11 options:_ + [-m68hc11|-m68hc12|-m68hcs12] + [-mshort|-mlong] + [-mshort-double|-mlong-double] + [-force-long-branches] [-short-branches] + [-strict-direct-mode] [-print-insn-syntax] + [-print-opcodes] [-generate-example] + + _Target MCORE options:_ + [-jsri2bsr] [-sifilter] [-relax] + [-mcpu=[210|340]] + + _Target MIPS options:_ + [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]] + [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared] + [-non_shared] [-xgot [-mvxworks-pic] + [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32] + [-march=CPU] [-mtune=CPU] [-mips1] [-mips2] + [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2] + [-mips64] [-mips64r2] + [-construct-floats] [-no-construct-floats] + [-trap] [-no-break] [-break] [-no-trap] + [-mfix7000] [-mno-fix7000] + [-mips16] [-no-mips16] + [-msmartmips] [-mno-smartmips] + [-mips3d] [-no-mips3d] + [-mdmx] [-no-mdmx] + [-mdsp] [-mno-dsp] + [-mdspr2] [-mno-dspr2] + [-mmt] [-mno-mt] + [-mdebug] [-no-mdebug] + [-mpdr] [-mno-pdr] + + _Target MMIX options:_ + [-fixed-special-register-names] [-globalize-symbols] + [-gnu-syntax] [-relax] [-no-predefined-symbols] + [-no-expand] [-no-merge-gregs] [-x] + [-linker-allocated-gregs] + + _Target PDP11 options:_ + [-mpic|-mno-pic] [-mall] [-mno-extensions] + [-mEXTENSION|-mno-EXTENSION] + [-mCPU] [-mMACHINE] + + _Target picoJava options:_ + [-mb|-me] + + _Target PowerPC options:_ + [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604| + -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke| + -mbooke32|-mbooke64] + [-mcom|-many|-maltivec] [-memb] + [-mregnames|-mno-regnames] + [-mrelocatable|-mrelocatable-lib] + [-mlittle|-mlittle-endian|-mbig|-mbig-endian] + [-msolaris|-mno-solaris] + + _Target SPARC options:_ + [-Av6|-Av7|-Av8|-Asparclet|-Asparclite + -Av8plus|-Av8plusa|-Av9|-Av9a] + [-xarch=v8plus|-xarch=v8plusa] [-bump] + [-32|-64] + + _Target TIC54X options:_ + [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf] + [-merrors-to-file |-me ] + + + _Target Z80 options:_ + [-z80] [-r800] + [ -ignore-undocumented-instructions] [-Wnud] + [ -ignore-unportable-instructions] [-Wnup] + [ -warn-undocumented-instructions] [-Wud] + [ -warn-unportable-instructions] [-Wup] + [ -forbid-undocumented-instructions] [-Fud] + [ -forbid-unportable-instructions] [-Fup] + + + _Target Xtensa options:_ + [-[no-]text-section-literals] [-[no-]absolute-literals] + [-[no-]target-align] [-[no-]longcalls] + [-[no-]transform] + [-rename-section OLDNAME=NEWNAME] + +`@FILE' + Read command-line options from FILE. The options read are + inserted in place of the original @FILE option. If FILE does not + exist, or cannot be read, then the option will be treated + literally, and not removed. + + Options in FILE are separated by whitespace. A whitespace + character may be included in an option by surrounding the entire + option in either single or double quotes. Any character + (including a backslash) may be included by prefixing the character + to be included with a backslash. The FILE may itself contain + additional @FILE options; any such options will be processed + recursively. + +`-a[cdhlmns]' + Turn on listings, in any of a variety of ways: + + `-ac' + omit false conditionals + + `-ad' + omit debugging directives + + `-ah' + include high-level source + + `-al' + include assembly + + `-am' + include macro expansions + + `-an' + omit forms processing + + `-as' + include symbols + + `=file' + set the name of the listing file + + You may combine these options; for example, use `-aln' for assembly + listing without forms processing. The `=file' option, if used, + must be the last one. By itself, `-a' defaults to `-ahls'. + +`--alternate' + Begin in alternate macro mode. *Note `.altmacro': Altmacro. + +`-D' + Ignored. This option is accepted for script compatibility with + calls to other assemblers. + +`--defsym SYM=VALUE' + Define the symbol SYM to be VALUE before assembling the input file. + VALUE must be an integer constant. As in C, a leading `0x' + indicates a hexadecimal value, and a leading `0' indicates an octal + value. The value of the symbol can be overridden inside a source + file via the use of a `.set' pseudo-op. + +`-f' + "fast"--skip whitespace and comment preprocessing (assume source is + compiler output). + +`-g' +`--gen-debug' + Generate debugging information for each assembler source line + using whichever debug format is preferred by the target. This + currently means either STABS, ECOFF or DWARF2. + +`--gstabs' + Generate stabs debugging information for each assembler line. This + may help debugging assembler code, if the debugger can handle it. + +`--gstabs+' + Generate stabs debugging information for each assembler line, with + GNU extensions that probably only gdb can handle, and that could + make other debuggers crash or refuse to read your program. This + may help debugging assembler code. Currently the only GNU + extension is the location of the current working directory at + assembling time. + +`--gdwarf-2' + Generate DWARF2 debugging information for each assembler line. + This may help debugging assembler code, if the debugger can handle + it. Note--this option is only supported by some targets, not all + of them. + +`--help' + Print a summary of the command line options and exit. + +`--target-help' + Print a summary of all target specific options and exit. + +`-I DIR' + Add directory DIR to the search list for `.include' directives. + +`-J' + Don't warn about signed overflow. + +`-K' + Issue warnings when difference tables altered for long + displacements. + +`-L' +`--keep-locals' + Keep (in the symbol table) local symbols. These symbols start with + system-specific local label prefixes, typically `.L' for ELF + systems or `L' for traditional a.out systems. *Note Symbol + Names::. + +`--listing-lhs-width=NUMBER' + Set the maximum width, in words, of the output data column for an + assembler listing to NUMBER. + +`--listing-lhs-width2=NUMBER' + Set the maximum width, in words, of the output data column for + continuation lines in an assembler listing to NUMBER. + +`--listing-rhs-width=NUMBER' + Set the maximum width of an input source line, as displayed in a + listing, to NUMBER bytes. + +`--listing-cont-lines=NUMBER' + Set the maximum number of lines printed in a listing for a single + line of input to NUMBER + 1. + +`-o OBJFILE' + Name the object-file output from `as' OBJFILE. + +`-R' + Fold the data section into the text section. + + Set the default size of GAS's hash tables to a prime number close + to NUMBER. Increasing this value can reduce the length of time it + takes the assembler to perform its tasks, at the expense of + increasing the assembler's memory requirements. Similarly + reducing this value can reduce the memory requirements at the + expense of speed. + +`--reduce-memory-overheads' + This option reduces GAS's memory requirements, at the expense of + making the assembly processes slower. Currently this switch is a + synonym for `--hash-size=4051', but in the future it may have + other effects as well. + +`--statistics' + Print the maximum space (in bytes) and total time (in seconds) + used by assembly. + +`--strip-local-absolute' + Remove local absolute symbols from the outgoing symbol table. + +`-v' +`-version' + Print the `as' version. + +`--version' + Print the `as' version and exit. + +`-W' +`--no-warn' + Suppress warning messages. + +`--fatal-warnings' + Treat warnings as errors. + +`--warn' + Don't suppress warning messages or treat them as errors. + +`-w' + Ignored. + +`-x' + Ignored. + +`-Z' + Generate an object file even after errors. + +`-- | FILES ...' + Standard input, or source files to assemble. + + + The following options are available when as is configured for an ARC +processor. + +`-marc[5|6|7|8]' + This option selects the core processor variant. + +`-EB | -EL' + Select either big-endian (-EB) or little-endian (-EL) output. + + The following options are available when as is configured for the ARM +processor family. + +`-mcpu=PROCESSOR[+EXTENSION...]' + Specify which ARM processor variant is the target. + +`-march=ARCHITECTURE[+EXTENSION...]' + Specify which ARM architecture variant is used by the target. + +`-mfpu=FLOATING-POINT-FORMAT' + Select which Floating Point architecture is the target. + +`-mfloat-abi=ABI' + Select which floating point ABI is in use. + +`-mthumb' + Enable Thumb only instruction decoding. + +`-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant' + Select which procedure calling convention is in use. + +`-EB | -EL' + Select either big-endian (-EB) or little-endian (-EL) output. + +`-mthumb-interwork' + Specify that the code has been generated with interworking between + Thumb and ARM code in mind. + +`-k' + Specify that PIC code has been generated. + + See the info pages for documentation of the CRIS-specific options. + + The following options are available when as is configured for a D10V +processor. +`-O' + Optimize output by parallelizing instructions. + + The following options are available when as is configured for a D30V +processor. +`-O' + Optimize output by parallelizing instructions. + +`-n' + Warn when nops are generated. + +`-N' + Warn when a nop after a 32-bit multiply instruction is generated. + + The following options are available when as is configured for the +Intel 80960 processor. + +`-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC' + Specify which variant of the 960 architecture is the target. + +`-b' + Add code to collect statistics about branches taken. + +`-no-relax' + Do not alter compare-and-branch instructions for long + displacements; error if necessary. + + + The following options are available when as is configured for the +Ubicom IP2K series. + +`-mip2022ext' + Specifies that the extended IP2022 instructions are allowed. + +`-mip2022' + Restores the default behaviour, which restricts the permitted + instructions to just the basic IP2022 ones. + + + The following options are available when as is configured for the +Renesas M32C and M16C processors. + +`-m32c' + Assemble M32C instructions. + +`-m16c' + Assemble M16C instructions (the default). + + + The following options are available when as is configured for the +Renesas M32R (formerly Mitsubishi M32R) series. + +`--m32rx' + Specify which processor in the M32R family is the target. The + default is normally the M32R, but this option changes it to the + M32RX. + +`--warn-explicit-parallel-conflicts or --Wp' + Produce warning messages when questionable parallel constructs are + encountered. + +`--no-warn-explicit-parallel-conflicts or --Wnp' + Do not produce warning messages when questionable parallel + constructs are encountered. + + + The following options are available when as is configured for the +Motorola 68000 series. + +`-l' + Shorten references to undefined symbols, to one word instead of + two. + +`-m68000 | -m68008 | -m68010 | -m68020 | -m68030' +`| -m68040 | -m68060 | -m68302 | -m68331 | -m68332' +`| -m68333 | -m68340 | -mcpu32 | -m5200' + Specify what processor in the 68000 family is the target. The + default is normally the 68020, but this can be changed at + configuration time. + +`-m68881 | -m68882 | -mno-68881 | -mno-68882' + The target machine does (or does not) have a floating-point + coprocessor. The default is to assume a coprocessor for 68020, + 68030, and cpu32. Although the basic 68000 is not compatible with + the 68881, a combination of the two can be specified, since it's + possible to do emulation of the coprocessor instructions with the + main processor. + +`-m68851 | -mno-68851' + The target machine does (or does not) have a memory-management + unit coprocessor. The default is to assume an MMU for 68020 and + up. + + + For details about the PDP-11 machine dependent features options, see +*Note PDP-11-Options::. + +`-mpic | -mno-pic' + Generate position-independent (or position-dependent) code. The + default is `-mpic'. + +`-mall' +`-mall-extensions' + Enable all instruction set extensions. This is the default. + +`-mno-extensions' + Disable all instruction set extensions. + +`-mEXTENSION | -mno-EXTENSION' + Enable (or disable) a particular instruction set extension. + +`-mCPU' + Enable the instruction set extensions supported by a particular + CPU, and disable all other extensions. + +`-mMACHINE' + Enable the instruction set extensions supported by a particular + machine model, and disable all other extensions. + + The following options are available when as is configured for a +picoJava processor. + +`-mb' + Generate "big endian" format output. + +`-ml' + Generate "little endian" format output. + + + The following options are available when as is configured for the +Motorola 68HC11 or 68HC12 series. + +`-m68hc11 | -m68hc12 | -m68hcs12' + Specify what processor is the target. The default is defined by + the configuration option when building the assembler. + +`-mshort' + Specify to use the 16-bit integer ABI. + +`-mlong' + Specify to use the 32-bit integer ABI. + +`-mshort-double' + Specify to use the 32-bit double ABI. + +`-mlong-double' + Specify to use the 64-bit double ABI. + +`--force-long-branches' + Relative branches are turned into absolute ones. This concerns + conditional branches, unconditional branches and branches to a sub + routine. + +`-S | --short-branches' + Do not turn relative branches into absolute ones when the offset + is out of range. + +`--strict-direct-mode' + Do not turn the direct addressing mode into extended addressing + mode when the instruction does not support direct addressing mode. + +`--print-insn-syntax' + Print the syntax of instruction in case of error. + +`--print-opcodes' + print the list of instructions with syntax and then exit. + +`--generate-example' + print an example of instruction for each possible instruction and + then exit. This option is only useful for testing `as'. + + + The following options are available when `as' is configured for the +SPARC architecture: + +`-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite' +`-Av8plus | -Av8plusa | -Av9 | -Av9a' + Explicitly select a variant of the SPARC architecture. + + `-Av8plus' and `-Av8plusa' select a 32 bit environment. `-Av9' + and `-Av9a' select a 64 bit environment. + + `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with + UltraSPARC extensions. + +`-xarch=v8plus | -xarch=v8plusa' + For compatibility with the Solaris v9 assembler. These options are + equivalent to -Av8plus and -Av8plusa, respectively. + +`-bump' + Warn when the assembler switches to another architecture. + + The following options are available when as is configured for the +'c54x architecture. + +`-mfar-mode' + Enable extended addressing mode. All addresses and relocations + will assume extended addressing (usually 23 bits). + +`-mcpu=CPU_VERSION' + Sets the CPU version being compiled for. + +`-merrors-to-file FILENAME' + Redirect error output to a file, for broken systems which don't + support such behaviour in the shell. + + The following options are available when as is configured for a MIPS +processor. + +`-G NUM' + This option sets the largest size of an object that can be + referenced implicitly with the `gp' register. It is only accepted + for targets that use ECOFF format, such as a DECstation running + Ultrix. The default value is 8. + +`-EB' + Generate "big endian" format output. + +`-EL' + Generate "little endian" format output. + +`-mips1' +`-mips2' +`-mips3' +`-mips4' +`-mips5' +`-mips32' +`-mips32r2' +`-mips64' +`-mips64r2' + Generate code for a particular MIPS Instruction Set Architecture + level. `-mips1' is an alias for `-march=r3000', `-mips2' is an + alias for `-march=r6000', `-mips3' is an alias for `-march=r4000' + and `-mips4' is an alias for `-march=r8000'. `-mips5', `-mips32', + `-mips32r2', `-mips64', and `-mips64r2' correspond to generic + `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64 + Release 2' ISA processors, respectively. + +`-march=CPU' + Generate code for a particular MIPS cpu. + +`-mtune=CPU' + Schedule and tune for a particular MIPS cpu. + +`-mfix7000' +`-mno-fix7000' + Cause nops to be inserted if the read of the destination register + of an mfhi or mflo instruction occurs in the following two + instructions. + +`-mdebug' +`-no-mdebug' + Cause stabs-style debugging output to go into an ECOFF-style + .mdebug section instead of the standard ELF .stabs sections. + +`-mpdr' +`-mno-pdr' + Control generation of `.pdr' sections. + +`-mgp32' +`-mfp32' + The register sizes are normally inferred from the ISA and ABI, but + these flags force a certain group of registers to be treated as 32 + bits wide at all times. `-mgp32' controls the size of + general-purpose registers and `-mfp32' controls the size of + floating-point registers. + +`-mips16' +`-no-mips16' + Generate code for the MIPS 16 processor. This is equivalent to + putting `.set mips16' at the start of the assembly file. + `-no-mips16' turns off this option. + +`-msmartmips' +`-mno-smartmips' + Enables the SmartMIPS extension to the MIPS32 instruction set. + This is equivalent to putting `.set smartmips' at the start of the + assembly file. `-mno-smartmips' turns off this option. + +`-mips3d' +`-no-mips3d' + Generate code for the MIPS-3D Application Specific Extension. + This tells the assembler to accept MIPS-3D instructions. + `-no-mips3d' turns off this option. + +`-mdmx' +`-no-mdmx' + Generate code for the MDMX Application Specific Extension. This + tells the assembler to accept MDMX instructions. `-no-mdmx' turns + off this option. + +`-mdsp' +`-mno-dsp' + Generate code for the DSP Release 1 Application Specific Extension. + This tells the assembler to accept DSP Release 1 instructions. + `-mno-dsp' turns off this option. + +`-mdspr2' +`-mno-dspr2' + Generate code for the DSP Release 2 Application Specific Extension. + This option implies -mdsp. This tells the assembler to accept DSP + Release 2 instructions. `-mno-dspr2' turns off this option. + +`-mmt' +`-mno-mt' + Generate code for the MT Application Specific Extension. This + tells the assembler to accept MT instructions. `-mno-mt' turns + off this option. + +`--construct-floats' +`--no-construct-floats' + The `--no-construct-floats' option disables the construction of + double width floating point constants by loading the two halves of + the value into the two single width floating point registers that + make up the double width register. By default + `--construct-floats' is selected, allowing construction of these + floating point constants. + +`--emulation=NAME' + This option causes `as' to emulate `as' configured for some other + target, in all respects, including output format (choosing between + ELF and ECOFF only), handling of pseudo-opcodes which may generate + debugging information or store symbol table information, and + default endianness. The available configuration names are: + `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf', + `mipsbelf'. The first two do not alter the default endianness + from that of the primary target for which the assembler was + configured; the others change the default to little- or big-endian + as indicated by the `b' or `l' in the name. Using `-EB' or `-EL' + will override the endianness selection in any case. + + This option is currently supported only when the primary target + `as' is configured for is a MIPS ELF or ECOFF target. + Furthermore, the primary target or others specified with + `--enable-targets=...' at configuration time must include support + for the other format, if both are to be available. For example, + the Irix 5 configuration includes support for both. + + Eventually, this option will support more configurations, with more + fine-grained control over the assembler's behavior, and will be + supported for more processors. + +`-nocpp' + `as' ignores this option. It is accepted for compatibility with + the native tools. + +`--trap' +`--no-trap' +`--break' +`--no-break' + Control how to deal with multiplication overflow and division by + zero. `--trap' or `--no-break' (which are synonyms) take a trap + exception (and only work for Instruction Set Architecture level 2 + and higher); `--break' or `--no-trap' (also synonyms, and the + default) take a break exception. + +`-n' + When this option is used, `as' will issue a warning every time it + generates a nop instruction from a macro. + + The following options are available when as is configured for an +MCore processor. + +`-jsri2bsr' +`-nojsri2bsr' + Enable or disable the JSRI to BSR transformation. By default this + is enabled. The command line option `-nojsri2bsr' can be used to + disable it. + +`-sifilter' +`-nosifilter' + Enable or disable the silicon filter behaviour. By default this + is disabled. The default can be overridden by the `-sifilter' + command line option. + +`-relax' + Alter jump instructions for long displacements. + +`-mcpu=[210|340]' + Select the cpu type on the target hardware. This controls which + instructions can be assembled. + +`-EB' + Assemble for a big endian target. + +`-EL' + Assemble for a little endian target. + + + See the info pages for documentation of the MMIX-specific options. + + The following options are available when as is configured for an +Xtensa processor. + +`--text-section-literals | --no-text-section-literals' + With `--text-section-literals', literal pools are interspersed in + the text section. The default is `--no-text-section-literals', + which places literals in a separate section in the output file. + These options only affect literals referenced via PC-relative + `L32R' instructions; literals for absolute mode `L32R' + instructions are handled separately. + +`--absolute-literals | --no-absolute-literals' + Indicate to the assembler whether `L32R' instructions use absolute + or PC-relative addressing. The default is to assume absolute + addressing if the Xtensa processor includes the absolute `L32R' + addressing option. Otherwise, only the PC-relative `L32R' mode + can be used. + +`--target-align | --no-target-align' + Enable or disable automatic alignment to reduce branch penalties + at the expense of some code density. The default is + `--target-align'. + +`--longcalls | --no-longcalls' + Enable or disable transformation of call instructions to allow + calls across a greater range of addresses. The default is + `--no-longcalls'. + +`--transform | --no-transform' + Enable or disable all assembler transformations of Xtensa + instructions. The default is `--transform'; `--no-transform' + should be used only in the rare cases when the instructions must + be exactly as specified in the assembly source. + + The following options are available when as is configured for a Z80 +family processor. +`-z80' + Assemble for Z80 processor. + +`-r800' + Assemble for R800 processor. + +`-ignore-undocumented-instructions' +`-Wnud' + Assemble undocumented Z80 instructions that also work on R800 + without warning. + +`-ignore-unportable-instructions' +`-Wnup' + Assemble all undocumented Z80 instructions without warning. + +`-warn-undocumented-instructions' +`-Wud' + Issue a warning for undocumented Z80 instructions that also work + on R800. + +`-warn-unportable-instructions' +`-Wup' + Issue a warning for undocumented Z80 instructions that do not work + on R800. + +`-forbid-undocumented-instructions' +`-Fud' + Treat all undocumented instructions as errors. + +`-forbid-unportable-instructions' +`-Fup' + Treat undocumented Z80 instructions that do not work on R800 as + errors. + +* Menu: + +* Manual:: Structure of this Manual +* GNU Assembler:: The GNU Assembler +* Object Formats:: Object File Formats +* Command Line:: Command Line +* Input Files:: Input Files +* Object:: Output (Object) File +* Errors:: Error and Warning Messages + + +File: as.info, Node: Manual, Next: GNU Assembler, Up: Overview + +1.1 Structure of this Manual +============================ + +This manual is intended to describe what you need to know to use GNU +`as'. We cover the syntax expected in source files, including notation +for symbols, constants, and expressions; the directives that `as' +understands; and of course how to invoke `as'. + + This manual also describes some of the machine-dependent features of +various flavors of the assembler. + + On the other hand, this manual is _not_ intended as an introduction +to programming in assembly language--let alone programming in general! +In a similar vein, we make no attempt to introduce the machine +architecture; we do _not_ describe the instruction set, standard +mnemonics, registers or addressing modes that are standard to a +particular architecture. You may want to consult the manufacturer's +machine architecture manual for this information. + + +File: as.info, Node: GNU Assembler, Next: Object Formats, Prev: Manual, Up: Overview + +1.2 The GNU Assembler +===================== + +GNU `as' is really a family of assemblers. If you use (or have used) +the GNU assembler on one architecture, you should find a fairly similar +environment when you use it on another architecture. Each version has +much in common with the others, including object file formats, most +assembler directives (often called "pseudo-ops") and assembler syntax. + + `as' is primarily intended to assemble the output of the GNU C +compiler `gcc' for use by the linker `ld'. Nevertheless, we've tried +to make `as' assemble correctly everything that other assemblers for +the same machine would assemble. Any exceptions are documented +explicitly (*note Machine Dependencies::). This doesn't mean `as' +always uses the same syntax as another assembler for the same +architecture; for example, we know of several incompatible versions of +680x0 assembly language syntax. + + Unlike older assemblers, `as' is designed to assemble a source +program in one pass of the source file. This has a subtle impact on the +`.org' directive (*note `.org': Org.). + + +File: as.info, Node: Object Formats, Next: Command Line, Prev: GNU Assembler, Up: Overview + +1.3 Object File Formats +======================= + +The GNU assembler can be configured to produce several alternative +object file formats. For the most part, this does not affect how you +write assembly language programs; but directives for debugging symbols +are typically different in different file formats. *Note Symbol +Attributes: Symbol Attributes. + + +File: as.info, Node: Command Line, Next: Input Files, Prev: Object Formats, Up: Overview + +1.4 Command Line +================ + +After the program name `as', the command line may contain options and +file names. Options may appear in any order, and may be before, after, +or between file names. The order of file names is significant. + + `--' (two hyphens) by itself names the standard input file +explicitly, as one of the files for `as' to assemble. + + Except for `--' any command line argument that begins with a hyphen +(`-') is an option. Each option changes the behavior of `as'. No +option changes the way another option works. An option is a `-' +followed by one or more letters; the case of the letter is important. +All options are optional. + + Some options expect exactly one file name to follow them. The file +name may either immediately follow the option's letter (compatible with +older assemblers) or it may be the next command argument (GNU +standard). These two command lines are equivalent: + + as -o my-object-file.o mumble.s + as -omy-object-file.o mumble.s + + +File: as.info, Node: Input Files, Next: Object, Prev: Command Line, Up: Overview + +1.5 Input Files +=============== + +We use the phrase "source program", abbreviated "source", to describe +the program input to one run of `as'. The program may be in one or +more files; how the source is partitioned into files doesn't change the +meaning of the source. + + The source program is a concatenation of the text in all the files, +in the order specified. + + Each time you run `as' it assembles exactly one source program. The +source program is made up of one or more files. (The standard input is +also a file.) + + You give `as' a command line that has zero or more input file names. +The input files are read (from left file name to right). A command +line argument (in any position) that has no special meaning is taken to +be an input file name. + + If you give `as' no file names it attempts to read one input file +from the `as' standard input, which is normally your terminal. You may +have to type to tell `as' there is no more program to assemble. + + Use `--' if you need to explicitly name the standard input file in +your command line. + + If the source is empty, `as' produces a small, empty object file. + +Filenames and Line-numbers +-------------------------- + +There are two ways of locating a line in the input file (or files) and +either may be used in reporting error messages. One way refers to a +line number in a physical file; the other refers to a line number in a +"logical" file. *Note Error and Warning Messages: Errors. + + "Physical files" are those files named in the command line given to +`as'. + + "Logical files" are simply names declared explicitly by assembler +directives; they bear no relation to physical files. Logical file +names help error messages reflect the original source file, when `as' +source is itself synthesized from other files. `as' understands the +`#' directives emitted by the `gcc' preprocessor. See also *Note +`.file': File. + + +File: as.info, Node: Object, Next: Errors, Prev: Input Files, Up: Overview + +1.6 Output (Object) File +======================== + +Every time you run `as' it produces an output file, which is your +assembly language program translated into numbers. This file is the +object file. Its default name is `a.out'. You can give it another +name by using the `-o' option. Conventionally, object file names end +with `.o'. The default name is used for historical reasons: older +assemblers were capable of assembling self-contained programs directly +into a runnable program. (For some formats, this isn't currently +possible, but it can be done for the `a.out' format.) + + The object file is meant for input to the linker `ld'. It contains +assembled program code, information to help `ld' integrate the +assembled program into a runnable file, and (optionally) symbolic +information for the debugger. + + +File: as.info, Node: Errors, Prev: Object, Up: Overview + +1.7 Error and Warning Messages +============================== + +`as' may write warnings and error messages to the standard error file +(usually your terminal). This should not happen when a compiler runs +`as' automatically. Warnings report an assumption made so that `as' +could keep assembling a flawed program; errors report a grave problem +that stops the assembly. + + Warning messages have the format + + file_name:NNN:Warning Message Text + +(where NNN is a line number). If a logical file name has been given +(*note `.file': File.) it is used for the filename, otherwise the name +of the current input file is used. If a logical line number was given +(*note `.line': Line.) then it is used to calculate the number printed, +otherwise the actual line in the current source file is printed. The +message text is intended to be self explanatory (in the grand Unix +tradition). + + Error messages have the format + file_name:NNN:FATAL:Error Message Text + The file name and line number are derived as for warning messages. +The actual message text may be rather less explanatory because many of +them aren't supposed to happen. + + +File: as.info, Node: Invoking, Next: Syntax, Prev: Overview, Up: Top + +2 Command-Line Options +********************** + +This chapter describes command-line options available in _all_ versions +of the GNU assembler; see *Note Machine Dependencies::, for options +specific to particular machine architectures. + + If you are invoking `as' via the GNU C compiler, you can use the +`-Wa' option to pass arguments through to the assembler. The assembler +arguments must be separated from each other (and the `-Wa') by commas. +For example: + + gcc -c -g -O -Wa,-alh,-L file.c + +This passes two options to the assembler: `-alh' (emit a listing to +standard output with high-level and assembly source) and `-L' (retain +local symbols in the symbol table). + + Usually you do not need to use this `-Wa' mechanism, since many +compiler command-line options are automatically passed to the assembler +by the compiler. (You can call the GNU compiler driver with the `-v' +option to see precisely what options it passes to each compilation +pass, including the assembler.) + +* Menu: + +* a:: -a[cdhlns] enable listings +* alternate:: --alternate enable alternate macro syntax +* D:: -D for compatibility +* f:: -f to work faster +* I:: -I for .include search path + +* K:: -K for difference tables + +* L:: -L to retain local symbols +* listing:: --listing-XXX to configure listing output +* M:: -M or --mri to assemble in MRI compatibility mode +* MD:: --MD for dependency tracking +* o:: -o to name the object file +* R:: -R to join data and text sections +* statistics:: --statistics to see statistics about assembly +* traditional-format:: --traditional-format for compatible output +* v:: -v to announce version +* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings +* Z:: -Z to make object file even after errors + + +File: as.info, Node: a, Next: alternate, Up: Invoking + +2.1 Enable Listings: `-a[cdhlns]' +================================= + +These options enable listing output from the assembler. By itself, +`-a' requests high-level, assembly, and symbols listing. You can use +other letters to select specific options for the list: `-ah' requests a +high-level language listing, `-al' requests an output-program assembly +listing, and `-as' requests a symbol table listing. High-level +listings require that a compiler debugging option like `-g' be used, +and that assembly listings (`-al') be requested also. + + Use the `-ac' option to omit false conditionals from a listing. Any +lines which are not assembled because of a false `.if' (or `.ifdef', or +any other conditional), or a true `.if' followed by an `.else', will be +omitted from the listing. + + Use the `-ad' option to omit debugging directives from the listing. + + Once you have specified one of these options, you can further control +listing output and its appearance using the directives `.list', +`.nolist', `.psize', `.eject', `.title', and `.sbttl'. The `-an' +option turns off all forms processing. If you do not request listing +output with one of the `-a' options, the listing-control directives +have no effect. + + The letters after `-a' may be combined into one option, _e.g._, +`-aln'. + + Note if the assembler source is coming from the standard input (e.g., +because it is being created by `gcc' and the `-pipe' command line switch +is being used) then the listing will not contain any comments or +preprocessor directives. This is because the listing code buffers +input source lines from stdin only after they have been preprocessed by +the assembler. This reduces memory usage and makes the code more +efficient. + + +File: as.info, Node: alternate, Next: D, Prev: a, Up: Invoking + +2.2 `--alternate' +================= + +Begin in alternate macro mode, see *Note `.altmacro': Altmacro. + + +File: as.info, Node: D, Next: f, Prev: alternate, Up: Invoking + +2.3 `-D' +======== + +This option has no effect whatsoever, but it is accepted to make it more +likely that scripts written for other assemblers also work with `as'. + + +File: as.info, Node: f, Next: I, Prev: D, Up: Invoking + +2.4 Work Faster: `-f' +===================== + +`-f' should only be used when assembling programs written by a +(trusted) compiler. `-f' stops the assembler from doing whitespace and +comment preprocessing on the input file(s) before assembling them. +*Note Preprocessing: Preprocessing. + + _Warning:_ if you use `-f' when the files actually need to be + preprocessed (if they contain comments, for example), `as' does + not work correctly. + + +File: as.info, Node: I, Next: K, Prev: f, Up: Invoking + +2.5 `.include' Search Path: `-I' PATH +===================================== + +Use this option to add a PATH to the list of directories `as' searches +for files specified in `.include' directives (*note `.include': +Include.). You may use `-I' as many times as necessary to include a +variety of paths. The current working directory is always searched +first; after that, `as' searches any `-I' directories in the same order +as they were specified (left to right) on the command line. + + +File: as.info, Node: K, Next: L, Prev: I, Up: Invoking + +2.6 Difference Tables: `-K' +=========================== + +`as' sometimes alters the code emitted for directives of the form +`.word SYM1-SYM2'. *Note `.word': Word. You can use the `-K' option +if you want a warning issued when this is done. + + +File: as.info, Node: L, Next: listing, Prev: K, Up: Invoking + +2.7 Include Local Symbols: `-L' +=============================== + +Symbols beginning with system-specific local label prefixes, typically +`.L' for ELF systems or `L' for traditional a.out systems, are called +"local symbols". *Note Symbol Names::. Normally you do not see such +symbols when debugging, because they are intended for the use of +programs (like compilers) that compose assembler programs, not for your +notice. Normally both `as' and `ld' discard such symbols, so you do +not normally debug with them. + + This option tells `as' to retain those local symbols in the object +file. Usually if you do this you also tell the linker `ld' to preserve +those symbols. + + +File: as.info, Node: listing, Next: M, Prev: L, Up: Invoking + +2.8 Configuring listing output: `--listing' +=========================================== + +The listing feature of the assembler can be enabled via the command +line switch `-a' (*note a::). This feature combines the input source +file(s) with a hex dump of the corresponding locations in the output +object file, and displays them as a listing file. The format of this +listing can be controlled by directives inside the assembler source +(i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl' +(*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::) +and also by the following switches: + +`--listing-lhs-width=`number'' + Sets the maximum width, in words, of the first line of the hex + byte dump. This dump appears on the left hand side of the listing + output. + +`--listing-lhs-width2=`number'' + Sets the maximum width, in words, of any further lines of the hex + byte dump for a given input source line. If this value is not + specified, it defaults to being the same as the value specified + for `--listing-lhs-width'. If neither switch is used the default + is to one. + +`--listing-rhs-width=`number'' + Sets the maximum width, in characters, of the source line that is + displayed alongside the hex dump. The default value for this + parameter is 100. The source line is displayed on the right hand + side of the listing output. + +`--listing-cont-lines=`number'' + Sets the maximum number of continuation lines of hex dump that + will be displayed for a given single line of source input. The + default value is 4. + + +File: as.info, Node: M, Next: MD, Prev: listing, Up: Invoking + +2.9 Assemble in MRI Compatibility Mode: `-M' +============================================ + +The `-M' or `--mri' option selects MRI compatibility mode. This +changes the syntax and pseudo-op handling of `as' to make it compatible +with the `ASM68K' or the `ASM960' (depending upon the configured +target) assembler from Microtec Research. The exact nature of the MRI +syntax will not be documented here; see the MRI manuals for more +information. Note in particular that the handling of macros and macro +arguments is somewhat different. The purpose of this option is to +permit assembling existing MRI assembler code using `as'. + + The MRI compatibility is not complete. Certain operations of the +MRI assembler depend upon its object file format, and can not be +supported using other object file formats. Supporting these would +require enhancing each object file format individually. These are: + + * global symbols in common section + + The m68k MRI assembler supports common sections which are merged + by the linker. Other object file formats do not support this. + `as' handles common sections by treating them as a single common + symbol. It permits local symbols to be defined within a common + section, but it can not support global symbols, since it has no + way to describe them. + + * complex relocations + + The MRI assemblers support relocations against a negated section + address, and relocations which combine the start addresses of two + or more sections. These are not support by other object file + formats. + + * `END' pseudo-op specifying start address + + The MRI `END' pseudo-op permits the specification of a start + address. This is not supported by other object file formats. The + start address may instead be specified using the `-e' option to + the linker, or in a linker script. + + * `IDNT', `.ident' and `NAME' pseudo-ops + + The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module + name to the output file. This is not supported by other object + file formats. + + * `ORG' pseudo-op + + The m68k MRI `ORG' pseudo-op begins an absolute section at a given + address. This differs from the usual `as' `.org' pseudo-op, which + changes the location within the current section. Absolute + sections are not supported by other object file formats. The + address of a section may be assigned within a linker script. + + There are some other features of the MRI assembler which are not +supported by `as', typically either because they are difficult or +because they seem of little consequence. Some of these may be +supported in future releases. + + * EBCDIC strings + + EBCDIC strings are not supported. + + * packed binary coded decimal + + Packed binary coded decimal is not supported. This means that the + `DC.P' and `DCB.P' pseudo-ops are not supported. + + * `FEQU' pseudo-op + + The m68k `FEQU' pseudo-op is not supported. + + * `NOOBJ' pseudo-op + + The m68k `NOOBJ' pseudo-op is not supported. + + * `OPT' branch control options + + The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL', + and `BRW'--are ignored. `as' automatically relaxes all branches, + whether forward or backward, to an appropriate size, so these + options serve no purpose. + + * `OPT' list control options + + The following m68k `OPT' list control options are ignored: `C', + `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'. + + * other `OPT' options + + The following m68k `OPT' options are ignored: `NEST', `O', `OLD', + `OP', `P', `PCO', `PCR', `PCS', `R'. + + * `OPT' `D' option is default + + The m68k `OPT' `D' option is the default, unlike the MRI assembler. + `OPT NOD' may be used to turn it off. + + * `XREF' pseudo-op. + + The m68k `XREF' pseudo-op is ignored. + + * `.debug' pseudo-op + + The i960 `.debug' pseudo-op is not supported. + + * `.extended' pseudo-op + + The i960 `.extended' pseudo-op is not supported. + + * `.list' pseudo-op. + + The various options of the i960 `.list' pseudo-op are not + supported. + + * `.optimize' pseudo-op + + The i960 `.optimize' pseudo-op is not supported. + + * `.output' pseudo-op + + The i960 `.output' pseudo-op is not supported. + + * `.setreal' pseudo-op + + The i960 `.setreal' pseudo-op is not supported. + + + +File: as.info, Node: MD, Next: o, Prev: M, Up: Invoking + +2.10 Dependency Tracking: `--MD' +================================ + +`as' can generate a dependency file for the file it creates. This file +consists of a single rule suitable for `make' describing the +dependencies of the main source file. + + The rule is written to the file named in its argument. + + This feature is used in the automatic updating of makefiles. + + +File: as.info, Node: o, Next: R, Prev: MD, Up: Invoking + +2.11 Name the Object File: `-o' +=============================== + +There is always one object file output when you run `as'. By default +it has the name `a.out' (or `b.out', for Intel 960 targets only). You +use this option (which takes exactly one filename) to give the object +file a different name. + + Whatever the object file is called, `as' overwrites any existing +file of the same name. + + +File: as.info, Node: R, Next: statistics, Prev: o, Up: Invoking + +2.12 Join Data and Text Sections: `-R' +====================================== + +`-R' tells `as' to write the object file as if all data-section data +lives in the text section. This is only done at the very last moment: +your binary data are the same, but data section parts are relocated +differently. The data section part of your object file is zero bytes +long because all its bytes are appended to the text section. (*Note +Sections and Relocation: Sections.) + + When you specify `-R' it would be possible to generate shorter +address displacements (because we do not have to cross between text and +data section). We refrain from doing this simply for compatibility with +older versions of `as'. In future, `-R' may work this way. + + When `as' is configured for COFF or ELF output, this option is only +useful if you use sections named `.text' and `.data'. + + `-R' is not supported for any of the HPPA targets. Using `-R' +generates a warning from `as'. + + +File: as.info, Node: statistics, Next: traditional-format, Prev: R, Up: Invoking + +2.13 Display Assembly Statistics: `--statistics' +================================================ + +Use `--statistics' to display two statistics about the resources used by +`as': the maximum amount of space allocated during the assembly (in +bytes), and the total execution time taken for the assembly (in CPU +seconds). + + +File: as.info, Node: traditional-format, Next: v, Prev: statistics, Up: Invoking + +2.14 Compatible Output: `--traditional-format' +============================================== + +For some targets, the output of `as' is different in some ways from the +output of some existing assembler. This switch requests `as' to use +the traditional format instead. + + For example, it disables the exception frame optimizations which +`as' normally does by default on `gcc' output. + + +File: as.info, Node: v, Next: W, Prev: traditional-format, Up: Invoking + +2.15 Announce Version: `-v' +=========================== + +You can find out what version of as is running by including the option +`-v' (which you can also spell as `-version') on the command line. + + +File: as.info, Node: W, Next: Z, Prev: v, Up: Invoking + +2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings' +====================================================================== + +`as' should never give a warning or error message when assembling +compiler output. But programs written by people often cause `as' to +give a warning that a particular assumption was made. All such +warnings are directed to the standard error file. + + If you use the `-W' and `--no-warn' options, no warnings are issued. +This only affects the warning messages: it does not change any +particular of how `as' assembles your file. Errors, which stop the +assembly, are still reported. + + If you use the `--fatal-warnings' option, `as' considers files that +generate warnings to be in error. + + You can switch these options off again by specifying `--warn', which +causes warnings to be output as usual. + + +File: as.info, Node: Z, Prev: W, Up: Invoking + +2.17 Generate Object File in Spite of Errors: `-Z' +================================================== + +After an error message, `as' normally produces no output. If for some +reason you are interested in object file output even after `as' gives +an error message on your program, use the `-Z' option. If there are +any errors, `as' continues anyways, and writes an object file after a +final warning message of the form `N errors, M warnings, generating bad +object file.' + + +File: as.info, Node: Syntax, Next: Sections, Prev: Invoking, Up: Top + +3 Syntax +******** + +This chapter describes the machine-independent syntax allowed in a +source file. `as' syntax is similar to what many other assemblers use; +it is inspired by the BSD 4.2 assembler, except that `as' does not +assemble Vax bit-fields. + +* Menu: + +* Preprocessing:: Preprocessing +* Whitespace:: Whitespace +* Comments:: Comments +* Symbol Intro:: Symbols +* Statements:: Statements +* Constants:: Constants + + +File: as.info, Node: Preprocessing, Next: Whitespace, Up: Syntax + +3.1 Preprocessing +================= + +The `as' internal preprocessor: + * adjusts and removes extra whitespace. It leaves one space or tab + before the keywords on a line, and turns any other whitespace on + the line into a single space. + + * removes all comments, replacing them with a single space, or an + appropriate number of newlines. + + * converts character constants into the appropriate numeric values. + + It does not do macro processing, include file handling, or anything +else you may get from your C compiler's preprocessor. You can do +include file processing with the `.include' directive (*note +`.include': Include.). You can use the GNU C compiler driver to get +other "CPP" style preprocessing by giving the input file a `.S' suffix. +*Note Options Controlling the Kind of Output: (gcc.info)Overall +Options. + + Excess whitespace, comments, and character constants cannot be used +in the portions of the input text that are not preprocessed. + + If the first line of an input file is `#NO_APP' or if you use the +`-f' option, whitespace and comments are not removed from the input +file. Within an input file, you can ask for whitespace and comment +removal in specific portions of the by putting a line that says `#APP' +before the text that may contain whitespace or comments, and putting a +line that says `#NO_APP' after this text. This feature is mainly +intend to support `asm' statements in compilers whose output is +otherwise free of comments and whitespace. + + +File: as.info, Node: Whitespace, Next: Comments, Prev: Preprocessing, Up: Syntax + +3.2 Whitespace +============== + +"Whitespace" is one or more blanks or tabs, in any order. Whitespace +is used to separate symbols, and to make programs neater for people to +read. Unless within character constants (*note Character Constants: +Characters.), any whitespace means the same as exactly one space. + + +File: as.info, Node: Comments, Next: Symbol Intro, Prev: Whitespace, Up: Syntax + +3.3 Comments +============ + +There are two ways of rendering comments to `as'. In both cases the +comment is equivalent to one space. + + Anything from `/*' through the next `*/' is a comment. This means +you may not nest these comments. + + /* + The only way to include a newline ('\n') in a comment + is to use this sort of comment. + */ + + /* This sort of comment does not nest. */ + + Anything from the "line comment" character to the next newline is +considered a comment and is ignored. The line comment character is `;' +on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA; +`#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;' +for picoJava; `#' for Motorola PowerPC; `!' for the Renesas / SuperH SH; +`!' on the SPARC; `#' on the ip2k; `#' on the m32c; `#' on the m32r; +`|' on the 680x0; `#' on the 68HC11 and 68HC12; `#' on the Vax; `;' for +the Z80; `!' for the Z8000; `#' on the V850; `#' for Xtensa systems; +see *Note Machine Dependencies::. + + On some machines there are two different line comment characters. +One character only begins a comment if it is the first non-whitespace +character on a line, while the other always begins a comment. + + The V850 assembler also supports a double dash as starting a comment +that extends to the end of the line. + + `--'; + + To be compatible with past assemblers, lines that begin with `#' +have a special interpretation. Following the `#' should be an absolute +expression (*note Expressions::): the logical line number of the _next_ +line. Then a string (*note Strings: Strings.) is allowed: if present +it is a new logical file name. The rest of the line, if any, should be +whitespace. + + If the first non-whitespace characters on the line are not numeric, +the line is ignored. (Just like a comment.) + + # This is an ordinary comment. + # 42-6 "new_file_name" # New logical file name + # This is logical line # 36. + This feature is deprecated, and may disappear from future versions +of `as'. + + +File: as.info, Node: Symbol Intro, Next: Statements, Prev: Comments, Up: Syntax + +3.4 Symbols +=========== + +A "symbol" is one or more characters chosen from the set of all letters +(both upper and lower case), digits and the three characters `_.$'. On +most machines, you can also use `$' in symbol names; exceptions are +noted in *Note Machine Dependencies::. No symbol may begin with a +digit. Case is significant. There is no length limit: all characters +are significant. Symbols are delimited by characters not in that set, +or by the beginning of a file (since the source program must end with a +newline, the end of a file is not a possible symbol delimiter). *Note +Symbols::. + + +File: as.info, Node: Statements, Next: Constants, Prev: Symbol Intro, Up: Syntax + +3.5 Statements +============== + +A "statement" ends at a newline character (`\n') or line separator +character. (The line separator is usually `;', unless this conflicts +with the comment character; see *Note Machine Dependencies::.) The +newline or separator character is considered part of the preceding +statement. Newlines and separators within character constants are an +exception: they do not end statements. + +It is an error to end any statement with end-of-file: the last +character of any input file should be a newline. + + An empty statement is allowed, and may include whitespace. It is +ignored. + + A statement begins with zero or more labels, optionally followed by a +key symbol which determines what kind of statement it is. The key +symbol determines the syntax of the rest of the statement. If the +symbol begins with a dot `.' then the statement is an assembler +directive: typically valid for any computer. If the symbol begins with +a letter the statement is an assembly language "instruction": it +assembles into a machine language instruction. Different versions of +`as' for different computers recognize different instructions. In +fact, the same symbol may represent a different instruction in a +different computer's assembly language. + + A label is a symbol immediately followed by a colon (`:'). +Whitespace before a label or after a colon is permitted, but you may not +have whitespace between a label's symbol and its colon. *Note Labels::. + + For HPPA targets, labels need not be immediately followed by a +colon, but the definition of a label must begin in column zero. This +also implies that only one label may be defined on each line. + + label: .directive followed by something + another_label: # This is an empty statement. + instruction operand_1, operand_2, ... + + +File: as.info, Node: Constants, Prev: Statements, Up: Syntax + +3.6 Constants +============= + +A constant is a number, written so that its value is known by +inspection, without knowing any context. Like this: + .byte 74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value. + .ascii "Ring the bell\7" # A string constant. + .octa 0x123456789abcdef0123456789ABCDEF0 # A bignum. + .float 0f-314159265358979323846264338327\ + 95028841971.693993751E-40 # - pi, a flonum. + +* Menu: + +* Characters:: Character Constants +* Numbers:: Number Constants + + +File: as.info, Node: Characters, Next: Numbers, Up: Constants + +3.6.1 Character Constants +------------------------- + +There are two kinds of character constants. A "character" stands for +one character in one byte and its value may be used in numeric +expressions. String constants (properly called string _literals_) are +potentially many bytes and their values may not be used in arithmetic +expressions. + +* Menu: + +* Strings:: Strings +* Chars:: Characters + + +File: as.info, Node: Strings, Next: Chars, Up: Characters + +3.6.1.1 Strings +............... + +A "string" is written between double-quotes. It may contain +double-quotes or null characters. The way to get special characters +into a string is to "escape" these characters: precede them with a +backslash `\' character. For example `\\' represents one backslash: +the first `\' is an escape which tells `as' to interpret the second +character literally as a backslash (which prevents `as' from +recognizing the second `\' as an escape character). The complete list +of escapes follows. + +`\b' + Mnemonic for backspace; for ASCII this is octal code 010. + +`\f' + Mnemonic for FormFeed; for ASCII this is octal code 014. + +`\n' + Mnemonic for newline; for ASCII this is octal code 012. + +`\r' + Mnemonic for carriage-Return; for ASCII this is octal code 015. + +`\t' + Mnemonic for horizontal Tab; for ASCII this is octal code 011. + +`\ DIGIT DIGIT DIGIT' + An octal character code. The numeric code is 3 octal digits. For + compatibility with other Unix systems, 8 and 9 are accepted as + digits: for example, `\008' has the value 010, and `\009' the + value 011. + +`\`x' HEX-DIGITS...' + A hex character code. All trailing hex digits are combined. + Either upper or lower case `x' works. + +`\\' + Represents one `\' character. + +`\"' + Represents one `"' character. Needed in strings to represent this + character, because an unescaped `"' would end the string. + +`\ ANYTHING-ELSE' + Any other character when escaped by `\' gives a warning, but + assembles as if the `\' was not present. The idea is that if you + used an escape sequence you clearly didn't want the literal + interpretation of the following character. However `as' has no + other interpretation, so `as' knows it is giving you the wrong + code and warns you of the fact. + + Which characters are escapable, and what those escapes represent, +varies widely among assemblers. The current set is what we think the +BSD 4.2 assembler recognizes, and is a subset of what most C compilers +recognize. If you are in doubt, do not use an escape sequence. + + +File: as.info, Node: Chars, Prev: Strings, Up: Characters + +3.6.1.2 Characters +.................. + +A single character may be written as a single quote immediately +followed by that character. The same escapes apply to characters as to +strings. So if you want to write the character backslash, you must +write `'\\' where the first `\' escapes the second `\'. As you can +see, the quote is an acute accent, not a grave accent. A newline +immediately following an acute accent is taken as a literal character +and does not count as the end of a statement. The value of a character +constant in a numeric expression is the machine's byte-wide code for +that character. `as' assumes your character code is ASCII: `'A' means +65, `'B' means 66, and so on. + + +File: as.info, Node: Numbers, Prev: Characters, Up: Constants + +3.6.2 Number Constants +---------------------- + +`as' distinguishes three kinds of numbers according to how they are +stored in the target machine. _Integers_ are numbers that would fit +into an `int' in the C language. _Bignums_ are integers, but they are +stored in more than 32 bits. _Flonums_ are floating point numbers, +described below. + +* Menu: + +* Integers:: Integers +* Bignums:: Bignums +* Flonums:: Flonums + + +File: as.info, Node: Integers, Next: Bignums, Up: Numbers + +3.6.2.1 Integers +................ + +A binary integer is `0b' or `0B' followed by zero or more of the binary +digits `01'. + + An octal integer is `0' followed by zero or more of the octal digits +(`01234567'). + + A decimal integer starts with a non-zero digit followed by zero or +more digits (`0123456789'). + + A hexadecimal integer is `0x' or `0X' followed by one or more +hexadecimal digits chosen from `0123456789abcdefABCDEF'. + + Integers have the usual values. To denote a negative integer, use +the prefix operator `-' discussed under expressions (*note Prefix +Operators: Prefix Ops.). + + +File: as.info, Node: Bignums, Next: Flonums, Prev: Integers, Up: Numbers + +3.6.2.2 Bignums +............... + +A "bignum" has the same syntax and semantics as an integer except that +the number (or its negative) takes more than 32 bits to represent in +binary. The distinction is made because in some places integers are +permitted while bignums are not. + + +File: as.info, Node: Flonums, Prev: Bignums, Up: Numbers + +3.6.2.3 Flonums +............... + +A "flonum" represents a floating point number. The translation is +indirect: a decimal floating point number from the text is converted by +`as' to a generic binary floating point number of more than sufficient +precision. This generic floating point number is converted to a +particular computer's floating point format (or formats) by a portion +of `as' specialized to that computer. + + A flonum is written by writing (in order) + * The digit `0'. (`0' is optional on the HPPA.) + + * A letter, to tell `as' the rest of the number is a flonum. `e' is + recommended. Case is not important. + + On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the + letter must be one of the letters `DFPRSX' (in upper or lower + case). + + On the ARC, the letter must be one of the letters `DFRS' (in upper + or lower case). + + On the Intel 960 architecture, the letter must be one of the + letters `DFT' (in upper or lower case). + + On the HPPA architecture, the letter must be `E' (upper case only). + + * An optional sign: either `+' or `-'. + + * An optional "integer part": zero or more decimal digits. + + * An optional "fractional part": `.' followed by zero or more + decimal digits. + + * An optional exponent, consisting of: + + * An `E' or `e'. + + * Optional sign: either `+' or `-'. + + * One or more decimal digits. + + + At least one of the integer part or the fractional part must be +present. The floating point number has the usual base-10 value. + + `as' does all processing using integers. Flonums are computed +independently of any floating point hardware in the computer running +`as'. + + +File: as.info, Node: Sections, Next: Symbols, Prev: Syntax, Up: Top + +4 Sections and Relocation +************************* + +* Menu: + +* Secs Background:: Background +* Ld Sections:: Linker Sections +* As Sections:: Assembler Internal Sections +* Sub-Sections:: Sub-Sections +* bss:: bss Section + + +File: as.info, Node: Secs Background, Next: Ld Sections, Up: Sections + +4.1 Background +============== + +Roughly, a section is a range of addresses, with no gaps; all data "in" +those addresses is treated the same for some particular purpose. For +example there may be a "read only" section. + + The linker `ld' reads many object files (partial programs) and +combines their contents to form a runnable program. When `as' emits an +object file, the partial program is assumed to start at address 0. +`ld' assigns the final addresses for the partial program, so that +different partial programs do not overlap. This is actually an +oversimplification, but it suffices to explain how `as' uses sections. + + `ld' moves blocks of bytes of your program to their run-time +addresses. These blocks slide to their run-time addresses as rigid +units; their length does not change and neither does the order of bytes +within them. Such a rigid unit is called a _section_. Assigning +run-time addresses to sections is called "relocation". It includes the +task of adjusting mentions of object-file addresses so they refer to +the proper run-time addresses. For the H8/300, and for the Renesas / +SuperH SH, `as' pads sections if needed to ensure they end on a word +(sixteen bit) boundary. + + An object file written by `as' has at least three sections, any of +which may be empty. These are named "text", "data" and "bss" sections. + + When it generates COFF or ELF output, `as' can also generate +whatever other named sections you specify using the `.section' +directive (*note `.section': Section.). If you do not use any +directives that place output in the `.text' or `.data' sections, these +sections still exist, but are empty. + + When `as' generates SOM or ELF output for the HPPA, `as' can also +generate whatever other named sections you specify using the `.space' +and `.subspace' directives. See `HP9000 Series 800 Assembly Language +Reference Manual' (HP 92432-90001) for details on the `.space' and +`.subspace' assembler directives. + + Additionally, `as' uses different names for the standard text, data, +and bss sections when generating SOM output. Program text is placed +into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'. + + Within the object file, the text section starts at address `0', the +data section follows, and the bss section follows the data section. + + When generating either SOM or ELF output files on the HPPA, the text +section starts at address `0', the data section at address `0x4000000', +and the bss section follows the data section. + + To let `ld' know which data changes when the sections are relocated, +and how to change that data, `as' also writes to the object file +details of the relocation needed. To perform relocation `ld' must +know, each time an address in the object file is mentioned: + * Where in the object file is the beginning of this reference to an + address? + + * How long (in bytes) is this reference? + + * Which section does the address refer to? What is the numeric + value of + (ADDRESS) - (START-ADDRESS OF SECTION)? + + * Is the reference to an address "Program-Counter relative"? + + In fact, every address `as' ever uses is expressed as + (SECTION) + (OFFSET INTO SECTION) + Further, most expressions `as' computes have this section-relative +nature. (For some object formats, such as SOM for the HPPA, some +expressions are symbol-relative instead.) + + In this manual we use the notation {SECNAME N} to mean "offset N +into section SECNAME." + + Apart from text, data and bss sections you need to know about the +"absolute" section. When `ld' mixes partial programs, addresses in the +absolute section remain unchanged. For example, address `{absolute 0}' +is "relocated" to run-time address 0 by `ld'. Although the linker +never arranges two partial programs' data sections with overlapping +addresses after linking, _by definition_ their absolute sections must +overlap. Address `{absolute 239}' in one part of a program is always +the same address when the program is running as address `{absolute +239}' in any other part of the program. + + The idea of sections is extended to the "undefined" section. Any +address whose section is unknown at assembly time is by definition +rendered {undefined U}--where U is filled in later. Since numbers are +always defined, the only way to generate an undefined address is to +mention an undefined symbol. A reference to a named common block would +be such a symbol: its value is unknown at assembly time so it has +section _undefined_. + + By analogy the word _section_ is used to describe groups of sections +in the linked program. `ld' puts all partial programs' text sections +in contiguous addresses in the linked program. It is customary to +refer to the _text section_ of a program, meaning all the addresses of +all partial programs' text sections. Likewise for data and bss +sections. + + Some sections are manipulated by `ld'; others are invented for use +of `as' and have no meaning except during assembly. + + +File: as.info, Node: Ld Sections, Next: As Sections, Prev: Secs Background, Up: Sections + +4.2 Linker Sections +=================== + +`ld' deals with just four kinds of sections, summarized below. + +*named sections* +*text section* +*data section* + These sections hold your program. `as' and `ld' treat them as + separate but equal sections. Anything you can say of one section + is true of another. When the program is running, however, it is + customary for the text section to be unalterable. The text + section is often shared among processes: it contains instructions, + constants and the like. The data section of a running program is + usually alterable: for example, C variables would be stored in the + data section. + +*bss section* + This section contains zeroed bytes when your program begins + running. It is used to hold uninitialized variables or common + storage. The length of each partial program's bss section is + important, but because it starts out containing zeroed bytes there + is no need to store explicit zero bytes in the object file. The + bss section was invented to eliminate those explicit zeros from + object files. + +*absolute section* + Address 0 of this section is always "relocated" to runtime address + 0. This is useful if you want to refer to an address that `ld' + must not change when relocating. In this sense we speak of + absolute addresses being "unrelocatable": they do not change + during relocation. + +*undefined section* + This "section" is a catch-all for address references to objects + not in the preceding sections. + + An idealized example of three relocatable sections follows. The +example uses the traditional section names `.text' and `.data'. Memory +addresses are on the horizontal axis. + + +-----+----+--+ + partial program # 1: |ttttt|dddd|00| + +-----+----+--+ + + text data bss + seg. seg. seg. + + +---+---+---+ + partial program # 2: |TTT|DDD|000| + +---+---+---+ + + +--+---+-----+--+----+---+-----+~~ + linked program: | |TTT|ttttt| |dddd|DDD|00000| + +--+---+-----+--+----+---+-----+~~ + + addresses: 0 ... + + +File: as.info, Node: As Sections, Next: Sub-Sections, Prev: Ld Sections, Up: Sections + +4.3 Assembler Internal Sections +=============================== + +These sections are meant only for the internal use of `as'. They have +no meaning at run-time. You do not really need to know about these +sections for most purposes; but they can be mentioned in `as' warning +messages, so it might be helpful to have an idea of their meanings to +`as'. These sections are used to permit the value of every expression +in your assembly language program to be a section-relative address. + +ASSEMBLER-INTERNAL-LOGIC-ERROR! + An internal assembler logic error has been found. This means + there is a bug in the assembler. + +expr section + The assembler stores complex expression internally as combinations + of symbols. When it needs to represent an expression as a symbol, + it puts it in the expr section. + + +File: as.info, Node: Sub-Sections, Next: bss, Prev: As Sections, Up: Sections + +4.4 Sub-Sections +================ + +Assembled bytes conventionally fall into two sections: text and data. +You may have separate groups of data in named sections that you want to +end up near to each other in the object file, even though they are not +contiguous in the assembler source. `as' allows you to use +"subsections" for this purpose. Within each section, there can be +numbered subsections with values from 0 to 8192. Objects assembled +into the same subsection go into the object file together with other +objects in the same subsection. For example, a compiler might want to +store constants in the text section, but might not want to have them +interspersed with the program being assembled. In this case, the +compiler could issue a `.text 0' before each section of code being +output, and a `.text 1' before each group of constants being output. + +Subsections are optional. If you do not use subsections, everything +goes in subsection number zero. + + Each subsection is zero-padded up to a multiple of four bytes. +(Subsections may be padded a different amount on different flavors of +`as'.) + + Subsections appear in your object file in numeric order, lowest +numbered to highest. (All this to be compatible with other people's +assemblers.) The object file contains no representation of +subsections; `ld' and other programs that manipulate object files see +no trace of them. They just see all your text subsections as a text +section, and all your data subsections as a data section. + + To specify which subsection you want subsequent statements assembled +into, use a numeric argument to specify it, in a `.text EXPRESSION' or +a `.data EXPRESSION' statement. When generating COFF output, you can +also use an extra subsection argument with arbitrary named sections: +`.section NAME, EXPRESSION'. When generating ELF output, you can also +use the `.subsection' directive (*note SubSection::) to specify a +subsection: `.subsection EXPRESSION'. EXPRESSION should be an absolute +expression (*note Expressions::). If you just say `.text' then `.text +0' is assumed. Likewise `.data' means `.data 0'. Assembly begins in +`text 0'. For instance: + .text 0 # The default subsection is text 0 anyway. + .ascii "This lives in the first text subsection. *" + .text 1 + .ascii "But this lives in the second text subsection." + .data 0 + .ascii "This lives in the data section," + .ascii "in the first data subsection." + .text 0 + .ascii "This lives in the first text section," + .ascii "immediately following the asterisk (*)." + + Each section has a "location counter" incremented by one for every +byte assembled into that section. Because subsections are merely a +convenience restricted to `as' there is no concept of a subsection +location counter. There is no way to directly manipulate a location +counter--but the `.align' directive changes it, and any label +definition captures its current value. The location counter of the +section where statements are being assembled is said to be the "active" +location counter. + + +File: as.info, Node: bss, Prev: Sub-Sections, Up: Sections + +4.5 bss Section +=============== + +The bss section is used for local common variable storage. You may +allocate address space in the bss section, but you may not dictate data +to load into it before your program executes. When your program starts +running, all the contents of the bss section are zeroed bytes. + + The `.lcomm' pseudo-op defines a symbol in the bss section; see +*Note `.lcomm': Lcomm. + + The `.comm' pseudo-op may be used to declare a common symbol, which +is another form of uninitialized symbol; see *Note `.comm': Comm. + + When assembling for a target which supports multiple sections, such +as ELF or COFF, you may switch into the `.bss' section and define +symbols as usual; see *Note `.section': Section. You may only assemble +zero values into the section. Typically the section will only contain +symbol definitions and `.skip' directives (*note `.skip': Skip.). + + +File: as.info, Node: Symbols, Next: Expressions, Prev: Sections, Up: Top + +5 Symbols +********* + +Symbols are a central concept: the programmer uses symbols to name +things, the linker uses symbols to link, and the debugger uses symbols +to debug. + + _Warning:_ `as' does not place symbols in the object file in the + same order they were declared. This may break some debuggers. + +* Menu: + +* Labels:: Labels +* Setting Symbols:: Giving Symbols Other Values +* Symbol Names:: Symbol Names +* Dot:: The Special Dot Symbol +* Symbol Attributes:: Symbol Attributes + + +File: as.info, Node: Labels, Next: Setting Symbols, Up: Symbols + +5.1 Labels +========== + +A "label" is written as a symbol immediately followed by a colon `:'. +The symbol then represents the current value of the active location +counter, and is, for example, a suitable instruction operand. You are +warned if you use the same symbol to represent two different locations: +the first definition overrides any other definitions. + + On the HPPA, the usual form for a label need not be immediately +followed by a colon, but instead must start in column zero. Only one +label may be defined on a single line. To work around this, the HPPA +version of `as' also provides a special directive `.label' for defining +labels more flexibly. + + +File: as.info, Node: Setting Symbols, Next: Symbol Names, Prev: Labels, Up: Symbols + +5.2 Giving Symbols Other Values +=============================== + +A symbol can be given an arbitrary value by writing a symbol, followed +by an equals sign `=', followed by an expression (*note Expressions::). +This is equivalent to using the `.set' directive. *Note `.set': Set. +In the same way, using a double equals sign `='`=' here represents an +equivalent of the `.eqv' directive. *Note `.eqv': Eqv. + + +File: as.info, Node: Symbol Names, Next: Dot, Prev: Setting Symbols, Up: Symbols + +5.3 Symbol Names +================ + +Symbol names begin with a letter or with one of `._'. On most +machines, you can also use `$' in symbol names; exceptions are noted in +*Note Machine Dependencies::. That character may be followed by any +string of digits, letters, dollar signs (unless otherwise noted for a +particular target machine), and underscores. + +Case of letters is significant: `foo' is a different symbol name than +`Foo'. + + Each symbol has exactly one name. Each name in an assembly language +program refers to exactly one symbol. You may use that symbol name any +number of times in a program. + +Local Symbol Names +------------------ + +A local symbol is any symbol beginning with certain local label +prefixes. By default, the local label prefix is `.L' for ELF systems or +`L' for traditional a.out systems, but each target may have its own set +of local label prefixes. On the HPPA local symbols begin with `L$'. + + Local symbols are defined and used within the assembler, but they are +normally not saved in object files. Thus, they are not visible when +debugging. You may use the `-L' option (*note Include Local Symbols: +`-L': L.) to retain the local symbols in the object files. + +Local Labels +------------ + +Local labels help compilers and programmers use names temporarily. +They create symbols which are guaranteed to be unique over the entire +scope of the input source code and which can be referred to by a simple +notation. To define a local label, write a label of the form `N:' +(where N represents any positive integer). To refer to the most recent +previous definition of that label write `Nb', using the same number as +when you defined the label. To refer to the next definition of a local +label, write `Nf'--the `b' stands for "backwards" and the `f' stands +for "forwards". + + There is no restriction on how you can use these labels, and you can +reuse them too. So that it is possible to repeatedly define the same +local label (using the same number `N'), although you can only refer to +the most recently defined local label of that number (for a backwards +reference) or the next definition of a specific local label for a +forward reference. It is also worth noting that the first 10 local +labels (`0:'...`9:') are implemented in a slightly more efficient +manner than the others. + + Here is an example: + + 1: branch 1f + 2: branch 1b + 1: branch 2f + 2: branch 1b + + Which is the equivalent of: + + label_1: branch label_3 + label_2: branch label_1 + label_3: branch label_4 + label_4: branch label_3 + + Local label names are only a notational device. They are immediately +transformed into more conventional symbol names before the assembler +uses them. The symbol names are stored in the symbol table, appear in +error messages, and are optionally emitted to the object file. The +names are constructed using these parts: + +`_local label prefix_' + All local symbols begin with the system-specific local label + prefix. Normally both `as' and `ld' forget symbols that start + with the local label prefix. These labels are used for symbols + you are never intended to see. If you use the `-L' option then + `as' retains these symbols in the object file. If you also + instruct `ld' to retain these symbols, you may use them in + debugging. + +`NUMBER' + This is the number that was used in the local label definition. + So if the label is written `55:' then the number is `55'. + +`C-B' + This unusual character is included so you do not accidentally + invent a symbol of the same name. The character has ASCII value + of `\002' (control-B). + +`_ordinal number_' + This is a serial number to keep the labels distinct. The first + definition of `0:' gets the number `1'. The 15th definition of + `0:' gets the number `15', and so on. Likewise the first + definition of `1:' gets the number `1' and its 15th definition + gets `15' as well. + + So for example, the first `1:' may be named `.L1C-B1', and the 44th +`3:' may be named `.L3C-B44'. + +Dollar Local Labels +------------------- + +`as' also supports an even more local form of local labels called +dollar labels. These labels go out of scope (i.e., they become +undefined) as soon as a non-local label is defined. Thus they remain +valid for only a small region of the input source code. Normal local +labels, by contrast, remain in scope for the entire file, or until they +are redefined by another occurrence of the same local label. + + Dollar labels are defined in exactly the same way as ordinary local +labels, except that instead of being terminated by a colon, they are +terminated by a dollar sign, e.g., `55$'. + + They can also be distinguished from ordinary local labels by their +transformed names which use ASCII character `\001' (control-A) as the +magic character to distinguish them from ordinary labels. For example, +the fifth definition of `6$' may be named `.L6C-A5'. + + +File: as.info, Node: Dot, Next: Symbol Attributes, Prev: Symbol Names, Up: Symbols + +5.4 The Special Dot Symbol +========================== + +The special symbol `.' refers to the current address that `as' is +assembling into. Thus, the expression `melvin: .long .' defines +`melvin' to contain its own address. Assigning a value to `.' is +treated the same as a `.org' directive. Thus, the expression `.=.+4' +is the same as saying `.space 4'. + + +File: as.info, Node: Symbol Attributes, Prev: Dot, Up: Symbols + +5.5 Symbol Attributes +===================== + +Every symbol has, as well as its name, the attributes "Value" and +"Type". Depending on output format, symbols can also have auxiliary +attributes. + + If you use a symbol without defining it, `as' assumes zero for all +these attributes, and probably won't warn you. This makes the symbol +an externally defined symbol, which is generally what you would want. + +* Menu: + +* Symbol Value:: Value +* Symbol Type:: Type + + +* a.out Symbols:: Symbol Attributes: `a.out' + +* COFF Symbols:: Symbol Attributes for COFF + +* SOM Symbols:: Symbol Attributes for SOM + + +File: as.info, Node: Symbol Value, Next: Symbol Type, Up: Symbol Attributes + +5.5.1 Value +----------- + +The value of a symbol is (usually) 32 bits. For a symbol which labels a +location in the text, data, bss or absolute sections the value is the +number of addresses from the start of that section to the label. +Naturally for text, data and bss sections the value of a symbol changes +as `ld' changes section base addresses during linking. Absolute +symbols' values do not change during linking: that is why they are +called absolute. + + The value of an undefined symbol is treated in a special way. If it +is 0 then the symbol is not defined in this assembler source file, and +`ld' tries to determine its value from other files linked into the same +program. You make this kind of symbol simply by mentioning a symbol +name without defining it. A non-zero value represents a `.comm' common +declaration. The value is how much common storage to reserve, in bytes +(addresses). The symbol refers to the first address of the allocated +storage. + + +File: as.info, Node: Symbol Type, Next: a.out Symbols, Prev: Symbol Value, Up: Symbol Attributes + +5.5.2 Type +---------- + +The type attribute of a symbol contains relocation (section) +information, any flag settings indicating that a symbol is external, and +(optionally), other information for linkers and debuggers. The exact +format depends on the object-code output format in use. + + +File: as.info, Node: a.out Symbols, Next: COFF Symbols, Prev: Symbol Type, Up: Symbol Attributes + +5.5.3 Symbol Attributes: `a.out' +-------------------------------- + +* Menu: + +* Symbol Desc:: Descriptor +* Symbol Other:: Other + + +File: as.info, Node: Symbol Desc, Next: Symbol Other, Up: a.out Symbols + +5.5.3.1 Descriptor +.................. + +This is an arbitrary 16-bit value. You may establish a symbol's +descriptor value by using a `.desc' statement (*note `.desc': Desc.). +A descriptor value means nothing to `as'. + + +File: as.info, Node: Symbol Other, Prev: Symbol Desc, Up: a.out Symbols + +5.5.3.2 Other +............. + +This is an arbitrary 8-bit value. It means nothing to `as'. + + +File: as.info, Node: COFF Symbols, Next: SOM Symbols, Prev: a.out Symbols, Up: Symbol Attributes + +5.5.4 Symbol Attributes for COFF +-------------------------------- + +The COFF format supports a multitude of auxiliary symbol attributes; +like the primary symbol attributes, they are set between `.def' and +`.endef' directives. + +5.5.4.1 Primary Attributes +.......................... + +The symbol name is set with `.def'; the value and type, respectively, +with `.val' and `.type'. + +5.5.4.2 Auxiliary Attributes +............................ + +The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and +`.weak' can generate auxiliary symbol table information for COFF. + + +File: as.info, Node: SOM Symbols, Prev: COFF Symbols, Up: Symbol Attributes + +5.5.5 Symbol Attributes for SOM +------------------------------- + +The SOM format for the HPPA supports a multitude of symbol attributes +set with the `.EXPORT' and `.IMPORT' directives. + + The attributes are described in `HP9000 Series 800 Assembly Language +Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT' +assembler directive documentation. + + +File: as.info, Node: Expressions, Next: Pseudo Ops, Prev: Symbols, Up: Top + +6 Expressions +************* + +An "expression" specifies an address or numeric value. Whitespace may +precede and/or follow an expression. + + The result of an expression must be an absolute number, or else an +offset into a particular section. If an expression is not absolute, +and there is not enough information when `as' sees the expression to +know its section, a second pass over the source program might be +necessary to interpret the expression--but the second pass is currently +not implemented. `as' aborts with an error message in this situation. + +* Menu: + +* Empty Exprs:: Empty Expressions +* Integer Exprs:: Integer Expressions + + +File: as.info, Node: Empty Exprs, Next: Integer Exprs, Up: Expressions + +6.1 Empty Expressions +===================== + +An empty expression has no value: it is just whitespace or null. +Wherever an absolute expression is required, you may omit the +expression, and `as' assumes a value of (absolute) 0. This is +compatible with other assemblers. + + +File: as.info, Node: Integer Exprs, Prev: Empty Exprs, Up: Expressions + +6.2 Integer Expressions +======================= + +An "integer expression" is one or more _arguments_ delimited by +_operators_. + +* Menu: + +* Arguments:: Arguments +* Operators:: Operators +* Prefix Ops:: Prefix Operators +* Infix Ops:: Infix Operators + + +File: as.info, Node: Arguments, Next: Operators, Up: Integer Exprs + +6.2.1 Arguments +--------------- + +"Arguments" are symbols, numbers or subexpressions. In other contexts +arguments are sometimes called "arithmetic operands". In this manual, +to avoid confusing them with the "instruction operands" of the machine +language, we use the term "argument" to refer to parts of expressions +only, reserving the word "operand" to refer only to machine instruction +operands. + + Symbols are evaluated to yield {SECTION NNN} where SECTION is one of +text, data, bss, absolute, or undefined. NNN is a signed, 2's +complement 32 bit integer. + + Numbers are usually integers. + + A number can be a flonum or bignum. In this case, you are warned +that only the low order 32 bits are used, and `as' pretends these 32 +bits are an integer. You may write integer-manipulating instructions +that act on exotic constants, compatible with other assemblers. + + Subexpressions are a left parenthesis `(' followed by an integer +expression, followed by a right parenthesis `)'; or a prefix operator +followed by an argument. + + +File: as.info, Node: Operators, Next: Prefix Ops, Prev: Arguments, Up: Integer Exprs + +6.2.2 Operators +--------------- + +"Operators" are arithmetic functions, like `+' or `%'. Prefix +operators are followed by an argument. Infix operators appear between +their arguments. Operators may be preceded and/or followed by +whitespace. + + +File: as.info, Node: Prefix Ops, Next: Infix Ops, Prev: Operators, Up: Integer Exprs + +6.2.3 Prefix Operator +--------------------- + +`as' has the following "prefix operators". They each take one +argument, which must be absolute. + +`-' + "Negation". Two's complement negation. + +`~' + "Complementation". Bitwise not. + + +File: as.info, Node: Infix Ops, Prev: Prefix Ops, Up: Integer Exprs + +6.2.4 Infix Operators +--------------------- + +"Infix operators" take two arguments, one on either side. Operators +have precedence, but operations with equal precedence are performed left +to right. Apart from `+' or `-', both arguments must be absolute, and +the result is absolute. + + 1. Highest Precedence + + `*' + "Multiplication". + + `/' + "Division". Truncation is the same as the C operator `/' + + `%' + "Remainder". + + `<<' + "Shift Left". Same as the C operator `<<'. + + `>>' + "Shift Right". Same as the C operator `>>'. + + 2. Intermediate precedence + + `|' + "Bitwise Inclusive Or". + + `&' + "Bitwise And". + + `^' + "Bitwise Exclusive Or". + + `!' + "Bitwise Or Not". + + 3. Low Precedence + + `+' + "Addition". If either argument is absolute, the result has + the section of the other argument. You may not add together + arguments from different sections. + + `-' + "Subtraction". If the right argument is absolute, the result + has the section of the left argument. If both arguments are + in the same section, the result is absolute. You may not + subtract arguments from different sections. + + `==' + "Is Equal To" + + `<>' + `!=' + "Is Not Equal To" + + `<' + "Is Less Than" + + `>' + "Is Greater Than" + + `>=' + "Is Greater Than Or Equal To" + + `<=' + "Is Less Than Or Equal To" + + The comparison operators can be used as infix operators. A + true results has a value of -1 whereas a false result has a + value of 0. Note, these operators perform signed + comparisons. + + 4. Lowest Precedence + + `&&' + "Logical And". + + `||' + "Logical Or". + + These two logical operations can be used to combine the + results of sub expressions. Note, unlike the comparison + operators a true result returns a value of 1 but a false + results does still return 0. Also note that the logical or + operator has a slightly lower precedence than logical and. + + + In short, it's only meaningful to add or subtract the _offsets_ in an +address; you can only have a defined section in one of the two +arguments. + + +File: as.info, Node: Pseudo Ops, Next: Machine Dependencies, Prev: Expressions, Up: Top + +7 Assembler Directives +********************** + +All assembler directives have names that begin with a period (`.'). +The rest of the name is letters, usually in lower case. + + This chapter discusses directives that are available regardless of +the target machine configuration for the GNU assembler. Some machine +configurations provide additional directives. *Note Machine +Dependencies::. + +* Menu: + +* Abort:: `.abort' + +* ABORT (COFF):: `.ABORT' + +* Align:: `.align ABS-EXPR , ABS-EXPR' +* Altmacro:: `.altmacro' +* Ascii:: `.ascii "STRING"'... +* Asciz:: `.asciz "STRING"'... +* Balign:: `.balign ABS-EXPR , ABS-EXPR' +* Byte:: `.byte EXPRESSIONS' +* Comm:: `.comm SYMBOL , LENGTH ' + +* CFI directives:: `.cfi_startproc [simple]', `.cfi_endproc', etc. + +* Data:: `.data SUBSECTION' + +* Def:: `.def NAME' + +* Desc:: `.desc SYMBOL, ABS-EXPRESSION' + +* Dim:: `.dim' + +* Double:: `.double FLONUMS' +* Eject:: `.eject' +* Else:: `.else' +* Elseif:: `.elseif' +* End:: `.end' + +* Endef:: `.endef' + +* Endfunc:: `.endfunc' +* Endif:: `.endif' +* Equ:: `.equ SYMBOL, EXPRESSION' +* Equiv:: `.equiv SYMBOL, EXPRESSION' +* Eqv:: `.eqv SYMBOL, EXPRESSION' +* Err:: `.err' +* Error:: `.error STRING' +* Exitm:: `.exitm' +* Extern:: `.extern' +* Fail:: `.fail' + +* File:: `.file STRING' + +* Fill:: `.fill REPEAT , SIZE , VALUE' +* Float:: `.float FLONUMS' +* Func:: `.func' +* Global:: `.global SYMBOL', `.globl SYMBOL' + +* Hidden:: `.hidden NAMES' + +* hword:: `.hword EXPRESSIONS' +* Ident:: `.ident' +* If:: `.if ABSOLUTE EXPRESSION' +* Incbin:: `.incbin "FILE"[,SKIP[,COUNT]]' +* Include:: `.include "FILE"' +* Int:: `.int EXPRESSIONS' + +* Internal:: `.internal NAMES' + +* Irp:: `.irp SYMBOL,VALUES'... +* Irpc:: `.irpc SYMBOL,VALUES'... +* Lcomm:: `.lcomm SYMBOL , LENGTH' +* Lflags:: `.lflags' + +* Line:: `.line LINE-NUMBER' + +* Linkonce:: `.linkonce [TYPE]' +* List:: `.list' +* Ln:: `.ln LINE-NUMBER' + +* LNS directives:: `.file', `.loc', etc. + +* Long:: `.long EXPRESSIONS' + +* Macro:: `.macro NAME ARGS'... +* MRI:: `.mri VAL' +* Noaltmacro:: `.noaltmacro' +* Nolist:: `.nolist' +* Octa:: `.octa BIGNUMS' +* Org:: `.org NEW-LC, FILL' +* P2align:: `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR' + +* PopSection:: `.popsection' +* Previous:: `.previous' + +* Print:: `.print STRING' + +* Protected:: `.protected NAMES' + +* Psize:: `.psize LINES, COLUMNS' +* Purgem:: `.purgem NAME' + +* PushSection:: `.pushsection NAME' + +* Quad:: `.quad BIGNUMS' +* Reloc:: `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' +* Rept:: `.rept COUNT' +* Sbttl:: `.sbttl "SUBHEADING"' + +* Scl:: `.scl CLASS' + +* Section:: `.section NAME' + +* Set:: `.set SYMBOL, EXPRESSION' +* Short:: `.short EXPRESSIONS' +* Single:: `.single FLONUMS' + +* Size:: `.size [NAME , EXPRESSION]' + +* Skip:: `.skip SIZE , FILL' +* Sleb128:: `.sleb128 EXPRESSIONS' +* Space:: `.space SIZE , FILL' + +* Stab:: `.stabd, .stabn, .stabs' + +* String:: `.string "STR"' +* Struct:: `.struct EXPRESSION' + +* SubSection:: `.subsection' +* Symver:: `.symver NAME,NAME2@NODENAME' + + +* Tag:: `.tag STRUCTNAME' + +* Text:: `.text SUBSECTION' +* Title:: `.title "HEADING"' + +* Type:: `.type ' + +* Uleb128:: `.uleb128 EXPRESSIONS' + +* Val:: `.val ADDR' + + +* Version:: `.version "STRING"' +* VTableEntry:: `.vtable_entry TABLE, OFFSET' +* VTableInherit:: `.vtable_inherit CHILD, PARENT' + +* Warning:: `.warning STRING' +* Weak:: `.weak NAMES' +* Weakref:: `.weakref ALIAS, SYMBOL' +* Word:: `.word EXPRESSIONS' +* Deprecated:: Deprecated Directives + + +File: as.info, Node: Abort, Next: ABORT (COFF), Up: Pseudo Ops + +7.1 `.abort' +============ + +This directive stops the assembly immediately. It is for compatibility +with other assemblers. The original idea was that the assembly +language source would be piped into the assembler. If the sender of +the source quit, it could use this directive tells `as' to quit also. +One day `.abort' will not be supported. + + +File: as.info, Node: ABORT (COFF), Next: Align, Prev: Abort, Up: Pseudo Ops + +7.2 `.ABORT' (COFF) +=================== + +When producing COFF output, `as' accepts this directive as a synonym +for `.abort'. + + +File: as.info, Node: Align, Next: Altmacro, Prev: ABORT (COFF), Up: Pseudo Ops + +7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR' +========================================= + +Pad the location counter (in the current subsection) to a particular +storage boundary. The first expression (which must be absolute) is the +alignment required, as described below. + + The second expression (also absolute) gives the fill value to be +stored in the padding bytes. It (and the comma) may be omitted. If it +is omitted, the padding bytes are normally zero. However, on some +systems, if the section is marked as containing code and the fill value +is omitted, the space is filled with no-op instructions. + + The third expression is also absolute, and is also optional. If it +is present, it is the maximum number of bytes that should be skipped by +this alignment directive. If doing the alignment would require +skipping more bytes than the specified maximum, then the alignment is +not done at all. You can omit the fill value (the second argument) +entirely by simply using two commas after the required alignment; this +can be useful if you want the alignment to be filled with no-op +instructions when appropriate. + + The way the required alignment is specified varies from system to +system. For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32, +s390, sparc, tic4x, tic80 and xtensa, the first expression is the +alignment request in bytes. For example `.align 8' advances the +location counter until it is a multiple of 8. If the location counter +is already a multiple of 8, no change is needed. For the tic54x, the +first expression is the alignment request in words. + + For other systems, including the i386 using a.out format, and the +arm and strongarm, it is the number of low-order zero bits the location +counter must have after advancement. For example `.align 3' advances +the location counter until it a multiple of 8. If the location counter +is already a multiple of 8, no change is needed. + + This inconsistency is due to the different behaviors of the various +native assemblers for these systems which GAS must emulate. GAS also +provides `.balign' and `.p2align' directives, described later, which +have a consistent behavior across all architectures (but are specific +to GAS). + + +File: as.info, Node: Ascii, Next: Asciz, Prev: Altmacro, Up: Pseudo Ops + +7.4 `.ascii "STRING"'... +======================== + +`.ascii' expects zero or more string literals (*note Strings::) +separated by commas. It assembles each string (with no automatic +trailing zero byte) into consecutive addresses. + + +File: as.info, Node: Asciz, Next: Balign, Prev: Ascii, Up: Pseudo Ops + +7.5 `.asciz "STRING"'... +======================== + +`.asciz' is just like `.ascii', but each string is followed by a zero +byte. The "z" in `.asciz' stands for "zero". + + +File: as.info, Node: Balign, Next: Byte, Prev: Asciz, Up: Pseudo Ops + +7.6 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' +============================================== + +Pad the location counter (in the current subsection) to a particular +storage boundary. The first expression (which must be absolute) is the +alignment request in bytes. For example `.balign 8' advances the +location counter until it is a multiple of 8. If the location counter +is already a multiple of 8, no change is needed. + + The second expression (also absolute) gives the fill value to be +stored in the padding bytes. It (and the comma) may be omitted. If it +is omitted, the padding bytes are normally zero. However, on some +systems, if the section is marked as containing code and the fill value +is omitted, the space is filled with no-op instructions. + + The third expression is also absolute, and is also optional. If it +is present, it is the maximum number of bytes that should be skipped by +this alignment directive. If doing the alignment would require +skipping more bytes than the specified maximum, then the alignment is +not done at all. You can omit the fill value (the second argument) +entirely by simply using two commas after the required alignment; this +can be useful if you want the alignment to be filled with no-op +instructions when appropriate. + + The `.balignw' and `.balignl' directives are variants of the +`.balign' directive. The `.balignw' directive treats the fill pattern +as a two byte word value. The `.balignl' directives treats the fill +pattern as a four byte longword value. For example, `.balignw +4,0x368d' will align to a multiple of 4. If it skips two bytes, they +will be filled in with the value 0x368d (the exact placement of the +bytes depends upon the endianness of the processor). If it skips 1 or +3 bytes, the fill value is undefined. + + +File: as.info, Node: Byte, Next: Comm, Prev: Balign, Up: Pseudo Ops + +7.7 `.byte EXPRESSIONS' +======================= + +`.byte' expects zero or more expressions, separated by commas. Each +expression is assembled into the next byte. + + +File: as.info, Node: Comm, Next: CFI directives, Prev: Byte, Up: Pseudo Ops + +7.8 `.comm SYMBOL , LENGTH ' +============================ + +`.comm' declares a common symbol named SYMBOL. When linking, a common +symbol in one object file may be merged with a defined or common symbol +of the same name in another object file. If `ld' does not see a +definition for the symbol-just one or more common symbols-then it will +allocate LENGTH bytes of uninitialized memory. LENGTH must be an +absolute expression. If `ld' sees multiple common symbols with the +same name, and they do not all have the same size, it will allocate +space using the largest size. + + When using ELF, the `.comm' directive takes an optional third +argument. This is the desired alignment of the symbol, specified as a +byte boundary (for example, an alignment of 16 means that the least +significant 4 bits of the address should be zero). The alignment must +be an absolute expression, and it must be a power of two. If `ld' +allocates uninitialized memory for the common symbol, it will use the +alignment when placing the symbol. If no alignment is specified, `as' +will set the alignment to the largest power of two less than or equal +to the size of the symbol, up to a maximum of 16. + + The syntax for `.comm' differs slightly on the HPPA. The syntax is +`SYMBOL .comm, LENGTH'; SYMBOL is optional. + + +File: as.info, Node: CFI directives, Next: Data, Prev: Comm, Up: Pseudo Ops + +7.9 `.cfi_startproc [simple]' +============================= + +`.cfi_startproc' is used at the beginning of each function that should +have an entry in `.eh_frame'. It initializes some internal data +structures. Don't forget to close the function by `.cfi_endproc'. + + Unless `.cfi_startproc' is used along with parameter `simple' it +also emits some architecture dependent initial CFI instructions. + +7.10 `.cfi_endproc' +=================== + +`.cfi_endproc' is used at the end of a function where it closes its +unwind entry previously opened by `.cfi_startproc', and emits it to +`.eh_frame'. + +7.11 `.cfi_personality ENCODING [, EXP]' +======================================== + +`.cfi_personality' defines personality routine and its encoding. +ENCODING must be a constant determining how the personality should be +encoded. If it is 255 (`DW_EH_PE_omit'), second argument is not +present, otherwise second argument should be a constant or a symbol +name. When using indirect encodings, the symbol provided should be the +location where personality can be loaded from, not the personality +routine itself. The default after `.cfi_startproc' is +`.cfi_personality 0xff', no personality routine. + +7.12 `.cfi_lsda ENCODING [, EXP]' +================================= + +`.cfi_lsda' defines LSDA and its encoding. ENCODING must be a constant +determining how the LSDA should be encoded. If it is 255 +(`DW_EH_PE_omit'), second argument is not present, otherwise second +argument should be a constant or a symbol name. The default after +`.cfi_startproc' is `.cfi_lsda 0xff', no LSDA. + +7.13 `.cfi_def_cfa REGISTER, OFFSET' +==================================== + +`.cfi_def_cfa' defines a rule for computing CFA as: take address from +REGISTER and add OFFSET to it. + +7.14 `.cfi_def_cfa_register REGISTER' +===================================== + +`.cfi_def_cfa_register' modifies a rule for computing CFA. From now on +REGISTER will be used instead of the old one. Offset remains the same. + +7.15 `.cfi_def_cfa_offset OFFSET' +================================= + +`.cfi_def_cfa_offset' modifies a rule for computing CFA. Register +remains the same, but OFFSET is new. Note that it is the absolute +offset that will be added to a defined register to compute CFA address. + +7.16 `.cfi_adjust_cfa_offset OFFSET' +==================================== + +Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is +added/substracted from the previous offset. + +7.17 `.cfi_offset REGISTER, OFFSET' +=================================== + +Previous value of REGISTER is saved at offset OFFSET from CFA. + +7.18 `.cfi_rel_offset REGISTER, OFFSET' +======================================= + +Previous value of REGISTER is saved at offset OFFSET from the current +CFA register. This is transformed to `.cfi_offset' using the known +displacement of the CFA register from the CFA. This is often easier to +use, because the number will match the code it's annotating. + +7.19 `.cfi_register REGISTER1, REGISTER2' +========================================= + +Previous value of REGISTER1 is saved in register REGISTER2. + +7.20 `.cfi_restore REGISTER' +============================ + +`.cfi_restore' says that the rule for REGISTER is now the same as it +was at the beginning of the function, after all initial instruction +added by `.cfi_startproc' were executed. + +7.21 `.cfi_undefined REGISTER' +============================== + +From now on the previous value of REGISTER can't be restored anymore. + +7.22 `.cfi_same_value REGISTER' +=============================== + +Current value of REGISTER is the same like in the previous frame, i.e. +no restoration needed. + +7.23 `.cfi_remember_state', +=========================== + +First save all current rules for all registers by `.cfi_remember_state', +then totally screw them up by subsequent `.cfi_*' directives and when +everything is hopelessly bad, use `.cfi_restore_state' to restore the +previous saved state. + +7.24 `.cfi_return_column REGISTER' +================================== + +Change return column REGISTER, i.e. the return address is either +directly in REGISTER or can be accessed by rules for REGISTER. + +7.25 `.cfi_signal_frame' +======================== + +Mark current function as signal trampoline. + +7.26 `.cfi_window_save' +======================= + +SPARC register window has been saved. + +7.27 `.cfi_escape' EXPRESSION[, ...] +==================================== + +Allows the user to add arbitrary bytes to the unwind info. One might +use this to add OS-specific CFI opcodes, or generic CFI opcodes that +GAS does not yet support. + + +File: as.info, Node: LNS directives, Next: Long, Prev: Ln, Up: Pseudo Ops + +7.28 `.file FILENO FILENAME' +============================ + +When emitting dwarf2 line number information `.file' assigns filenames +to the `.debug_line' file name table. The FILENO operand should be a +unique positive integer to use as the index of the entry in the table. +The FILENAME operand is a C string literal. + + The detail of filename indices is exposed to the user because the +filename table is shared with the `.debug_info' section of the dwarf2 +debugging information, and thus the user must know the exact indices +that table entries will have. + +7.29 `.loc FILENO LINENO [COLUMN] [OPTIONS]' +============================================ + +The `.loc' directive will add row to the `.debug_line' line number +matrix corresponding to the immediately following assembly instruction. +The FILENO, LINENO, and optional COLUMN arguments will be applied to +the `.debug_line' state machine before the row is added. + + The OPTIONS are a sequence of the following tokens in any order: + +`basic_block' + This option will set the `basic_block' register in the + `.debug_line' state machine to `true'. + +`prologue_end' + This option will set the `prologue_end' register in the + `.debug_line' state machine to `true'. + +`epilogue_begin' + This option will set the `epilogue_begin' register in the + `.debug_line' state machine to `true'. + +`is_stmt VALUE' + This option will set the `is_stmt' register in the `.debug_line' + state machine to `value', which must be either 0 or 1. + +`isa VALUE' + This directive will set the `isa' register in the `.debug_line' + state machine to VALUE, which must be an unsigned integer. + + +7.30 `.loc_mark_blocks ENABLE' +============================== + +The `.loc_mark_blocks' directive makes the assembler emit an entry to +the `.debug_line' line number matrix with the `basic_block' register in +the state machine set whenever a code label is seen. The ENABLE +argument should be either 1 or 0, to enable or disable this function +respectively. + + +File: as.info, Node: Data, Next: Def, Prev: CFI directives, Up: Pseudo Ops + +7.31 `.data SUBSECTION' +======================= + +`.data' tells `as' to assemble the following statements onto the end of +the data subsection numbered SUBSECTION (which is an absolute +expression). If SUBSECTION is omitted, it defaults to zero. + + +File: as.info, Node: Def, Next: Desc, Prev: Data, Up: Pseudo Ops + +7.32 `.def NAME' +================ + +Begin defining debugging information for a symbol NAME; the definition +extends until the `.endef' directive is encountered. + + +File: as.info, Node: Desc, Next: Dim, Prev: Def, Up: Pseudo Ops + +7.33 `.desc SYMBOL, ABS-EXPRESSION' +=================================== + +This directive sets the descriptor of the symbol (*note Symbol +Attributes::) to the low 16 bits of an absolute expression. + + The `.desc' directive is not available when `as' is configured for +COFF output; it is only for `a.out' or `b.out' object format. For the +sake of compatibility, `as' accepts it, but produces no output, when +configured for COFF. + + +File: as.info, Node: Dim, Next: Double, Prev: Desc, Up: Pseudo Ops + +7.34 `.dim' +=========== + +This directive is generated by compilers to include auxiliary debugging +information in the symbol table. It is only permitted inside +`.def'/`.endef' pairs. + + +File: as.info, Node: Double, Next: Eject, Prev: Dim, Up: Pseudo Ops + +7.35 `.double FLONUMS' +====================== + +`.double' expects zero or more flonums, separated by commas. It +assembles floating point numbers. The exact kind of floating point +numbers emitted depends on how `as' is configured. *Note Machine +Dependencies::. + + +File: as.info, Node: Eject, Next: Else, Prev: Double, Up: Pseudo Ops + +7.36 `.eject' +============= + +Force a page break at this point, when generating assembly listings. + + +File: as.info, Node: Else, Next: Elseif, Prev: Eject, Up: Pseudo Ops + +7.37 `.else' +============ + +`.else' is part of the `as' support for conditional assembly; see *Note +`.if': If. It marks the beginning of a section of code to be assembled +if the condition for the preceding `.if' was false. + + +File: as.info, Node: Elseif, Next: End, Prev: Else, Up: Pseudo Ops + +7.38 `.elseif' +============== + +`.elseif' is part of the `as' support for conditional assembly; see +*Note `.if': If. It is shorthand for beginning a new `.if' block that +would otherwise fill the entire `.else' section. + + +File: as.info, Node: End, Next: Endef, Prev: Elseif, Up: Pseudo Ops + +7.39 `.end' +=========== + +`.end' marks the end of the assembly file. `as' does not process +anything in the file past the `.end' directive. + + +File: as.info, Node: Endef, Next: Endfunc, Prev: End, Up: Pseudo Ops + +7.40 `.endef' +============= + +This directive flags the end of a symbol definition begun with `.def'. + + +File: as.info, Node: Endfunc, Next: Endif, Prev: Endef, Up: Pseudo Ops + +7.41 `.endfunc' +=============== + +`.endfunc' marks the end of a function specified with `.func'. + + +File: as.info, Node: Endif, Next: Equ, Prev: Endfunc, Up: Pseudo Ops + +7.42 `.endif' +============= + +`.endif' is part of the `as' support for conditional assembly; it marks +the end of a block of code that is only assembled conditionally. *Note +`.if': If. + + +File: as.info, Node: Equ, Next: Equiv, Prev: Endif, Up: Pseudo Ops + +7.43 `.equ SYMBOL, EXPRESSION' +============================== + +This directive sets the value of SYMBOL to EXPRESSION. It is +synonymous with `.set'; see *Note `.set': Set. + + The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'. + + The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'. On the +Z80 it is an eror if SYMBOL is already defined, but the symbol is not +protected from later redefinition. Compare *Note Equiv::. + + +File: as.info, Node: Equiv, Next: Eqv, Prev: Equ, Up: Pseudo Ops + +7.44 `.equiv SYMBOL, EXPRESSION' +================================ + +The `.equiv' directive is like `.equ' and `.set', except that the +assembler will signal an error if SYMBOL is already defined. Note a +symbol which has been referenced but not actually defined is considered +to be undefined. + + Except for the contents of the error message, this is roughly +equivalent to + .ifdef SYM + .err + .endif + .equ SYM,VAL + plus it protects the symbol from later redefinition. + + +File: as.info, Node: Eqv, Next: Err, Prev: Equiv, Up: Pseudo Ops + +7.45 `.eqv SYMBOL, EXPRESSION' +============================== + +The `.eqv' directive is like `.equiv', but no attempt is made to +evaluate the expression or any part of it immediately. Instead each +time the resulting symbol is used in an expression, a snapshot of its +current value is taken. + + +File: as.info, Node: Err, Next: Error, Prev: Eqv, Up: Pseudo Ops + +7.46 `.err' +=========== + +If `as' assembles a `.err' directive, it will print an error message +and, unless the `-Z' option was used, it will not generate an object +file. This can be used to signal an error in conditionally compiled +code. + + +File: as.info, Node: Error, Next: Exitm, Prev: Err, Up: Pseudo Ops + +7.47 `.error "STRING"' +====================== + +Similarly to `.err', this directive emits an error, but you can specify +a string that will be emitted as the error message. If you don't +specify the message, it defaults to `".error directive invoked in +source file"'. *Note Error and Warning Messages: Errors. + + .error "This code has not been assembled and tested." + + +File: as.info, Node: Exitm, Next: Extern, Prev: Error, Up: Pseudo Ops + +7.48 `.exitm' +============= + +Exit early from the current macro definition. *Note Macro::. + + +File: as.info, Node: Extern, Next: Fail, Prev: Exitm, Up: Pseudo Ops + +7.49 `.extern' +============== + +`.extern' is accepted in the source program--for compatibility with +other assemblers--but it is ignored. `as' treats all undefined symbols +as external. + + +File: as.info, Node: Fail, Next: File, Prev: Extern, Up: Pseudo Ops + +7.50 `.fail EXPRESSION' +======================= + +Generates an error or a warning. If the value of the EXPRESSION is 500 +or more, `as' will print a warning message. If the value is less than +500, `as' will print an error message. The message will include the +value of EXPRESSION. This can occasionally be useful inside complex +nested macros or conditional assembly. + + +File: as.info, Node: File, Next: Fill, Prev: Fail, Up: Pseudo Ops + +7.51 `.file STRING' +=================== + +`.file' tells `as' that we are about to start a new logical file. +STRING is the new file name. In general, the filename is recognized +whether or not it is surrounded by quotes `"'; but if you wish to +specify an empty file name, you must give the quotes-`""'. This +statement may go away in future: it is only recognized to be compatible +with old `as' programs. + + +File: as.info, Node: Fill, Next: Float, Prev: File, Up: Pseudo Ops + +7.52 `.fill REPEAT , SIZE , VALUE' +================================== + +REPEAT, SIZE and VALUE are absolute expressions. This emits REPEAT +copies of SIZE bytes. REPEAT may be zero or more. SIZE may be zero or +more, but if it is more than 8, then it is deemed to have the value 8, +compatible with other people's assemblers. The contents of each REPEAT +bytes is taken from an 8-byte number. The highest order 4 bytes are +zero. The lowest order 4 bytes are VALUE rendered in the byte-order of +an integer on the computer `as' is assembling for. Each SIZE bytes in +a repetition is taken from the lowest order SIZE bytes of this number. +Again, this bizarre behavior is compatible with other people's +assemblers. + + SIZE and VALUE are optional. If the second comma and VALUE are +absent, VALUE is assumed zero. If the first comma and following tokens +are absent, SIZE is assumed to be 1. + + +File: as.info, Node: Float, Next: Func, Prev: Fill, Up: Pseudo Ops + +7.53 `.float FLONUMS' +===================== + +This directive assembles zero or more flonums, separated by commas. It +has the same effect as `.single'. The exact kind of floating point +numbers emitted depends on how `as' is configured. *Note Machine +Dependencies::. + + +File: as.info, Node: Func, Next: Global, Prev: Float, Up: Pseudo Ops + +7.54 `.func NAME[,LABEL]' +========================= + +`.func' emits debugging information to denote function NAME, and is +ignored unless the file is assembled with debugging enabled. Only +`--gstabs[+]' is currently supported. LABEL is the entry point of the +function and if omitted NAME prepended with the `leading char' is used. +`leading char' is usually `_' or nothing, depending on the target. All +functions are currently defined to have `void' return type. The +function must be terminated with `.endfunc'. + + +File: as.info, Node: Global, Next: Hidden, Prev: Func, Up: Pseudo Ops + +7.55 `.global SYMBOL', `.globl SYMBOL' +====================================== + +`.global' makes the symbol visible to `ld'. If you define SYMBOL in +your partial program, its value is made available to other partial +programs that are linked with it. Otherwise, SYMBOL takes its +attributes from a symbol of the same name from another file linked into +the same program. + + Both spellings (`.globl' and `.global') are accepted, for +compatibility with other assemblers. + + On the HPPA, `.global' is not always enough to make it accessible to +other partial programs. You may need the HPPA-only `.EXPORT' directive +as well. *Note HPPA Assembler Directives: HPPA Directives. + + +File: as.info, Node: Hidden, Next: hword, Prev: Global, Up: Pseudo Ops + +7.56 `.hidden NAMES' +==================== + +This is one of the ELF visibility directives. The other two are +`.internal' (*note `.internal': Internal.) and `.protected' (*note +`.protected': Protected.). + + This directive overrides the named symbols default visibility (which +is set by their binding: local, global or weak). The directive sets +the visibility to `hidden' which means that the symbols are not visible +to other components. Such symbols are always considered to be +`protected' as well. + + +File: as.info, Node: hword, Next: Ident, Prev: Hidden, Up: Pseudo Ops + +7.57 `.hword EXPRESSIONS' +========================= + +This expects zero or more EXPRESSIONS, and emits a 16 bit number for +each. + + This directive is a synonym for `.short'; depending on the target +architecture, it may also be a synonym for `.word'. + + +File: as.info, Node: Ident, Next: If, Prev: hword, Up: Pseudo Ops + +7.58 `.ident' +============= + +This directive is used by some assemblers to place tags in object +files. The behavior of this directive varies depending on the target. +When using the a.out object file format, `as' simply accepts the +directive for source-file compatibility with existing assemblers, but +does not emit anything for it. When using COFF, comments are emitted +to the `.comment' or `.rdata' section, depending on the target. When +using ELF, comments are emitted to the `.comment' section. + + +File: as.info, Node: If, Next: Incbin, Prev: Ident, Up: Pseudo Ops + +7.59 `.if ABSOLUTE EXPRESSION' +============================== + +`.if' marks the beginning of a section of code which is only considered +part of the source program being assembled if the argument (which must +be an ABSOLUTE EXPRESSION) is non-zero. The end of the conditional +section of code must be marked by `.endif' (*note `.endif': Endif.); +optionally, you may include code for the alternative condition, flagged +by `.else' (*note `.else': Else.). If you have several conditions to +check, `.elseif' may be used to avoid nesting blocks if/else within +each subsequent `.else' block. + + The following variants of `.if' are also supported: +`.ifdef SYMBOL' + Assembles the following section of code if the specified SYMBOL + has been defined. Note a symbol which has been referenced but not + yet defined is considered to be undefined. + +`.ifb TEXT' + Assembles the following section of code if the operand is blank + (empty). + +`.ifc STRING1,STRING2' + Assembles the following section of code if the two strings are the + same. The strings may be optionally quoted with single quotes. + If they are not quoted, the first string stops at the first comma, + and the second string stops at the end of the line. Strings which + contain whitespace should be quoted. The string comparison is + case sensitive. + +`.ifeq ABSOLUTE EXPRESSION' + Assembles the following section of code if the argument is zero. + +`.ifeqs STRING1,STRING2' + Another form of `.ifc'. The strings must be quoted using double + quotes. + +`.ifge ABSOLUTE EXPRESSION' + Assembles the following section of code if the argument is greater + than or equal to zero. + +`.ifgt ABSOLUTE EXPRESSION' + Assembles the following section of code if the argument is greater + than zero. + +`.ifle ABSOLUTE EXPRESSION' + Assembles the following section of code if the argument is less + than or equal to zero. + +`.iflt ABSOLUTE EXPRESSION' + Assembles the following section of code if the argument is less + than zero. + +`.ifnb TEXT' + Like `.ifb', but the sense of the test is reversed: this assembles + the following section of code if the operand is non-blank + (non-empty). + +`.ifnc STRING1,STRING2.' + Like `.ifc', but the sense of the test is reversed: this assembles + the following section of code if the two strings are not the same. + +`.ifndef SYMBOL' +`.ifnotdef SYMBOL' + Assembles the following section of code if the specified SYMBOL + has not been defined. Both spelling variants are equivalent. + Note a symbol which has been referenced but not yet defined is + considered to be undefined. + +`.ifne ABSOLUTE EXPRESSION' + Assembles the following section of code if the argument is not + equal to zero (in other words, this is equivalent to `.if'). + +`.ifnes STRING1,STRING2' + Like `.ifeqs', but the sense of the test is reversed: this + assembles the following section of code if the two strings are not + the same. + + +File: as.info, Node: Incbin, Next: Include, Prev: If, Up: Pseudo Ops + +7.60 `.incbin "FILE"[,SKIP[,COUNT]]' +==================================== + +The `incbin' directive includes FILE verbatim at the current location. +You can control the search paths used with the `-I' command-line option +(*note Command-Line Options: Invoking.). Quotation marks are required +around FILE. + + The SKIP argument skips a number of bytes from the start of the +FILE. The COUNT argument indicates the maximum number of bytes to +read. Note that the data is not aligned in any way, so it is the user's +responsibility to make sure that proper alignment is provided both +before and after the `incbin' directive. + + +File: as.info, Node: Include, Next: Int, Prev: Incbin, Up: Pseudo Ops + +7.61 `.include "FILE"' +====================== + +This directive provides a way to include supporting files at specified +points in your source program. The code from FILE is assembled as if +it followed the point of the `.include'; when the end of the included +file is reached, assembly of the original file continues. You can +control the search paths used with the `-I' command-line option (*note +Command-Line Options: Invoking.). Quotation marks are required around +FILE. + + +File: as.info, Node: Int, Next: Internal, Prev: Include, Up: Pseudo Ops + +7.62 `.int EXPRESSIONS' +======================= + +Expect zero or more EXPRESSIONS, of any section, separated by commas. +For each expression, emit a number that, at run time, is the value of +that expression. The byte order and bit size of the number depends on +what kind of target the assembly is for. + + +File: as.info, Node: Internal, Next: Irp, Prev: Int, Up: Pseudo Ops + +7.63 `.internal NAMES' +====================== + +This is one of the ELF visibility directives. The other two are +`.hidden' (*note `.hidden': Hidden.) and `.protected' (*note +`.protected': Protected.). + + This directive overrides the named symbols default visibility (which +is set by their binding: local, global or weak). The directive sets +the visibility to `internal' which means that the symbols are +considered to be `hidden' (i.e., not visible to other components), and +that some extra, processor specific processing must also be performed +upon the symbols as well. + + +File: as.info, Node: Irp, Next: Irpc, Prev: Internal, Up: Pseudo Ops + +7.64 `.irp SYMBOL,VALUES'... +============================ + +Evaluate a sequence of statements assigning different values to SYMBOL. +The sequence of statements starts at the `.irp' directive, and is +terminated by an `.endr' directive. For each VALUE, SYMBOL is set to +VALUE, and the sequence of statements is assembled. If no VALUE is +listed, the sequence of statements is assembled once, with SYMBOL set +to the null string. To refer to SYMBOL within the sequence of +statements, use \SYMBOL. + + For example, assembling + + .irp param,1,2,3 + move d\param,sp@- + .endr + + is equivalent to assembling + + move d1,sp@- + move d2,sp@- + move d3,sp@- + + For some caveats with the spelling of SYMBOL, see also *Note Macro::. + + +File: as.info, Node: Irpc, Next: Lcomm, Prev: Irp, Up: Pseudo Ops + +7.65 `.irpc SYMBOL,VALUES'... +============================= + +Evaluate a sequence of statements assigning different values to SYMBOL. +The sequence of statements starts at the `.irpc' directive, and is +terminated by an `.endr' directive. For each character in VALUE, +SYMBOL is set to the character, and the sequence of statements is +assembled. If no VALUE is listed, the sequence of statements is +assembled once, with SYMBOL set to the null string. To refer to SYMBOL +within the sequence of statements, use \SYMBOL. + + For example, assembling + + .irpc param,123 + move d\param,sp@- + .endr + + is equivalent to assembling + + move d1,sp@- + move d2,sp@- + move d3,sp@- + + For some caveats with the spelling of SYMBOL, see also the discussion +at *Note Macro::. + + +File: as.info, Node: Lcomm, Next: Lflags, Prev: Irpc, Up: Pseudo Ops + +7.66 `.lcomm SYMBOL , LENGTH' +============================= + +Reserve LENGTH (an absolute expression) bytes for a local common +denoted by SYMBOL. The section and value of SYMBOL are those of the +new local common. The addresses are allocated in the bss section, so +that at run-time the bytes start off zeroed. SYMBOL is not declared +global (*note `.global': Global.), so is normally not visible to `ld'. + + Some targets permit a third argument to be used with `.lcomm'. This +argument specifies the desired alignment of the symbol in the bss +section. + + The syntax for `.lcomm' differs slightly on the HPPA. The syntax is +`SYMBOL .lcomm, LENGTH'; SYMBOL is optional. + + +File: as.info, Node: Lflags, Next: Line, Prev: Lcomm, Up: Pseudo Ops + +7.67 `.lflags' +============== + +`as' accepts this directive, for compatibility with other assemblers, +but ignores it. + + +File: as.info, Node: Line, Next: Linkonce, Prev: Lflags, Up: Pseudo Ops + +7.68 `.line LINE-NUMBER' +======================== + + Change the logical line number. LINE-NUMBER must be an absolute +expression. The next line has that logical line number. Therefore any +other statements on the current line (after a statement separator +character) are reported as on logical line number LINE-NUMBER - 1. One +day `as' will no longer support this directive: it is recognized only +for compatibility with existing assembler programs. + + Even though this is a directive associated with the `a.out' or +`b.out' object-code formats, `as' still recognizes it when producing +COFF output, and treats `.line' as though it were the COFF `.ln' _if_ +it is found outside a `.def'/`.endef' pair. + + Inside a `.def', `.line' is, instead, one of the directives used by +compilers to generate auxiliary symbol information for debugging. + + +File: as.info, Node: Linkonce, Next: List, Prev: Line, Up: Pseudo Ops + +7.69 `.linkonce [TYPE]' +======================= + +Mark the current section so that the linker only includes a single copy +of it. This may be used to include the same section in several +different object files, but ensure that the linker will only include it +once in the final output file. The `.linkonce' pseudo-op must be used +for each instance of the section. Duplicate sections are detected +based on the section name, so it should be unique. + + This directive is only supported by a few object file formats; as of +this writing, the only object file format which supports it is the +Portable Executable format used on Windows NT. + + The TYPE argument is optional. If specified, it must be one of the +following strings. For example: + .linkonce same_size + Not all types may be supported on all object file formats. + +`discard' + Silently discard duplicate sections. This is the default. + +`one_only' + Warn if there are duplicate sections, but still keep only one copy. + +`same_size' + Warn if any of the duplicates have different sizes. + +`same_contents' + Warn if any of the duplicates do not have exactly the same + contents. + + +File: as.info, Node: Ln, Next: LNS directives, Prev: List, Up: Pseudo Ops + +7.70 `.ln LINE-NUMBER' +====================== + +`.ln' is a synonym for `.line'. + + +File: as.info, Node: MRI, Next: Noaltmacro, Prev: Macro, Up: Pseudo Ops + +7.71 `.mri VAL' +=============== + +If VAL is non-zero, this tells `as' to enter MRI mode. If VAL is zero, +this tells `as' to exit MRI mode. This change affects code assembled +until the next `.mri' directive, or until the end of the file. *Note +MRI mode: M. + + +File: as.info, Node: List, Next: Ln, Prev: Linkonce, Up: Pseudo Ops + +7.72 `.list' +============ + +Control (in conjunction with the `.nolist' directive) whether or not +assembly listings are generated. These two directives maintain an +internal counter (which is zero initially). `.list' increments the +counter, and `.nolist' decrements it. Assembly listings are generated +whenever the counter is greater than zero. + + By default, listings are disabled. When you enable them (with the +`-a' command line option; *note Command-Line Options: Invoking.), the +initial value of the listing counter is one. + + +File: as.info, Node: Long, Next: Macro, Prev: LNS directives, Up: Pseudo Ops + +7.73 `.long EXPRESSIONS' +======================== + +`.long' is the same as `.int'. *Note `.int': Int. + + +File: as.info, Node: Macro, Next: MRI, Prev: Long, Up: Pseudo Ops + +7.74 `.macro' +============= + +The commands `.macro' and `.endm' allow you to define macros that +generate assembly output. For example, this definition specifies a +macro `sum' that puts a sequence of numbers into memory: + + .macro sum from=0, to=5 + .long \from + .if \to-\from + sum "(\from+1)",\to + .endif + .endm + +With that definition, `SUM 0,5' is equivalent to this assembly input: + + .long 0 + .long 1 + .long 2 + .long 3 + .long 4 + .long 5 + +`.macro MACNAME' +`.macro MACNAME MACARGS ...' + Begin the definition of a macro called MACNAME. If your macro + definition requires arguments, specify their names after the macro + name, separated by commas or spaces. You can qualify the macro + argument to indicate whether all invocations must specify a + non-blank value (through `:`req''), or whether it takes all of the + remaining arguments (through `:`vararg''). You can supply a + default value for any macro argument by following the name with + `=DEFLT'. You cannot define two macros with the same MACNAME + unless it has been subject to the `.purgem' directive (*note + Purgem::) between the two definitions. For example, these are all + valid `.macro' statements: + + `.macro comm' + Begin the definition of a macro called `comm', which takes no + arguments. + + `.macro plus1 p, p1' + `.macro plus1 p p1' + Either statement begins the definition of a macro called + `plus1', which takes two arguments; within the macro + definition, write `\p' or `\p1' to evaluate the arguments. + + `.macro reserve_str p1=0 p2' + Begin the definition of a macro called `reserve_str', with two + arguments. The first argument has a default value, but not + the second. After the definition is complete, you can call + the macro either as `reserve_str A,B' (with `\p1' evaluating + to A and `\p2' evaluating to B), or as `reserve_str ,B' (with + `\p1' evaluating as the default, in this case `0', and `\p2' + evaluating to B). + + `.macro m p1:req, p2=0, p3:vararg' + Begin the definition of a macro called `m', with at least + three arguments. The first argument must always have a value + specified, but not the second, which instead has a default + value. The third formal will get assigned all remaining + arguments specified at invocation time. + + When you call a macro, you can specify the argument values + either by position, or by keyword. For example, `sum 9,17' + is equivalent to `sum to=17, from=9'. + + + Note that since each of the MACARGS can be an identifier exactly + as any other one permitted by the target architecture, there may be + occasional problems if the target hand-crafts special meanings to + certain characters when they occur in a special position. For + example, if the colon (`:') is generally permitted to be part of a + symbol name, but the architecture specific code special-cases it + when occurring as the final character of a symbol (to denote a + label), then the macro parameter replacement code will have no way + of knowing that and consider the whole construct (including the + colon) an identifier, and check only this identifier for being the + subject to parameter substitution. So for example this macro + definition: + + .macro label l + \l: + .endm + + might not work as expected. Invoking `label foo' might not create + a label called `foo' but instead just insert the text `\l:' into + the assembler source, probably generating an error about an + unrecognised identifier. + + Similarly problems might occur with the period character (`.') + which is often allowed inside opcode names (and hence identifier + names). So for example constructing a macro to build an opcode + from a base name and a length specifier like this: + + .macro opcode base length + \base.\length + .endm + + and invoking it as `opcode store l' will not create a `store.l' + instruction but instead generate some kind of error as the + assembler tries to interpret the text `\base.\length'. + + There are several possible ways around this problem: + + `Insert white space' + If it is possible to use white space characters then this is + the simplest solution. eg: + + .macro label l + \l : + .endm + + `Use `\()'' + The string `\()' can be used to separate the end of a macro + argument from the following text. eg: + + .macro opcode base length + \base\().\length + .endm + + `Use the alternate macro syntax mode' + In the alternative macro syntax mode the ampersand character + (`&') can be used as a separator. eg: + + .altmacro + .macro label l + l&: + .endm + + Note: this problem of correctly identifying string parameters to + pseudo ops also applies to the identifiers used in `.irp' (*note + Irp::) and `.irpc' (*note Irpc::) as well. + +`.endm' + Mark the end of a macro definition. + +`.exitm' + Exit early from the current macro definition. + +`\@' + `as' maintains a counter of how many macros it has executed in + this pseudo-variable; you can copy that number to your output with + `\@', but _only within a macro definition_. + +`LOCAL NAME [ , ... ]' + _Warning: `LOCAL' is only available if you select "alternate macro + syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro': + Altmacro. + + +File: as.info, Node: Altmacro, Next: Ascii, Prev: Align, Up: Pseudo Ops + +7.75 `.altmacro' +================ + +Enable alternate macro mode, enabling: + +`LOCAL NAME [ , ... ]' + One additional directive, `LOCAL', is available. It is used to + generate a string replacement for each of the NAME arguments, and + replace any instances of NAME in each macro expansion. The + replacement string is unique in the assembly, and different for + each separate macro expansion. `LOCAL' allows you to write macros + that define symbols, without fear of conflict between separate + macro expansions. + +`String delimiters' + You can write strings delimited in these other ways besides + `"STRING"': + + `'STRING'' + You can delimit strings with single-quote characters. + + `' + You can delimit strings with matching angle brackets. + +`single-character string escape' + To include any single character literally in a string (even if the + character would otherwise have some special meaning), you can + prefix the character with `!' (an exclamation mark). For example, + you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 > + 5.4!'. + +`Expression results as strings' + You can write `%EXPR' to evaluate the expression EXPR and use the + result as a string. + + +File: as.info, Node: Noaltmacro, Next: Nolist, Prev: MRI, Up: Pseudo Ops + +7.76 `.noaltmacro' +================== + +Disable alternate macro mode. *Note Altmacro::. + + +File: as.info, Node: Nolist, Next: Octa, Prev: Noaltmacro, Up: Pseudo Ops + +7.77 `.nolist' +============== + +Control (in conjunction with the `.list' directive) whether or not +assembly listings are generated. These two directives maintain an +internal counter (which is zero initially). `.list' increments the +counter, and `.nolist' decrements it. Assembly listings are generated +whenever the counter is greater than zero. + + +File: as.info, Node: Octa, Next: Org, Prev: Nolist, Up: Pseudo Ops + +7.78 `.octa BIGNUMS' +==================== + +This directive expects zero or more bignums, separated by commas. For +each bignum, it emits a 16-byte integer. + + The term "octa" comes from contexts in which a "word" is two bytes; +hence _octa_-word for 16 bytes. + + +File: as.info, Node: Org, Next: P2align, Prev: Octa, Up: Pseudo Ops + +7.79 `.org NEW-LC , FILL' +========================= + +Advance the location counter of the current section to NEW-LC. NEW-LC +is either an absolute expression or an expression with the same section +as the current subsection. That is, you can't use `.org' to cross +sections: if NEW-LC has the wrong section, the `.org' directive is +ignored. To be compatible with former assemblers, if the section of +NEW-LC is absolute, `as' issues a warning, then pretends the section of +NEW-LC is the same as the current subsection. + + `.org' may only increase the location counter, or leave it +unchanged; you cannot use `.org' to move the location counter backwards. + + Because `as' tries to assemble programs in one pass, NEW-LC may not +be undefined. If you really detest this restriction we eagerly await a +chance to share your improved assembler. + + Beware that the origin is relative to the start of the section, not +to the start of the subsection. This is compatible with other people's +assemblers. + + When the location counter (of the current subsection) is advanced, +the intervening bytes are filled with FILL which should be an absolute +expression. If the comma and FILL are omitted, FILL defaults to zero. + + +File: as.info, Node: P2align, Next: PopSection, Prev: Org, Up: Pseudo Ops + +7.80 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR' +================================================ + +Pad the location counter (in the current subsection) to a particular +storage boundary. The first expression (which must be absolute) is the +number of low-order zero bits the location counter must have after +advancement. For example `.p2align 3' advances the location counter +until it a multiple of 8. If the location counter is already a +multiple of 8, no change is needed. + + The second expression (also absolute) gives the fill value to be +stored in the padding bytes. It (and the comma) may be omitted. If it +is omitted, the padding bytes are normally zero. However, on some +systems, if the section is marked as containing code and the fill value +is omitted, the space is filled with no-op instructions. + + The third expression is also absolute, and is also optional. If it +is present, it is the maximum number of bytes that should be skipped by +this alignment directive. If doing the alignment would require +skipping more bytes than the specified maximum, then the alignment is +not done at all. You can omit the fill value (the second argument) +entirely by simply using two commas after the required alignment; this +can be useful if you want the alignment to be filled with no-op +instructions when appropriate. + + The `.p2alignw' and `.p2alignl' directives are variants of the +`.p2align' directive. The `.p2alignw' directive treats the fill +pattern as a two byte word value. The `.p2alignl' directives treats the +fill pattern as a four byte longword value. For example, `.p2alignw +2,0x368d' will align to a multiple of 4. If it skips two bytes, they +will be filled in with the value 0x368d (the exact placement of the +bytes depends upon the endianness of the processor). If it skips 1 or +3 bytes, the fill value is undefined. + + +File: as.info, Node: Previous, Next: Print, Prev: PopSection, Up: Pseudo Ops + +7.81 `.previous' +================ + +This is one of the ELF section stack manipulation directives. The +others are `.section' (*note Section::), `.subsection' (*note +SubSection::), `.pushsection' (*note PushSection::), and `.popsection' +(*note PopSection::). + + This directive swaps the current section (and subsection) with most +recently referenced section (and subsection) prior to this one. +Multiple `.previous' directives in a row will flip between two sections +(and their subsections). + + In terms of the section stack, this directive swaps the current +section with the top section on the section stack. + + +File: as.info, Node: PopSection, Next: Previous, Prev: P2align, Up: Pseudo Ops + +7.82 `.popsection' +================== + +This is one of the ELF section stack manipulation directives. The +others are `.section' (*note Section::), `.subsection' (*note +SubSection::), `.pushsection' (*note PushSection::), and `.previous' +(*note Previous::). + + This directive replaces the current section (and subsection) with +the top section (and subsection) on the section stack. This section is +popped off the stack. + + +File: as.info, Node: Print, Next: Protected, Prev: Previous, Up: Pseudo Ops + +7.83 `.print STRING' +==================== + +`as' will print STRING on the standard output during assembly. You +must put STRING in double quotes. + + +File: as.info, Node: Protected, Next: Psize, Prev: Print, Up: Pseudo Ops + +7.84 `.protected NAMES' +======================= + +This is one of the ELF visibility directives. The other two are +`.hidden' (*note Hidden::) and `.internal' (*note Internal::). + + This directive overrides the named symbols default visibility (which +is set by their binding: local, global or weak). The directive sets +the visibility to `protected' which means that any references to the +symbols from within the components that defines them must be resolved +to the definition in that component, even if a definition in another +component would normally preempt this. + + +File: as.info, Node: Psize, Next: Purgem, Prev: Protected, Up: Pseudo Ops + +7.85 `.psize LINES , COLUMNS' +============================= + +Use this directive to declare the number of lines--and, optionally, the +number of columns--to use for each page, when generating listings. + + If you do not use `.psize', listings use a default line-count of 60. +You may omit the comma and COLUMNS specification; the default width is +200 columns. + + `as' generates formfeeds whenever the specified number of lines is +exceeded (or whenever you explicitly request one, using `.eject'). + + If you specify LINES as `0', no formfeeds are generated save those +explicitly specified with `.eject'. + + +File: as.info, Node: Purgem, Next: PushSection, Prev: Psize, Up: Pseudo Ops + +7.86 `.purgem NAME' +=================== + +Undefine the macro NAME, so that later uses of the string will not be +expanded. *Note Macro::. + + +File: as.info, Node: PushSection, Next: Quad, Prev: Purgem, Up: Pseudo Ops + +7.87 `.pushsection NAME , SUBSECTION' +===================================== + +This is one of the ELF section stack manipulation directives. The +others are `.section' (*note Section::), `.subsection' (*note +SubSection::), `.popsection' (*note PopSection::), and `.previous' +(*note Previous::). + + This directive pushes the current section (and subsection) onto the +top of the section stack, and then replaces the current section and +subsection with `name' and `subsection'. + + +File: as.info, Node: Quad, Next: Reloc, Prev: PushSection, Up: Pseudo Ops + +7.88 `.quad BIGNUMS' +==================== + +`.quad' expects zero or more bignums, separated by commas. For each +bignum, it emits an 8-byte integer. If the bignum won't fit in 8 +bytes, it prints a warning message; and just takes the lowest order 8 +bytes of the bignum. + + The term "quad" comes from contexts in which a "word" is two bytes; +hence _quad_-word for 8 bytes. + + +File: as.info, Node: Reloc, Next: Rept, Prev: Quad, Up: Pseudo Ops + +7.89 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]' +============================================== + +Generate a relocation at OFFSET of type RELOC_NAME with value +EXPRESSION. If OFFSET is a number, the relocation is generated in the +current section. If OFFSET is an expression that resolves to a symbol +plus offset, the relocation is generated in the given symbol's section. +EXPRESSION, if present, must resolve to a symbol plus addend or to an +absolute value, but note that not all targets support an addend. e.g. +ELF REL targets such as i386 store an addend in the section contents +rather than in the relocation. This low level interface does not +support addends stored in the section. + + +File: as.info, Node: Rept, Next: Sbttl, Prev: Reloc, Up: Pseudo Ops + +7.90 `.rept COUNT' +================== + +Repeat the sequence of lines between the `.rept' directive and the next +`.endr' directive COUNT times. + + For example, assembling + + .rept 3 + .long 0 + .endr + + is equivalent to assembling + + .long 0 + .long 0 + .long 0 + + +File: as.info, Node: Sbttl, Next: Scl, Prev: Rept, Up: Pseudo Ops + +7.91 `.sbttl "SUBHEADING"' +========================== + +Use SUBHEADING as the title (third line, immediately after the title +line) when generating assembly listings. + + This directive affects subsequent pages, as well as the current page +if it appears within ten lines of the top of a page. + + +File: as.info, Node: Scl, Next: Section, Prev: Sbttl, Up: Pseudo Ops + +7.92 `.scl CLASS' +================= + +Set the storage-class value for a symbol. This directive may only be +used inside a `.def'/`.endef' pair. Storage class may flag whether a +symbol is static or external, or it may record further symbolic +debugging information. + + +File: as.info, Node: Section, Next: Set, Prev: Scl, Up: Pseudo Ops + +7.93 `.section NAME' +==================== + +Use the `.section' directive to assemble the following code into a +section named NAME. + + This directive is only supported for targets that actually support +arbitrarily named sections; on `a.out' targets, for example, it is not +accepted, even with a standard `a.out' section name. + +COFF Version +------------ + + For COFF targets, the `.section' directive is used in one of the +following ways: + + .section NAME[, "FLAGS"] + .section NAME[, SUBSEGMENT] + + If the optional argument is quoted, it is taken as flags to use for +the section. Each flag is a single character. The following flags are +recognized: +`b' + bss section (uninitialized data) + +`n' + section is not loaded + +`w' + writable section + +`d' + data section + +`r' + read-only section + +`x' + executable section + +`s' + shared section (meaningful for PE targets) + +`a' + ignored. (For compatibility with the ELF version) + + If no flags are specified, the default flags depend upon the section +name. If the section name is not recognized, the default will be for +the section to be loaded and writable. Note the `n' and `w' flags +remove attributes from the section, rather than adding them, so if they +are used on their own it will be as if no flags had been specified at +all. + + If the optional argument to the `.section' directive is not quoted, +it is taken as a subsegment number (*note Sub-Sections::). + +ELF Version +----------- + + This is one of the ELF section stack manipulation directives. The +others are `.subsection' (*note SubSection::), `.pushsection' (*note +PushSection::), `.popsection' (*note PopSection::), and `.previous' +(*note Previous::). + + For ELF targets, the `.section' directive is used like this: + + .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]] + + The optional FLAGS argument is a quoted string which may contain any +combination of the following characters: +`a' + section is allocatable + +`w' + section is writable + +`x' + section is executable + +`M' + section is mergeable + +`S' + section contains zero terminated strings + +`G' + section is a member of a section group + +`T' + section is used for thread-local-storage + + The optional TYPE argument may contain one of the following +constants: +`@progbits' + section contains data + +`@nobits' + section does not contain data (i.e., section only occupies space) + +`@note' + section contains data which is used by things other than the + program + +`@init_array' + section contains an array of pointers to init functions + +`@fini_array' + section contains an array of pointers to finish functions + +`@preinit_array' + section contains an array of pointers to pre-init functions + + Many targets only support the first three section types. + + Note on targets where the `@' character is the start of a comment (eg +ARM) then another character is used instead. For example the ARM port +uses the `%' character. + + If FLAGS contains the `M' symbol then the TYPE argument must be +specified as well as an extra argument--ENTSIZE--like this: + + .section NAME , "FLAGS"M, @TYPE, ENTSIZE + + Sections with the `M' flag but not `S' flag must contain fixed size +constants, each ENTSIZE octets long. Sections with both `M' and `S' +must contain zero terminated strings where each character is ENTSIZE +bytes long. The linker may remove duplicates within sections with the +same name, same entity size and same flags. ENTSIZE must be an +absolute expression. + + If FLAGS contains the `G' symbol then the TYPE argument must be +present along with an additional field like this: + + .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE] + + The GROUPNAME field specifies the name of the section group to which +this particular section belongs. The optional linkage field can +contain: +`comdat' + indicates that only one copy of this section should be retained + +`.gnu.linkonce' + an alias for comdat + + Note: if both the M and G flags are present then the fields for the +Merge flag should come first, like this: + + .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE] + + If no flags are specified, the default flags depend upon the section +name. If the section name is not recognized, the default will be for +the section to have none of the above flags: it will not be allocated +in memory, nor writable, nor executable. The section will contain data. + + For ELF targets, the assembler supports another type of `.section' +directive for compatibility with the Solaris assembler: + + .section "NAME"[, FLAGS...] + + Note that the section name is quoted. There may be a sequence of +comma separated flags: +`#alloc' + section is allocatable + +`#write' + section is writable + +`#execinstr' + section is executable + +`#tls' + section is used for thread local storage + + This directive replaces the current section and subsection. See the +contents of the gas testsuite directory `gas/testsuite/gas/elf' for +some examples of how this directive and the other section stack +directives work. + + +File: as.info, Node: Set, Next: Short, Prev: Section, Up: Pseudo Ops + +7.94 `.set SYMBOL, EXPRESSION' +============================== + +Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and +type to conform to EXPRESSION. If SYMBOL was flagged as external, it +remains flagged (*note Symbol Attributes::). + + You may `.set' a symbol many times in the same assembly. + + If you `.set' a global symbol, the value stored in the object file +is the last value stored into it. + + The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'. + + On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION' +instead. + + +File: as.info, Node: Short, Next: Single, Prev: Set, Up: Pseudo Ops + +7.95 `.short EXPRESSIONS' +========================= + +`.short' is normally the same as `.word'. *Note `.word': Word. + + In some configurations, however, `.short' and `.word' generate +numbers of different lengths. *Note Machine Dependencies::. + + +File: as.info, Node: Single, Next: Size, Prev: Short, Up: Pseudo Ops + +7.96 `.single FLONUMS' +====================== + +This directive assembles zero or more flonums, separated by commas. It +has the same effect as `.float'. The exact kind of floating point +numbers emitted depends on how `as' is configured. *Note Machine +Dependencies::. + + +File: as.info, Node: Size, Next: Skip, Prev: Single, Up: Pseudo Ops + +7.97 `.size' +============ + +This directive is used to set the size associated with a symbol. + +COFF Version +------------ + + For COFF targets, the `.size' directive is only permitted inside +`.def'/`.endef' pairs. It is used like this: + + .size EXPRESSION + +ELF Version +----------- + + For ELF targets, the `.size' directive is used like this: + + .size NAME , EXPRESSION + + This directive sets the size associated with a symbol NAME. The +size in bytes is computed from EXPRESSION which can make use of label +arithmetic. This directive is typically used to set the size of +function symbols. + + +File: as.info, Node: Sleb128, Next: Space, Prev: Skip, Up: Pseudo Ops + +7.98 `.sleb128 EXPRESSIONS' +=========================== + +SLEB128 stands for "signed little endian base 128." This is a compact, +variable length representation of numbers used by the DWARF symbolic +debugging format. *Note `.uleb128': Uleb128. + + +File: as.info, Node: Skip, Next: Sleb128, Prev: Size, Up: Pseudo Ops + +7.99 `.skip SIZE , FILL' +======================== + +This directive emits SIZE bytes, each of value FILL. Both SIZE and +FILL are absolute expressions. If the comma and FILL are omitted, FILL +is assumed to be zero. This is the same as `.space'. + + +File: as.info, Node: Space, Next: Stab, Prev: Sleb128, Up: Pseudo Ops + +7.100 `.space SIZE , FILL' +========================== + +This directive emits SIZE bytes, each of value FILL. Both SIZE and +FILL are absolute expressions. If the comma and FILL are omitted, FILL +is assumed to be zero. This is the same as `.skip'. + + _Warning:_ `.space' has a completely different meaning for HPPA + targets; use `.block' as a substitute. See `HP9000 Series 800 + Assembly Language Reference Manual' (HP 92432-90001) for the + meaning of the `.space' directive. *Note HPPA Assembler + Directives: HPPA Directives, for a summary. + + +File: as.info, Node: Stab, Next: String, Prev: Space, Up: Pseudo Ops + +7.101 `.stabd, .stabn, .stabs' +============================== + +There are three directives that begin `.stab'. All emit symbols (*note +Symbols::), for use by symbolic debuggers. The symbols are not entered +in the `as' hash table: they cannot be referenced elsewhere in the +source file. Up to five fields are required: + +STRING + This is the symbol's name. It may contain any character except + `\000', so is more general than ordinary symbol names. Some + debuggers used to code arbitrarily complex structures into symbol + names using this field. + +TYPE + An absolute expression. The symbol's type is set to the low 8 + bits of this expression. Any bit pattern is permitted, but `ld' + and debuggers choke on silly bit patterns. + +OTHER + An absolute expression. The symbol's "other" attribute is set to + the low 8 bits of this expression. + +DESC + An absolute expression. The symbol's descriptor is set to the low + 16 bits of this expression. + +VALUE + An absolute expression which becomes the symbol's value. + + If a warning is detected while reading a `.stabd', `.stabn', or +`.stabs' statement, the symbol has probably already been created; you +get a half-formed symbol in your object file. This is compatible with +earlier assemblers! + +`.stabd TYPE , OTHER , DESC' + The "name" of the symbol generated is not even an empty string. + It is a null pointer, for compatibility. Older assemblers used a + null pointer so they didn't waste space in object files with empty + strings. + + The symbol's value is set to the location counter, relocatably. + When your program is linked, the value of this symbol is the + address of the location counter when the `.stabd' was assembled. + +`.stabn TYPE , OTHER , DESC , VALUE' + The name of the symbol is set to the empty string `""'. + +`.stabs STRING , TYPE , OTHER , DESC , VALUE' + All five fields are specified. + + +File: as.info, Node: String, Next: Struct, Prev: Stab, Up: Pseudo Ops + +7.102 `.string' "STR" +===================== + +Copy the characters in STR to the object file. You may specify more +than one string to copy, separated by commas. Unless otherwise +specified for a particular machine, the assembler marks the end of each +string with a 0 byte. You can use any of the escape sequences +described in *Note Strings: Strings. + + +File: as.info, Node: Struct, Next: SubSection, Prev: String, Up: Pseudo Ops + +7.103 `.struct EXPRESSION' +========================== + +Switch to the absolute section, and set the section offset to +EXPRESSION, which must be an absolute expression. You might use this +as follows: + .struct 0 + field1: + .struct field1 + 4 + field2: + .struct field2 + 4 + field3: + This would define the symbol `field1' to have the value 0, the symbol +`field2' to have the value 4, and the symbol `field3' to have the value +8. Assembly would be left in the absolute section, and you would need +to use a `.section' directive of some sort to change to some other +section before further assembly. + + +File: as.info, Node: SubSection, Next: Symver, Prev: Struct, Up: Pseudo Ops + +7.104 `.subsection NAME' +======================== + +This is one of the ELF section stack manipulation directives. The +others are `.section' (*note Section::), `.pushsection' (*note +PushSection::), `.popsection' (*note PopSection::), and `.previous' +(*note Previous::). + + This directive replaces the current subsection with `name'. The +current section is not changed. The replaced subsection is put onto +the section stack in place of the then current top of stack subsection. + + +File: as.info, Node: Symver, Next: Tag, Prev: SubSection, Up: Pseudo Ops + +7.105 `.symver' +=============== + +Use the `.symver' directive to bind symbols to specific version nodes +within a source file. This is only supported on ELF platforms, and is +typically used when assembling files to be linked into a shared library. +There are cases where it may make sense to use this in objects to be +bound into an application itself so as to override a versioned symbol +from a shared library. + + For ELF targets, the `.symver' directive can be used like this: + .symver NAME, NAME2@NODENAME + If the symbol NAME is defined within the file being assembled, the +`.symver' directive effectively creates a symbol alias with the name +NAME2@NODENAME, and in fact the main reason that we just don't try and +create a regular alias is that the @ character isn't permitted in +symbol names. The NAME2 part of the name is the actual name of the +symbol by which it will be externally referenced. The name NAME itself +is merely a name of convenience that is used so that it is possible to +have definitions for multiple versions of a function within a single +source file, and so that the compiler can unambiguously know which +version of a function is being mentioned. The NODENAME portion of the +alias should be the name of a node specified in the version script +supplied to the linker when building a shared library. If you are +attempting to override a versioned symbol from a shared library, then +NODENAME should correspond to the nodename of the symbol you are trying +to override. + + If the symbol NAME is not defined within the file being assembled, +all references to NAME will be changed to NAME2@NODENAME. If no +reference to NAME is made, NAME2@NODENAME will be removed from the +symbol table. + + Another usage of the `.symver' directive is: + .symver NAME, NAME2@@NODENAME + In this case, the symbol NAME must exist and be defined within the +file being assembled. It is similar to NAME2@NODENAME. The difference +is NAME2@@NODENAME will also be used to resolve references to NAME2 by +the linker. + + The third usage of the `.symver' directive is: + .symver NAME, NAME2@@@NODENAME + When NAME is not defined within the file being assembled, it is +treated as NAME2@NODENAME. When NAME is defined within the file being +assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME. + + +File: as.info, Node: Tag, Next: Text, Prev: Symver, Up: Pseudo Ops + +7.106 `.tag STRUCTNAME' +======================= + +This directive is generated by compilers to include auxiliary debugging +information in the symbol table. It is only permitted inside +`.def'/`.endef' pairs. Tags are used to link structure definitions in +the symbol table with instances of those structures. + + +File: as.info, Node: Text, Next: Title, Prev: Tag, Up: Pseudo Ops + +7.107 `.text SUBSECTION' +======================== + +Tells `as' to assemble the following statements onto the end of the +text subsection numbered SUBSECTION, which is an absolute expression. +If SUBSECTION is omitted, subsection number zero is used. + + +File: as.info, Node: Title, Next: Type, Prev: Text, Up: Pseudo Ops + +7.108 `.title "HEADING"' +======================== + +Use HEADING as the title (second line, immediately after the source +file name and pagenumber) when generating assembly listings. + + This directive affects subsequent pages, as well as the current page +if it appears within ten lines of the top of a page. + + +File: as.info, Node: Type, Next: Uleb128, Prev: Title, Up: Pseudo Ops + +7.109 `.type' +============= + +This directive is used to set the type of a symbol. + +COFF Version +------------ + + For COFF targets, this directive is permitted only within +`.def'/`.endef' pairs. It is used like this: + + .type INT + + This records the integer INT as the type attribute of a symbol table +entry. + +ELF Version +----------- + + For ELF targets, the `.type' directive is used like this: + + .type NAME , TYPE DESCRIPTION + + This sets the type of symbol NAME to be either a function symbol or +an object symbol. There are five different syntaxes supported for the +TYPE DESCRIPTION field, in order to provide compatibility with various +other assemblers. + + Because some of the characters used in these syntaxes (such as `@' +and `#') are comment characters for some architectures, some of the +syntaxes below do not work on all architectures. The first variant +will be accepted by the GNU assembler on all architectures so that +variant should be used for maximum portability, if you do not need to +assemble your code with other assemblers. + + The syntaxes supported are: + + .type STT_FUNCTION + .type STT_OBJECT + + .type ,#function + .type ,#object + + .type ,@function + .type ,@object + + .type ,%function + .type ,%object + + .type ,"function" + .type ,"object" + + +File: as.info, Node: Uleb128, Next: Val, Prev: Type, Up: Pseudo Ops + +7.110 `.uleb128 EXPRESSIONS' +============================ + +ULEB128 stands for "unsigned little endian base 128." This is a +compact, variable length representation of numbers used by the DWARF +symbolic debugging format. *Note `.sleb128': Sleb128. + + +File: as.info, Node: Val, Next: Version, Prev: Uleb128, Up: Pseudo Ops + +7.111 `.val ADDR' +================= + +This directive, permitted only within `.def'/`.endef' pairs, records +the address ADDR as the value attribute of a symbol table entry. + + +File: as.info, Node: Version, Next: VTableEntry, Prev: Val, Up: Pseudo Ops + +7.112 `.version "STRING"' +========================= + +This directive creates a `.note' section and places into it an ELF +formatted note of type NT_VERSION. The note's name is set to `string'. + + +File: as.info, Node: VTableEntry, Next: VTableInherit, Prev: Version, Up: Pseudo Ops + +7.113 `.vtable_entry TABLE, OFFSET' +=================================== + +This directive finds or creates a symbol `table' and creates a +`VTABLE_ENTRY' relocation for it with an addend of `offset'. + + +File: as.info, Node: VTableInherit, Next: Warning, Prev: VTableEntry, Up: Pseudo Ops + +7.114 `.vtable_inherit CHILD, PARENT' +===================================== + +This directive finds the symbol `child' and finds or creates the symbol +`parent' and then creates a `VTABLE_INHERIT' relocation for the parent +whose addend is the value of the child symbol. As a special case the +parent name of `0' is treated as referring to the `*ABS*' section. + + +File: as.info, Node: Warning, Next: Weak, Prev: VTableInherit, Up: Pseudo Ops + +7.115 `.warning "STRING"' +========================= + +Similar to the directive `.error' (*note `.error "STRING"': Error.), +but just emits a warning. + + +File: as.info, Node: Weak, Next: Weakref, Prev: Warning, Up: Pseudo Ops + +7.116 `.weak NAMES' +=================== + +This directive sets the weak attribute on the comma separated list of +symbol `names'. If the symbols do not already exist, they will be +created. + + On COFF targets other than PE, weak symbols are a GNU extension. +This directive sets the weak attribute on the comma separated list of +symbol `names'. If the symbols do not already exist, they will be +created. + + On the PE target, weak symbols are supported natively as weak +aliases. When a weak symbol is created that is not an alias, GAS +creates an alternate symbol to hold the default value. + + +File: as.info, Node: Weakref, Next: Word, Prev: Weak, Up: Pseudo Ops + +7.117 `.weakref ALIAS, TARGET' +============================== + +This directive creates an alias to the target symbol that enables the +symbol to be referenced with weak-symbol semantics, but without +actually making it weak. If direct references or definitions of the +symbol are present, then the symbol will not be weak, but if all +references to it are through weak references, the symbol will be marked +as weak in the symbol table. + + The effect is equivalent to moving all references to the alias to a +separate assembly source file, renaming the alias to the symbol in it, +declaring the symbol as weak there, and running a reloadable link to +merge the object files resulting from the assembly of the new source +file and the old source file that had the references to the alias +removed. + + The alias itself never makes to the symbol table, and is entirely +handled within the assembler. + + +File: as.info, Node: Word, Next: Deprecated, Prev: Weakref, Up: Pseudo Ops + +7.118 `.word EXPRESSIONS' +========================= + +This directive expects zero or more EXPRESSIONS, of any section, +separated by commas. + + The size of the number emitted, and its byte order, depend on what +target computer the assembly is for. + + _Warning: Special Treatment to support Compilers_ + + Machines with a 32-bit address space, but that do less than 32-bit +addressing, require the following special treatment. If the machine of +interest to you does 32-bit addressing (or doesn't require it; *note +Machine Dependencies::), you can ignore this issue. + + In order to assemble compiler output into something that works, `as' +occasionally does strange things to `.word' directives. Directives of +the form `.word sym1-sym2' are often emitted by compilers as part of +jump tables. Therefore, when `as' assembles a directive of the form +`.word sym1-sym2', and the difference between `sym1' and `sym2' does +not fit in 16 bits, `as' creates a "secondary jump table", immediately +before the next label. This secondary jump table is preceded by a +short-jump to the first byte after the secondary table. This +short-jump prevents the flow of control from accidentally falling into +the new table. Inside the table is a long-jump to `sym2'. The +original `.word' contains `sym1' minus the address of the long-jump to +`sym2'. + + If there were several occurrences of `.word sym1-sym2' before the +secondary jump table, all of them are adjusted. If there was a `.word +sym3-sym4', that also did not fit in sixteen bits, a long-jump to +`sym4' is included in the secondary jump table, and the `.word' +directives are adjusted to contain `sym3' minus the address of the +long-jump to `sym4'; and so on, for as many entries in the original +jump table as necessary. + + +File: as.info, Node: Deprecated, Prev: Word, Up: Pseudo Ops + +7.119 Deprecated Directives +=========================== + +One day these directives won't work. They are included for +compatibility with older assemblers. +.abort + +.line + + +File: as.info, Node: Machine Dependencies, Next: Reporting Bugs, Prev: Pseudo Ops, Up: Top + +8 Machine Dependent Features +**************************** + +The machine instruction sets are (almost by definition) different on +each machine where `as' runs. Floating point representations vary as +well, and `as' often supports a few additional directives or +command-line options for compatibility with other assemblers on a +particular platform. Finally, some versions of `as' support special +pseudo-instructions for branch optimization. + + This chapter discusses most of these differences, though it does not +include details on any machine's instruction set. For details on that +subject, see the hardware manufacturer's manual. + +* Menu: + + +* Alpha-Dependent:: Alpha Dependent Features + +* ARC-Dependent:: ARC Dependent Features + +* ARM-Dependent:: ARM Dependent Features + +* AVR-Dependent:: AVR Dependent Features + +* BFIN-Dependent:: BFIN Dependent Features + +* CR16-Dependent:: CR16 Dependent Features + +* CRIS-Dependent:: CRIS Dependent Features + +* D10V-Dependent:: D10V Dependent Features + +* D30V-Dependent:: D30V Dependent Features + +* H8/300-Dependent:: Renesas H8/300 Dependent Features + +* HPPA-Dependent:: HPPA Dependent Features + +* ESA/390-Dependent:: IBM ESA/390 Dependent Features + +* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features + +* i860-Dependent:: Intel 80860 Dependent Features + +* i960-Dependent:: Intel 80960 Dependent Features + +* IA-64-Dependent:: Intel IA-64 Dependent Features + +* IP2K-Dependent:: IP2K Dependent Features + +* M32C-Dependent:: M32C Dependent Features + +* M32R-Dependent:: M32R Dependent Features + +* M68K-Dependent:: M680x0 Dependent Features + +* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features + +* MIPS-Dependent:: MIPS Dependent Features + +* MMIX-Dependent:: MMIX Dependent Features + +* MSP430-Dependent:: MSP430 Dependent Features + +* SH-Dependent:: Renesas / SuperH SH Dependent Features +* SH64-Dependent:: SuperH SH64 Dependent Features + +* PDP-11-Dependent:: PDP-11 Dependent Features + +* PJ-Dependent:: picoJava Dependent Features + +* PPC-Dependent:: PowerPC Dependent Features + +* Sparc-Dependent:: SPARC Dependent Features + +* TIC54X-Dependent:: TI TMS320C54x Dependent Features + +* V850-Dependent:: V850 Dependent Features + +* Xtensa-Dependent:: Xtensa Dependent Features + +* Z80-Dependent:: Z80 Dependent Features + +* Z8000-Dependent:: Z8000 Dependent Features + +* Vax-Dependent:: VAX Dependent Features + + +File: as.info, Node: Alpha-Dependent, Next: ARC-Dependent, Up: Machine Dependencies + +8.1 Alpha Dependent Features +============================ + +* Menu: + +* Alpha Notes:: Notes +* Alpha Options:: Options +* Alpha Syntax:: Syntax +* Alpha Floating Point:: Floating Point +* Alpha Directives:: Alpha Machine Directives +* Alpha Opcodes:: Opcodes + + +File: as.info, Node: Alpha Notes, Next: Alpha Options, Up: Alpha-Dependent + +8.1.1 Notes +----------- + +The documentation here is primarily for the ELF object format. `as' +also supports the ECOFF and EVAX formats, but features specific to +these formats are not yet documented. + + +File: as.info, Node: Alpha Options, Next: Alpha Syntax, Prev: Alpha Notes, Up: Alpha-Dependent + +8.1.2 Options +------------- + +`-mCPU' + This option specifies the target processor. If an attempt is made + to assemble an instruction which will not execute on the target + processor, the assembler may either expand the instruction as a + macro or issue an error message. This option is equivalent to the + `.arch' directive. + + The following processor names are recognized: `21064', `21064a', + `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a', + `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6', + `ev67', `ev68'. The special name `all' may be used to allow the + assembler to accept instructions valid for any Alpha processor. + + In order to support existing practice in OSF/1 with respect to + `.arch', and existing practice within `MILO' (the Linux ARC + bootloader), the numbered processor names (e.g. 21064) enable the + processor-specific PALcode instructions, while the + "electro-vlasic" names (e.g. `ev4') do not. + +`-mdebug' +`-no-mdebug' + Enables or disables the generation of `.mdebug' encapsulation for + stabs directives and procedure descriptors. The default is to + automatically enable `.mdebug' when the first stabs directive is + seen. + +`-relax' + This option forces all relocations to be put into the object file, + instead of saving space and resolving some relocations at assembly + time. Note that this option does not propagate all symbol + arithmetic into the object file, because not all symbol arithmetic + can be represented. However, the option can still be useful in + specific applications. + +`-g' + This option is used when the compiler generates debug information. + When `gcc' is using `mips-tfile' to generate debug information + for ECOFF, local labels must be passed through to the object file. + Otherwise this option has no effect. + +`-GSIZE' + A local common symbol larger than SIZE is placed in `.bss', while + smaller symbols are placed in `.sbss'. + +`-F' +`-32addr' + These options are ignored for backward compatibility. + + +File: as.info, Node: Alpha Syntax, Next: Alpha Floating Point, Prev: Alpha Options, Up: Alpha-Dependent + +8.1.3 Syntax +------------ + +The assembler syntax closely follow the Alpha Reference Manual; +assembler directives and general syntax closely follow the OSF/1 and +OpenVMS syntax, with a few differences for ELF. + +* Menu: + +* Alpha-Chars:: Special Characters +* Alpha-Regs:: Register Names +* Alpha-Relocs:: Relocations + + +File: as.info, Node: Alpha-Chars, Next: Alpha-Regs, Up: Alpha Syntax + +8.1.3.1 Special Characters +.......................... + +`#' is the line comment character. + + `;' can be used instead of a newline to separate statements. + + +File: as.info, Node: Alpha-Regs, Next: Alpha-Relocs, Prev: Alpha-Chars, Up: Alpha Syntax + +8.1.3.2 Register Names +...................... + +The 32 integer registers are referred to as `$N' or `$rN'. In +addition, registers 15, 28, 29, and 30 may be referred to by the +symbols `$fp', `$at', `$gp', and `$sp' respectively. + + The 32 floating-point registers are referred to as `$fN'. + + +File: as.info, Node: Alpha-Relocs, Prev: Alpha-Regs, Up: Alpha Syntax + +8.1.3.3 Relocations +................... + +Some of these relocations are available for ECOFF, but mostly only for +ELF. They are modeled after the relocation format introduced in +Digital Unix 4.0, but there are additions. + + The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the +relocation. In some cases NUMBER is used to relate specific +instructions. + + The relocation is placed at the end of the instruction like so: + + ldah $0,a($29) !gprelhigh + lda $0,a($0) !gprellow + ldq $1,b($29) !literal!100 + ldl $2,0($1) !lituse_base!100 + +`!literal' +`!literal!N' + Used with an `ldq' instruction to load the address of a symbol + from the GOT. + + A sequence number N is optional, and if present is used to pair + `lituse' relocations with this `literal' relocation. The `lituse' + relocations are used by the linker to optimize the code based on + the final location of the symbol. + + Note that these optimizations are dependent on the data flow of the + program. Therefore, if _any_ `lituse' is paired with a `literal' + relocation, then _all_ uses of the register set by the `literal' + instruction must also be marked with `lituse' relocations. This + is because the original `literal' instruction may be deleted or + transformed into another instruction. + + Also note that there may be a one-to-many relationship between + `literal' and `lituse', but not a many-to-one. That is, if there + are two code paths that load up the same address and feed the + value to a single use, then the use may not use a `lituse' + relocation. + +`!lituse_base!N' + Used with any memory format instruction (e.g. `ldl') to indicate + that the literal is used for an address load. The offset field of + the instruction must be zero. During relaxation, the code may be + altered to use a gp-relative load. + +`!lituse_jsr!N' + Used with a register branch format instruction (e.g. `jsr') to + indicate that the literal is used for a call. During relaxation, + the code may be altered to use a direct branch (e.g. `bsr'). + +`!lituse_jsrdirect!N' + Similar to `lituse_jsr', but also that this call cannot be vectored + through a PLT entry. This is useful for functions with special + calling conventions which do not allow the normal call-clobbered + registers to be clobbered. + +`!lituse_bytoff!N' + Used with a byte mask instruction (e.g. `extbl') to indicate that + only the low 3 bits of the address are relevant. During + relaxation, the code may be altered to use an immediate instead of + a register shift. + +`!lituse_addr!N' + Used with any other instruction to indicate that the original + address is in fact used, and the original `ldq' instruction may + not be altered or deleted. This is useful in conjunction with + `lituse_jsr' to test whether a weak symbol is defined. + + ldq $27,foo($29) !literal!1 + beq $27,is_undef !lituse_addr!1 + jsr $26,($27),foo !lituse_jsr!1 + +`!lituse_tlsgd!N' + Used with a register branch format instruction to indicate that the + literal is the call to `__tls_get_addr' used to compute the + address of the thread-local storage variable whose descriptor was + loaded with `!tlsgd!N'. + +`!lituse_tlsldm!N' + Used with a register branch format instruction to indicate that the + literal is the call to `__tls_get_addr' used to compute the + address of the base of the thread-local storage block for the + current module. The descriptor for the module must have been + loaded with `!tlsldm!N'. + +`!gpdisp!N' + Used with `ldah' and `lda' to load the GP from the current + address, a-la the `ldgp' macro. The source register for the + `ldah' instruction must contain the address of the `ldah' + instruction. There must be exactly one `lda' instruction paired + with the `ldah' instruction, though it may appear anywhere in the + instruction stream. The immediate operands must be zero. + + bsr $26,foo + ldah $29,0($26) !gpdisp!1 + lda $29,0($29) !gpdisp!1 + +`!gprelhigh' + Used with an `ldah' instruction to add the high 16 bits of a + 32-bit displacement from the GP. + +`!gprellow' + Used with any memory format instruction to add the low 16 bits of a + 32-bit displacement from the GP. + +`!gprel' + Used with any memory format instruction to add a 16-bit + displacement from the GP. + +`!samegp' + Used with any branch format instruction to skip the GP load at the + target address. The referenced symbol must have the same GP as the + source object file, and it must be declared to either not use `$27' + or perform a standard GP load in the first two instructions via the + `.prologue' directive. + +`!tlsgd' +`!tlsgd!N' + Used with an `lda' instruction to load the address of a TLS + descriptor for a symbol in the GOT. + + The sequence number N is optional, and if present it used to pair + the descriptor load with both the `literal' loading the address of + the `__tls_get_addr' function and the `lituse_tlsgd' marking the + call to that function. + + For proper relaxation, both the `tlsgd', `literal' and `lituse' + relocations must be in the same extended basic block. That is, + the relocation with the lowest address must be executed first at + runtime. + +`!tlsldm' +`!tlsldm!N' + Used with an `lda' instruction to load the address of a TLS + descriptor for the current module in the GOT. + + Similar in other respects to `tlsgd'. + +`!gotdtprel' + Used with an `ldq' instruction to load the offset of the TLS + symbol within its module's thread-local storage block. Also known + as the dynamic thread pointer offset or dtp-relative offset. + +`!dtprelhi' +`!dtprello' +`!dtprel' + Like `gprel' relocations except they compute dtp-relative offsets. + +`!gottprel' + Used with an `ldq' instruction to load the offset of the TLS + symbol from the thread pointer. Also known as the tp-relative + offset. + +`!tprelhi' +`!tprello' +`!tprel' + Like `gprel' relocations except they compute tp-relative offsets. + + +File: as.info, Node: Alpha Floating Point, Next: Alpha Directives, Prev: Alpha Syntax, Up: Alpha-Dependent + +8.1.4 Floating Point +-------------------- + +The Alpha family uses both IEEE and VAX floating-point numbers. + + +File: as.info, Node: Alpha Directives, Next: Alpha Opcodes, Prev: Alpha Floating Point, Up: Alpha-Dependent + +8.1.5 Alpha Assembler Directives +-------------------------------- + +`as' for the Alpha supports many additional directives for +compatibility with the native assembler. This section describes them +only briefly. + + These are the additional directives in `as' for the Alpha: + +`.arch CPU' + Specifies the target processor. This is equivalent to the `-mCPU' + command-line option. *Note Options: Alpha Options, for a list of + values for CPU. + +`.ent FUNCTION[, N]' + Mark the beginning of FUNCTION. An optional number may follow for + compatibility with the OSF/1 assembler, but is ignored. When + generating `.mdebug' information, this will create a procedure + descriptor for the function. In ELF, it will mark the symbol as a + function a-la the generic `.type' directive. + +`.end FUNCTION' + Mark the end of FUNCTION. In ELF, it will set the size of the + symbol a-la the generic `.size' directive. + +`.mask MASK, OFFSET' + Indicate which of the integer registers are saved in the current + function's stack frame. MASK is interpreted a bit mask in which + bit N set indicates that register N is saved. The registers are + saved in a block located OFFSET bytes from the "canonical frame + address" (CFA) which is the value of the stack pointer on entry to + the function. The registers are saved sequentially, except that + the return address register (normally `$26') is saved first. + + This and the other directives that describe the stack frame are + currently only used when generating `.mdebug' information. They + may in the future be used to generate DWARF2 `.debug_frame' unwind + information for hand written assembly. + +`.fmask MASK, OFFSET' + Indicate which of the floating-point registers are saved in the + current stack frame. The MASK and OFFSET parameters are + interpreted as with `.mask'. + +`.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]' + Describes the shape of the stack frame. The frame pointer in use + is FRAMEREG; normally this is either `$fp' or `$sp'. The frame + pointer is FRAMEOFFSET bytes below the CFA. The return address is + initially located in RETREG until it is saved as indicated in + `.mask'. For compatibility with OSF/1 an optional ARGOFFSET + parameter is accepted and ignored. It is believed to indicate the + offset from the CFA to the saved argument registers. + +`.prologue N' + Indicate that the stack frame is set up and all registers have been + spilled. The argument N indicates whether and how the function + uses the incoming "procedure vector" (the address of the called + function) in `$27'. 0 indicates that `$27' is not used; 1 + indicates that the first two instructions of the function use `$27' + to perform a load of the GP register; 2 indicates that `$27' is + used in some non-standard way and so the linker cannot elide the + load of the procedure vector during relaxation. + +`.usepv FUNCTION, WHICH' + Used to indicate the use of the `$27' register, similar to + `.prologue', but without the other semantics of needing to be + inside an open `.ent'/`.end' block. + + The WHICH argument should be either `no', indicating that `$27' is + not used, or `std', indicating that the first two instructions of + the function perform a GP load. + + One might use this directive instead of `.prologue' if you are + also using dwarf2 CFI directives. + +`.gprel32 EXPRESSION' + Computes the difference between the address in EXPRESSION and the + GP for the current object file, and stores it in 4 bytes. In + addition to being smaller than a full 8 byte address, this also + does not require a dynamic relocation when used in a shared + library. + +`.t_floating EXPRESSION' + Stores EXPRESSION as an IEEE double precision value. + +`.s_floating EXPRESSION' + Stores EXPRESSION as an IEEE single precision value. + +`.f_floating EXPRESSION' + Stores EXPRESSION as a VAX F format value. + +`.g_floating EXPRESSION' + Stores EXPRESSION as a VAX G format value. + +`.d_floating EXPRESSION' + Stores EXPRESSION as a VAX D format value. + +`.set FEATURE' + Enables or disables various assembler features. Using the positive + name of the feature enables while using `noFEATURE' disables. + + `at' + Indicates that macro expansions may clobber the "assembler + temporary" (`$at' or `$28') register. Some macros may not be + expanded without this and will generate an error message if + `noat' is in effect. When `at' is in effect, a warning will + be generated if `$at' is used by the programmer. + + `macro' + Enables the expansion of macro instructions. Note that + variants of real instructions, such as `br label' vs `br + $31,label' are considered alternate forms and not macros. + + `move' + `reorder' + `volatile' + These control whether and how the assembler may re-order + instructions. Accepted for compatibility with the OSF/1 + assembler, but `as' does not do instruction scheduling, so + these features are ignored. + + The following directives are recognized for compatibility with the +OSF/1 assembler but are ignored. + + .proc .aproc + .reguse .livereg + .option .aent + .ugen .eflag + .alias .noalias + + +File: as.info, Node: Alpha Opcodes, Prev: Alpha Directives, Up: Alpha-Dependent + +8.1.6 Opcodes +------------- + +For detailed information on the Alpha machine instruction set, see the +Alpha Architecture Handbook +(ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf). + + +File: as.info, Node: ARC-Dependent, Next: ARM-Dependent, Prev: Alpha-Dependent, Up: Machine Dependencies + +8.2 ARC Dependent Features +========================== + +* Menu: + +* ARC Options:: Options +* ARC Syntax:: Syntax +* ARC Floating Point:: Floating Point +* ARC Directives:: ARC Machine Directives +* ARC Opcodes:: Opcodes + + +File: as.info, Node: ARC Options, Next: ARC Syntax, Up: ARC-Dependent + +8.2.1 Options +------------- + +`-marc[5|6|7|8]' + This option selects the core processor variant. Using `-marc' is + the same as `-marc6', which is also the default. + + `arc5' + Base instruction set. + + `arc6' + Jump-and-link (jl) instruction. No requirement of an + instruction between setting flags and conditional jump. For + example: + + mov.f r0,r1 + beq foo + + `arc7' + Break (brk) and sleep (sleep) instructions. + + `arc8' + Software interrupt (swi) instruction. + + + Note: the `.option' directive can to be used to select a core + variant from within assembly code. + +`-EB' + This option specifies that the output generated by the assembler + should be marked as being encoded for a big-endian processor. + +`-EL' + This option specifies that the output generated by the assembler + should be marked as being encoded for a little-endian processor - + this is the default. + + + +File: as.info, Node: ARC Syntax, Next: ARC Floating Point, Prev: ARC Options, Up: ARC-Dependent + +8.2.2 Syntax +------------ + +* Menu: + +* ARC-Chars:: Special Characters +* ARC-Regs:: Register Names + + +File: as.info, Node: ARC-Chars, Next: ARC-Regs, Up: ARC Syntax + +8.2.2.1 Special Characters +.......................... + +*TODO* + + +File: as.info, Node: ARC-Regs, Prev: ARC-Chars, Up: ARC Syntax + +8.2.2.2 Register Names +...................... + +*TODO* + + +File: as.info, Node: ARC Floating Point, Next: ARC Directives, Prev: ARC Syntax, Up: ARC-Dependent + +8.2.3 Floating Point +-------------------- + +The ARC core does not currently have hardware floating point support. +Software floating point support is provided by `GCC' and uses IEEE +floating-point numbers. + + +File: as.info, Node: ARC Directives, Next: ARC Opcodes, Prev: ARC Floating Point, Up: ARC-Dependent + +8.2.4 ARC Machine Directives +---------------------------- + +The ARC version of `as' supports the following additional machine +directives: + +`.2byte EXPRESSIONS' + *TODO* + +`.3byte EXPRESSIONS' + *TODO* + +`.4byte EXPRESSIONS' + *TODO* + +`.extAuxRegister NAME,ADDRESS,MODE' + The ARCtangent A4 has extensible auxiliary register space. The + auxiliary registers can be defined in the assembler source code by + using this directive. The first parameter is the NAME of the new + auxiallry register. The second parameter is the ADDRESS of the + register in the auxiliary register memory map for the variant of + the ARC. The third parameter specifies the MODE in which the + register can be operated is and it can be one of: + + `r (readonly)' + + `w (write only)' + + `r|w (read or write)' + + For example: + + .extAuxRegister mulhi,0x12,w + + This specifies an extension auxiliary register called _mulhi_ + which is at address 0x12 in the memory space and which is only + writable. + +`.extCondCode SUFFIX,VALUE' + The condition codes on the ARCtangent A4 are extensible and can be + specified by means of this assembler directive. They are specified + by the suffix and the value for the condition code. They can be + used to specify extra condition codes with any values. For + example: + + .extCondCode is_busy,0x14 + + add.is_busy r1,r2,r3 + bis_busy _main + +`.extCoreRegister NAME,REGNUM,MODE,SHORTCUT' + Specifies an extension core register NAME for the application. + This allows a register NAME with a valid REGNUM between 0 and 60, + with the following as valid values for MODE + + `_r_ (readonly)' + + `_w_ (write only)' + + `_r|w_ (read or write)' + + The other parameter gives a description of the register having a + SHORTCUT in the pipeline. The valid values are: + + `can_shortcut' + + `cannot_shortcut' + + For example: + + .extCoreRegister mlo,57,r,can_shortcut + + This defines an extension core register mlo with the value 57 which + can shortcut the pipeline. + +`.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS' + The ARCtangent A4 allows the user to specify extension + instructions. The extension instructions are not macros. The + assembler creates encodings for use of these instructions + according to the specification by the user. The parameters are: + + *NAME + Name of the extension instruction + + *OPCODE + Opcode to be used. (Bits 27:31 in the encoding). Valid values + 0x10-0x1f or 0x03 + + *SUBOPCODE + Subopcode to be used. Valid values are from 0x09-0x3f. + However the correct value also depends on SYNTAXCLASS + + *SUFFIXCLASS + Determines the kinds of suffixes to be allowed. Valid values + are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which + indicates the absence or presence of conditional suffixes and + flag setting by the extension instruction. It is also + possible to specify that an instruction sets the flags and is + condtional by using `SUFFIX_CODE' | `SUFFIX_FLAG'. + + *SYNTAXCLASS + Determines the syntax class for the instruction. It can have + the following values: + + ``SYNTAX_2OP':' + 2 Operand Instruction + + ``SYNTAX_3OP':' + 3 Operand Instruction + + In addition there could be modifiers for the syntax class as + described below: + + Syntax Class Modifiers are: + + - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP, + specifying that the first operand of a three-operand + instruction must be an immediate (i.e., the result is + discarded). OP1_MUST_BE_IMM is used by bitwise ORing it + with SYNTAX_3OP as given in the example below. This + could usually be used to set the flags using specific + instructions and not retain results. + + - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it + specifies that there is an implied immediate destination + operand which does not appear in the syntax. For + example, if the source code contains an instruction like: + + inst r1,r2 + + it really means that the first argument is an implied + immediate (that is, the result is discarded). This is + the same as though the source code were: inst 0,r1,r2. + You use OP1_IMM_IMPLIED by bitwise ORing it with + SYNTAX_20P. + + + For example, defining 64-bit multiplier with immediate operands: + + .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , + SYNTAX_3OP|OP1_MUST_BE_IMM + + The above specifies an extension instruction called mp64 which has + 3 operands, sets the flags, can be used with a condition code, for + which the first operand is an immediate. (Equivalent to + discarding the result of the operation). + + .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED + + This describes a 2 operand instruction with an implicit first + immediate operand. The result of this operation would be + discarded. + +`.half EXPRESSIONS' + *TODO* + +`.long EXPRESSIONS' + *TODO* + +`.option ARC|ARC5|ARC6|ARC7|ARC8' + The `.option' directive must be followed by the desired core + version. Again `arc' is an alias for `arc6'. + + Note: the `.option' directive overrides the command line option + `-marc'; a warning is emitted when the version is not consistent + between the two - even for the implicit default core version + (arc6). + +`.short EXPRESSIONS' + *TODO* + +`.word EXPRESSIONS' + *TODO* + + + +File: as.info, Node: ARC Opcodes, Prev: ARC Directives, Up: ARC-Dependent + +8.2.5 Opcodes +------------- + +For information on the ARC instruction set, see `ARC Programmers +Reference Manual', ARC International (www.arc.com) + + +File: as.info, Node: ARM-Dependent, Next: AVR-Dependent, Prev: ARC-Dependent, Up: Machine Dependencies + +8.3 ARM Dependent Features +========================== + +* Menu: + +* ARM Options:: Options +* ARM Syntax:: Syntax +* ARM Floating Point:: Floating Point +* ARM Directives:: ARM Machine Directives +* ARM Opcodes:: Opcodes +* ARM Mapping Symbols:: Mapping Symbols + + +File: as.info, Node: ARM Options, Next: ARM Syntax, Up: ARM-Dependent + +8.3.1 Options +------------- + +`-mcpu=PROCESSOR[+EXTENSION...]' + This option specifies the target processor. The assembler will + issue an error message if an attempt is made to assemble an + instruction which will not execute on the target processor. The + following processor names are recognized: `arm1', `arm2', `arm250', + `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', + `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', + `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t', + `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi', + `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1', + `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920', + `arm920t', `arm922t', `arm940t', `arm9tdmi', `arm9e', `arm926e', + `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s', `arm966e-r0', + `arm966e', `arm966e-s', `arm968e-s', `arm10t', `arm10tdmi', + `arm10e', `arm1020', `arm1020t', `arm1020e', `arm1022e', + `arm1026ej-s', `arm1136j-s', `arm1136jf-s', `arm1156t2-s', + `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `mpcore', + `mpcorenovfp', `cortex-a8', `cortex-r4', `cortex-m3', `ep9312' + (ARM920 with Cirrus Maverick coprocessor), `i80200' (Intel XScale + processor) `iwmmxt' (Intel(r) XScale processor with Wireless + MMX(tm) technology coprocessor) and `xscale'. The special name + `all' may be used to allow the assembler to accept instructions + valid for any ARM processor. + + In addition to the basic instruction set, the assembler can be + told to accept various extension mnemonics that extend the + processor using the co-processor instruction space. For example, + `-mcpu=arm920+maverick' is equivalent to specifying + `-mcpu=ep9312'. The following extensions are currently supported: + `+maverick' `+iwmmxt' and `+xscale'. + +`-march=ARCHITECTURE[+EXTENSION...]' + This option specifies the target architecture. The assembler will + issue an error message if an attempt is made to assemble an + instruction which will not execute on the target architecture. + The following architecture names are recognized: `armv1', `armv2', + `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm', + `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te', + `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk', + `armv7', `armv7-a', `armv7-r', `armv7-m', `iwmmxt' and `xscale'. + If both `-mcpu' and `-march' are specified, the assembler will use + the setting for `-mcpu'. + + The architecture option can be extended with the same instruction + set extension options as the `-mcpu' option. + +`-mfpu=FLOATING-POINT-FORMAT' + This option specifies the floating point format to assemble for. + The assembler will issue an error message if an attempt is made to + assemble an instruction which will not execute on the target + floating point unit. The following format options are recognized: + `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11', + `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0', + `vfp9', `vfpxd', `arm1020t', `arm1020e', `arm1136jf-s' and + `maverick'. + + In addition to determining which instructions are assembled, this + option also affects the way in which the `.double' assembler + directive behaves when assembling little-endian code. + + The default is dependent on the processor selected. For + Architecture 5 or later, the default is to assembler for VFP + instructions; for earlier architectures the default is to assemble + for FPA instructions. + +`-mthumb' + This option specifies that the assembler should start assembling + Thumb instructions; that is, it should behave as though the file + starts with a `.code 16' directive. + +`-mthumb-interwork' + This option specifies that the output generated by the assembler + should be marked as supporting interworking. + +`-mapcs `[26|32]'' + This option specifies that the output generated by the assembler + should be marked as supporting the indicated version of the Arm + Procedure. Calling Standard. + +`-matpcs' + This option specifies that the output generated by the assembler + should be marked as supporting the Arm/Thumb Procedure Calling + Standard. If enabled this option will cause the assembler to + create an empty debugging section in the object file called + .arm.atpcs. Debuggers can use this to determine the ABI being + used by. + +`-mapcs-float' + This indicates the floating point variant of the APCS should be + used. In this variant floating point arguments are passed in FP + registers rather than integer registers. + +`-mapcs-reentrant' + This indicates that the reentrant variant of the APCS should be + used. This variant supports position independent code. + +`-mfloat-abi=ABI' + This option specifies that the output generated by the assembler + should be marked as using specified floating point ABI. The + following values are recognized: `soft', `softfp' and `hard'. + +`-meabi=VER' + This option specifies which EABI version the produced object files + should conform to. The following values are recognized: `gnu', `4' + and `5'. + +`-EB' + This option specifies that the output generated by the assembler + should be marked as being encoded for a big-endian processor. + +`-EL' + This option specifies that the output generated by the assembler + should be marked as being encoded for a little-endian processor. + +`-k' + This option specifies that the output of the assembler should be + marked as position-independent code (PIC). + + + +File: as.info, Node: ARM Syntax, Next: ARM Floating Point, Prev: ARM Options, Up: ARM-Dependent + +8.3.2 Syntax +------------ + +* Menu: + +* ARM-Chars:: Special Characters +* ARM-Regs:: Register Names +* ARM-Relocations:: Relocations + + +File: as.info, Node: ARM-Chars, Next: ARM-Regs, Up: ARM Syntax + +8.3.2.1 Special Characters +.......................... + +The presence of a `@' on a line indicates the start of a comment that +extends to the end of the current line. If a `#' appears as the first +character of a line, the whole line is treated as a comment. + + The `;' character can be used instead of a newline to separate +statements. + + Either `#' or `$' can be used to indicate immediate operands. + + *TODO* Explain about /data modifier on symbols. + + +File: as.info, Node: ARM-Regs, Next: ARM-Relocations, Prev: ARM-Chars, Up: ARM Syntax + +8.3.2.2 Register Names +...................... + +*TODO* Explain about ARM register naming, and the predefined names. + + +File: as.info, Node: ARM Floating Point, Next: ARM Directives, Prev: ARM Syntax, Up: ARM-Dependent + +8.3.3 Floating Point +-------------------- + +The ARM family uses IEEE floating-point numbers. + + +File: as.info, Node: ARM-Relocations, Prev: ARM-Regs, Up: ARM Syntax + +8.3.3.1 ARM relocation generation +................................. + +Specific data relocations can be generated by putting the relocation +name in parentheses after the symbol name. For example: + + .word foo(TARGET1) + + This will generate an `R_ARM_TARGET1' relocation against the symbol +FOO. The following relocations are supported: `GOT', `GOTOFF', +`TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `GOTTPOFF' +and `TPOFF'. + + For compatibility with older toolchains the assembler also accepts +`(PLT)' after branch targets. This will generate the deprecated +`R_ARM_PLT32' relocation. + + Relocations for `MOVW' and `MOVT' instructions can be generated by +prefixing the value with `#:lower16:' and `#:upper16' respectively. +For example to load the 32-bit address of foo into r0: + + MOVW r0, #:lower16:foo + MOVT r0, #:upper16:foo + + +File: as.info, Node: ARM Directives, Next: ARM Opcodes, Prev: ARM Floating Point, Up: ARM-Dependent + +8.3.4 ARM Machine Directives +---------------------------- + +`.align EXPRESSION [, EXPRESSION]' + This is the generic .ALIGN directive. For the ARM however if the + first argument is zero (ie no alignment is needed) the assembler + will behave as if the argument had been 2 (ie pad to the next four + byte boundary). This is for compatibility with ARM's own + assembler. + +`NAME .req REGISTER NAME' + This creates an alias for REGISTER NAME called NAME. For example: + + foo .req r0 + +`.unreq ALIAS-NAME' + This undefines a register alias which was previously defined using + the `req', `dn' or `qn' directives. For example: + + foo .req r0 + .unreq foo + + An error occurs if the name is undefined. Note - this pseudo op + can be used to delete builtin in register name aliases (eg 'r0'). + This should only be done if it is really necessary. + +`NAME .dn REGISTER NAME [.TYPE] [[INDEX]]' + +`NAME .qn REGISTER NAME [.TYPE] [[INDEX]]' + The `dn' and `qn' directives are used to create typed and/or + indexed register aliases for use in Advanced SIMD Extension (Neon) + instructions. The former should be used to create aliases of + double-precision registers, and the latter to create aliases of + quad-precision registers. + + If these directives are used to create typed aliases, those + aliases can be used in Neon instructions instead of writing types + after the mnemonic or after each operand. For example: + + x .dn d2.f32 + y .dn d3.f32 + z .dn d4.f32[1] + vmul x,y,z + + This is equivalent to writing the following: + + vmul.f32 d2,d3,d4[1] + + Aliases created using `dn' or `qn' can be destroyed using `unreq'. + +`.code `[16|32]'' + This directive selects the instruction set being generated. The + value 16 selects Thumb, with the value 32 selecting ARM. + +`.thumb' + This performs the same action as .CODE 16. + +`.arm' + This performs the same action as .CODE 32. + +`.force_thumb' + This directive forces the selection of Thumb instructions, even if + the target processor does not support those instructions + +`.thumb_func' + This directive specifies that the following symbol is the name of a + Thumb encoded function. This information is necessary in order to + allow the assembler and linker to generate correct code for + interworking between Arm and Thumb instructions and should be used + even if interworking is not going to be performed. The presence + of this directive also implies `.thumb' + + This directive is not neccessary when generating EABI objects. On + these targets the encoding is implicit when generating Thumb code. + +`.thumb_set' + This performs the equivalent of a `.set' directive in that it + creates a symbol which is an alias for another symbol (possibly + not yet defined). This directive also has the added property in + that it marks the aliased symbol as being a thumb function entry + point, in the same way that the `.thumb_func' directive does. + +`.ltorg' + This directive causes the current contents of the literal pool to + be dumped into the current section (which is assumed to be the + .text section) at the current location (aligned to a word + boundary). `GAS' maintains a separate literal pool for each + section and each sub-section. The `.ltorg' directive will only + affect the literal pool of the current section and sub-section. + At the end of assembly all remaining, un-empty literal pools will + automatically be dumped. + + Note - older versions of `GAS' would dump the current literal pool + any time a section change occurred. This is no longer done, since + it prevents accurate control of the placement of literal pools. + +`.pool' + This is a synonym for .ltorg. + +`.unwind_fnstart' + Marks the start of a function with an unwind table entry. + +`.unwind_fnend' + Marks the end of a function with an unwind table entry. The + unwind index table entry is created when this directive is + processed. + + If no personality routine has been specified then standard + personality routine 0 or 1 will be used, depending on the number + of unwind opcodes required. + +`.cantunwind' + Prevents unwinding through the current function. No personality + routine or exception table data is required or permitted. + +`.personality NAME' + Sets the personality routine for the current function to NAME. + +`.personalityindex INDEX' + Sets the personality routine for the current function to the EABI + standard routine number INDEX + +`.handlerdata' + Marks the end of the current function, and the start of the + exception table entry for that function. Anything between this + directive and the `.fnend' directive will be added to the + exception table entry. + + Must be preceded by a `.personality' or `.personalityindex' + directive. + +`.save REGLIST' + Generate unwinder annotations to restore the registers in REGLIST. + The format of REGLIST is the same as the corresponding + store-multiple instruction. + + _core registers_ + .save {r4, r5, r6, lr} + stmfd sp!, {r4, r5, r6, lr} + _FPA registers_ + .save f4, 2 + sfmfd f4, 2, [sp]! + _VFP registers_ + .save {d8, d9, d10} + fstmdx sp!, {d8, d9, d10} + _iWMMXt registers_ + .save {wr10, wr11} + wstrd wr11, [sp, #-8]! + wstrd wr10, [sp, #-8]! + or + .save wr11 + wstrd wr11, [sp, #-8]! + .save wr10 + wstrd wr10, [sp, #-8]! + +`.vsave VFP-REGLIST' + Generate unwinder annotations to restore the VFP registers in + VFP-REGLIST using FLDMD. Also works for VFPv3 registers that are + to be restored using VLDM. The format of VFP-REGLIST is the same + as the corresponding store-multiple instruction. + + _VFP registers_ + .vsave {d8, d9, d10} + fstmdd sp!, {d8, d9, d10} + _VFPv3 registers_ + .vsave {d15, d16, d17} + vstm sp!, {d15, d16, d17} + + Since FLDMX and FSTMX are now deprecated, this directive should be + used in favour of `.save' for saving VFP registers for ARMv6 and + above. + +`.pad #COUNT' + Generate unwinder annotations for a stack adjustment of COUNT + bytes. A positive value indicates the function prologue allocated + stack space by decrementing the stack pointer. + +`.movsp REG [, #OFFSET]' + Tell the unwinder that REG contains an offset from the current + stack pointer. If OFFSET is not specified then it is assumed to be + zero. + +`.setfp FPREG, SPREG [, #OFFSET]' + Make all unwinder annotations relaive to a frame pointer. Without + this the unwinder will use offsets from the stack pointer. + + The syntax of this directive is the same as the `sub' or `mov' + instruction used to set the frame pointer. SPREG must be either + `sp' or mentioned in a previous `.movsp' directive. + + .movsp ip + mov ip, sp + ... + .setfp fp, ip, #4 + sub fp, ip, #4 + +`.raw OFFSET, BYTE1, ...' + Insert one of more arbitary unwind opcode bytes, which are known + to adjust the stack pointer by OFFSET bytes. + + For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save + {r0}' + +`.cpu NAME' + Select the target processor. Valid values for NAME are the same as + for the `-mcpu' commandline option. + +`.arch NAME' + Select the target architecture. Valid values for NAME are the + same as for the `-march' commandline option. + +`.object_arch NAME' + Override the architecture recorded in the EABI object attribute + section. Valid values for NAME are the same as for the `.arch' + directive. Typically this is useful when code uses runtime + detection of CPU features. + +`.fpu NAME' + Select the floating point unit to assemble for. Valid values for + NAME are the same as for the `-mfpu' commandline option. + +`.eabi_attribute TAG, VALUE' + Set the EABI object attribute number TAG to VALUE. The value is + either a `number', `"string"', or `number, "string"' depending on + the tag. + + + +File: as.info, Node: ARM Opcodes, Next: ARM Mapping Symbols, Prev: ARM Directives, Up: ARM-Dependent + +8.3.5 Opcodes +------------- + +`as' implements all the standard ARM opcodes. It also implements +several pseudo opcodes, including several synthetic load instructions. + +`NOP' + nop + + This pseudo op will always evaluate to a legal ARM instruction + that does nothing. Currently it will evaluate to MOV r0, r0. + +`LDR' + ldr , = + + If expression evaluates to a numeric constant then a MOV or MVN + instruction will be used in place of the LDR instruction, if the + constant can be generated by either of these instructions. + Otherwise the constant will be placed into the nearest literal + pool (if it not already there) and a PC relative LDR instruction + will be generated. + +`ADR' + adr

  • B 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 F{{a5>ilP7j literal 0 HcwPel00001 diff --git a/bfd/po/ro.gmo b/bfd/po/ro.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8621928313f63e511869ba9208f233c78692a777 GIT binary patch literal 69038 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%0ApL8mV6PA)yKm80qwhhYpRwu@sN3urZ) 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 literal 0 HcwPel00001 diff --git a/bfd/po/rw.gmo b/bfd/po/rw.gmo new file mode 100644 index 0000000000000000000000000000000000000000..49d9e2fd45e3653895273f350eef4aab94821463 GIT binary patch literal 429 zcwSYH!A`vp7T& z^iRHIX7=Bmf4@%-KRwa`aY~#MM?}y2)s#3U9*A+n^ImuT7uAiO=fL};iD6)^vEJ00 zH^`8WbN&L>DWhXHD{|Hh!pNWAr+jEZB8~aAM2J~ah!z(e9(GvRj-%$82!$Xce}t8C z|9lY_Z7y0Y6mdj#hkSR^Ay2K;u99eM%$^Wdpjo1_xrB-(wO!6PthcCbF#wLnR4&NO zqE9z*4Of?RKPNZr6iKIdp+DwauU~wuC?f_Wfj>jP@T5 z1K|&iM$nXMv!vJvA9%5>q|%p+B3TD`^_<@D?%uauR)FOrota$eGG^VGLf@O9WbejF F?+1Dxb_W0e literal 0 HcwPel00001 diff --git a/bfd/po/sv.gmo b/bfd/po/sv.gmo new file mode 100644 index 0000000000000000000000000000000000000000..e746ec02e7563ca81ddea6cb6a048da279bf1ded GIT binary patch literal 67266 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 E4-9cTxc~qF literal 0 HcwPel00001 diff --git a/bfd/po/tr.gmo b/bfd/po/tr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..74c0ea8fc2dd2a8c37d0b53df79112dcd1895bc4 GIT binary patch literal 69529 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 DkTt&} literal 0 HcwPel00001 diff --git a/bfd/po/vi.gmo b/bfd/po/vi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f5683c6169d664882e9ee3553ecd6f256310e40a GIT binary patch literal 39617 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