Merge to 2.15 branch.
authorDaniel Jacobowitz <drow@false.org>
Fri, 9 Apr 2004 18:28:17 +0000 (18:28 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 9 Apr 2004 18:28:17 +0000 (18:28 +0000)
105 files changed:
ChangeLog
bfd/ChangeLog
bfd/elf-hppa.h
bfd/elf32-arm.h
bfd/elf32-frv.c
bfd/elf32-hppa.c
bfd/elf32-s390.c
bfd/elf32-sparc.c
bfd/elf64-s390.c
bfd/elflink.h
bfd/elfxx-ia64.c
bfd/elfxx-mips.c
bfd/peXXigen.c
bfd/stabs.c
binutils/ChangeLog
binutils/MAINTAINERS
binutils/ar.c
binutils/arsup.c
binutils/deflex.l
binutils/defparse.y
binutils/dlltool.c
binutils/dlltool.h
binutils/objcopy.c
binutils/readelf.c
binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/ar.exp
config.guess
config.sub
cpu/ChangeLog
gas/ChangeLog
gas/Makefile.in
gas/aclocal.m4
gas/config/obj-elf.c
gas/config/tc-arc.c
gas/config/tc-dlx.c
gas/config/tc-hppa.c
gas/config/tc-ia64.c
gas/config/tc-ia64.h
gas/config/tc-iq2000.c
gas/config/tc-ppc.c
gas/config/tc-s390.c
gas/config/tc-sh.c
gas/configure
gas/doc/Makefile.in
gas/doc/c-hppa.texi
gas/doc/c-sh.texi
gas/dw2gencfi.c
gas/expr.c
gas/read.c
gas/stabs.c
gas/testsuite/ChangeLog
gas/testsuite/gas/alpha/elf-reloc-8.d
gas/testsuite/gas/cfi/cfi-alpha-1.d
gas/testsuite/gas/cfi/cfi-alpha-2.d
gas/testsuite/gas/cfi/cfi-alpha-3.d
gas/testsuite/gas/cfi/cfi-common-1.d
gas/testsuite/gas/cfi/cfi-common-2.d
gas/testsuite/gas/cfi/cfi-common-3.d
gas/testsuite/gas/cfi/cfi-i386.d
gas/testsuite/gas/cfi/cfi-m68k.d
gas/testsuite/gas/cfi/cfi-s390x-1.d
gas/testsuite/gas/cfi/cfi-x86_64.d
gas/testsuite/gas/dlx/alltests.exp
gas/testsuite/gas/dlx/itype.d
gas/testsuite/gas/dlx/lhi.d
gas/testsuite/gas/sh/basic.exp
gas/testsuite/gas/sh/sh64/err-dsp.s
gprof/ChangeLog
gprof/po/sv.po
ld/ChangeLog
ld/emulparams/elf32frvfd.sh
ld/ld.texinfo
ld/ldlang.c
ld/pe-dll.c
ld/po/sv.po
ld/testsuite/ChangeLog
ld/testsuite/ld-frv/fdpic-pie-1.d
ld/testsuite/ld-frv/fdpic-pie-2.d
ld/testsuite/ld-frv/fdpic-pie-6.d
ld/testsuite/ld-frv/fdpic-pie-7.d
ld/testsuite/ld-frv/fdpic-pie-8-fail.d
ld/testsuite/ld-frv/fdpic-pie-8.d
ld/testsuite/ld-frv/fdpic-shared-1.d
ld/testsuite/ld-frv/fdpic-shared-2.d
ld/testsuite/ld-frv/fdpic-shared-3.d
ld/testsuite/ld-frv/fdpic-shared-4.d
ld/testsuite/ld-frv/fdpic-shared-5.d
ld/testsuite/ld-frv/fdpic-shared-6.d
ld/testsuite/ld-frv/fdpic-shared-7.d
ld/testsuite/ld-frv/fdpic-shared-8.d
ld/testsuite/ld-frv/fdpic-shared-local-2.d
ld/testsuite/ld-frv/fdpic-shared-local-8.d
ld/testsuite/ld-frv/fdpic-static-1.d
ld/testsuite/ld-frv/fdpic-static-2.d
ld/testsuite/ld-frv/fdpic-static-6.d
ld/testsuite/ld-frv/fdpic-static-7.d
ld/testsuite/ld-frv/fdpic-static-8.d
ld/testsuite/ld-frv/fdpic.exp
opcodes/ChangeLog
opcodes/m32r-asm.c
opcodes/po/de.po
opcodes/sh-dis.c
opcodes/sh-opc.h
src-release
texinfo/texinfo.tex

index 681247b..09d6b4b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-02-28  Andrew Cagney  <cagney@redhat.com>
+       * src-release (CVS_NAMES): Define.
+       (do-tar, do-tar): Prune $(CVS_NAMES).
+
+       2004-02-23  Andrew Cagney  <cagney@redhat.com>
+       * texinfo/texinfo.tex: Update from version 2003-02-03.16 to
+       2004-02-19.09.
+
+       2004-02-19  Andrew Cagney  <cagney@redhat.com>
+       * config.guess: Update from version 2003-06-12 to 2004-02-16.
+       * config.sub: Update from version 2003-06-13 to 2004-02-16.
+
 2004-02-11  David Edelsohn  <edelsohn@gnu.org>
 
        * configure.in (powerpc-*-aix*): Add target-libada to noconfigdirs.
index bd7064d..b2b7adf 100644 (file)
@@ -1,3 +1,114 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-04-06  Daniel Jacobowitz  <drow@mvista.com>
+       * elfxx-mips.c (MIPS_ELF_STUB_SECTION_NAME): Always use
+       ".MIPS.stubs".
+
+       2004-04-05  H.J. Lu  <hongjiu.lu@intel.com>
+       * elfxx-ia64.c (elfNN_ia64_size_dynamic_sections): Always
+       reserve the memory for dynamic linker
+
+       2004-04-01  Andy Chittenden  <achittenden@bluearc.com>
+       * stabs.c (struct stab_link_includes_totals): Add field 'symb'
+       that keeps the characters in a B_INCL..B_EINCL range.
+       (_bfd_link_section_stabs): When computing the sum of the
+       characters in a B_INCL..B_EINCL range also keep a copy of those
+       characters.  Use this information to distinguish between
+       include sections that have the same sum and the same length
+       but which are nevertheless unique.
+
+       2004-03-31  Andy Chittenden <achittenden@bluearc.com>
+       * stabs.c (struct stab_link_includes_totals): Rename field 'total'
+       to 'sum_chars' and add field 'num_chars'.
+       (_bfd_link_section_stabs): When computing the sum of the
+       characters in a B_INCL..B_EINCL range also keep a count of the
+       number of characters.  Use this information to help distinguish
+       between include sections when have the same sum but which
+       nevertheless are still unique.
+
+       2004-03-31  Mattias EngdegÃ¥rd  <mattias@virtutech.se>
+       * stabs.c (_bfd_link_section_stabs): Do not skip N_EXCL stabs.
+
+       2004-03-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+       * elf32-hppa.c (elf32_hppa_check_relocs): Handle R_PARISC_PCREL32.
+       (final_link_relocate): Likewise.
+
+       2004-03-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+       * elf-hppa.h (elf_hppa_reloc_final_type): Handle selectors for
+       R_PARISC_PCREL32 and R_PARISC_PCREL64 relocations.
+
+       2004-03-17  Nathan Sidwell  <nathan@codesourcery.com>
+       * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Correct
+       logic for null_input_bfd detection.
+
+       2004-03-12  Nick Clifton  <nickc@redhat.com>
+       Dave Murphy  <wintermute2k4@ntlworld.com>
+
+       * elf32-arm.h (elf32_arm_merge_private_bfd_data): Skip most checks
+       if the input bfd does not contain any code.
+
+       2004-03-02  Alexandre Oliva  <aoliva@redhat.com>
+       * elf32-frv.c (struct frv_pic_relocs_info): Added fixups and
+       dynrelocs.
+       (_frv_count_got_plt_entries): Initialize them.
+       (frv_pic_relocs_info_find): Add insert argument.  Adjust all
+       callers.
+       (frv_pic_relocs_info_for_global): Likewise.
+       (frv_pic_relocs_info_for_local): Likewise.
+       (frv_pic_merge_early_relocs_info): New.
+       (_frv_resolve_final_relocs_info): Use it in case one entry maps to
+       another.
+       (_frv_add_dyn_reloc): Add entry argument.  Adjust all callers.
+       Check that we don't exceed the allocated count for entry.
+       (_frv_add_rofixup): Likewise.
+       (_frv_emit_got_relocs_plt_entries): Adjust for coding standards.
+       (elf32_frv_finish_dynamic_sections): Improve error message in case
+       we emit too few rofixup entries.
+
+       2004-02-27  Alexandre Oliva  <aoliva@redhat.com>
+       * elf32-frv.c (elf32_frv_howto_table) <R_FRV_LABEL16>: Set
+       complain_on_overflow to signed.
+
+       2004-02-27  Jakub Jelinek  <jakub@redhat.com>
+       * elf32-s390.c (allocate_dynrelocs): Use SYMBOL_REFERENCES_LOCAL
+       for pc relative relocs.
+       (elf_s390_relocate_section): Likewise.
+       * elf64-s390.c (allocate_dynrelocs): Use SYMBOL_REFERENCES_LOCAL
+       for pc relative relocs.
+       (elf_s390_relocate_section): Likewise.
+
+       2004-02-26  H.J. Lu  <hongjiu.lu@intel.com>
+       * elfxx-ia64.c (elfNN_ia64_check_relocs): Fix call to
+       count_dyn_reloc.
+
+       2004-02-25  H.J. Lu  <hongjiu.lu@intel.com>
+       * elfxx-ia64.c (elfNN_ia64_dyn_reloc_entry): Add the reltext.
+       field to track if a relocation is against readonly section.
+       (count_dyn_reloc): Take a new argument for rent->reltext.
+       (elfNN_ia64_check_relocs): Adjust call to count_dyn_reloc.
+       (get_reloc_section): Don't set ia64_info->reltext here.
+       (allocate_dynrel_entries): Set ia64_info->reltext here.
+
+       2004-02-24  Alexandre Oliva  <aoliva@redhat.com>
+       * elf32-frv.c (FRV_SYM_LOCAL): Weak undefined doesn't imply local.
+       (_frv_emit_got_relocs_plt_entries): Decay relocation to protected
+       function's descriptor to symbol+offset, and map local undefweak
+       symbol to NULL function descriptor.
+       (elf32_frv_relocate_section): Likewise.
+
+       2004-02-23  Jakub Jelinek  <jakub@redhat.com>
+       * elflink.h (size_dynamic_sections): If not adding DT_FLAGS and
+       DF_BIND_NOW is set in info->flags, create DT_BIND_NOW dynamic entry.
+
+       2004-02-21  Danny Smith  <daanysmith@users.sourceforge.net>
+       * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Clear
+       IMAGE_SCN_MEM_WRITE on known sections only.
+
+       2004-02-19  Jakub Jelinek  <jakub@redhat.com>
+       * elf32-sparc.c (elf32_sparc_finish_dynamic_sections): Clear
+       .plt sh_entsize.
+
 2004-04-08  Richard Sandiford  <rsandifo@redhat.com>
 
        * elflink.c: Include libiberty.h.
index b6b01c1..1f79147 100644 (file)
@@ -811,6 +811,28 @@ elf_hppa_reloc_final_type (bfd *abfd,
            }
          break;
 
+       case 32:
+         switch (field)
+           {
+           case e_fsel:
+             final_type = R_PARISC_PCREL32;
+             break;
+           default:
+             return R_PARISC_NONE;
+           }
+         break;
+
+       case 64:
+         switch (field)
+           {
+           case e_fsel:
+             final_type = R_PARISC_PCREL64;
+             break;
+           default:
+             return R_PARISC_NONE;
+           }
+         break;
+
        default:
          return R_PARISC_NONE;
        }
index 63ae488..be634df 100644 (file)
@@ -1,5 +1,6 @@
 /* 32-bit ELF support for ARM
-   Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
@@ -2418,11 +2419,16 @@ elf32_arm_merge_private_bfd_data (ibfd, obfd)
      not, its flags may not have been initialised either, but it
      cannot actually cause any incompatibility.  Do not short-circuit
      dynamic objects; their section list may be emptied by
-     elf_link_add_object_symbols.  */
+    elf_link_add_object_symbols.
 
+    Also check to see if there are no code sections in the input.
+    In this case there is no need to check for code specific flags.
+    XXX - do we need to worry about floating-point format compatability
+    in data sections ?  */
   if (!(ibfd->flags & DYNAMIC))
     {
       bfd_boolean null_input_bfd = TRUE;
+      bfd_boolean only_data_sections = TRUE;
 
       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
        {
@@ -2430,11 +2436,17 @@ elf32_arm_merge_private_bfd_data (ibfd, obfd)
          if (strcmp (sec->name, ".glue_7")
              && strcmp (sec->name, ".glue_7t"))
            {
+             if ((bfd_get_section_flags (ibfd, sec)
+                  & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+                 == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
+               only_data_sections = FALSE;
+
              null_input_bfd = FALSE;
              break;
            }
        }
-      if (null_input_bfd)
+
+      if (null_input_bfd || only_data_sections)
        return TRUE;
     }
 
index bf55314..086d289 100644 (file)
@@ -117,7 +117,7 @@ static reloc_howto_type elf32_frv_howto_table [] =
         16,                    /* bitsize */
         TRUE,                  /* pc_relative */
         0,                     /* bitpos */
-        complain_overflow_bitfield, /* complain_on_overflow */
+        complain_overflow_signed, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_FRV_LABEL16",       /* name */
         FALSE,                 /* partial_inplace */
@@ -659,7 +659,6 @@ frv_elf_link_hash_table_create (bfd *abfd)
 #define FRV_SYM_LOCAL(INFO, H) \
   (_bfd_elf_symbol_refs_local_p ((H), (INFO), 1) \
    || ! elf_hash_table (INFO)->dynamic_sections_created \
-   || (H)->root.type == bfd_link_hash_undefweak \
    || (/* The condition below is an ugly hack to get .scommon data to
          be regarded as local.  For some reason the
          ELF_LINK_HASH_DEF_REGULAR bit is not set on such common
@@ -748,6 +747,10 @@ struct frv_pic_relocs_info
      relocations referencing the symbol.  */
   unsigned relocs32, relocsfd, relocsfdv;
 
+  /* The number of .rofixups entries and dynamic relocations allocated
+     for this symbol, minus any that might have already been used.  */
+  unsigned fixups, dynrelocs;
+
   /* The offsets of the GOT entries assigned to symbol+addend, to the
      function descriptor's address, and to a function descriptor,
      respectively.  Should be zero if unassigned.  The offsets are
@@ -789,10 +792,14 @@ frv_pic_relocs_info_eq (const void *entry1, const void *entry2)
 static struct frv_pic_relocs_info *
 frv_pic_relocs_info_find (struct htab *ht,
                          bfd *abfd,
-                         const struct frv_pic_relocs_info *entry)
+                         const struct frv_pic_relocs_info *entry,
+                         enum insert_option insert)
 {
   struct frv_pic_relocs_info **loc =
-    (struct frv_pic_relocs_info **) htab_find_slot (ht, entry, INSERT);
+    (struct frv_pic_relocs_info **) htab_find_slot (ht, entry, insert);
+
+  if (! loc)
+    return NULL;
 
   if (*loc)
     return *loc;
@@ -818,7 +825,8 @@ inline static struct frv_pic_relocs_info *
 frv_pic_relocs_info_for_global (struct htab *ht,
                                bfd *abfd,
                                struct elf_link_hash_entry *h,
-                               bfd_vma addend)
+                               bfd_vma addend,
+                               enum insert_option insert)
 {
   struct frv_pic_relocs_info entry;
 
@@ -826,7 +834,7 @@ frv_pic_relocs_info_for_global (struct htab *ht,
   entry.d.h = h;
   entry.addend = addend;
 
-  return frv_pic_relocs_info_find (ht, abfd, &entry);
+  return frv_pic_relocs_info_find (ht, abfd, &entry, insert);
 }
 
 /* Obtain the address of the entry in HT associated with the SYMNDXth
@@ -836,7 +844,8 @@ inline static struct frv_pic_relocs_info *
 frv_pic_relocs_info_for_local (struct htab *ht,
                               bfd *abfd,
                               long symndx,
-                              bfd_vma addend)
+                              bfd_vma addend,
+                              enum insert_option insert)
 {
   struct frv_pic_relocs_info entry;
 
@@ -844,7 +853,59 @@ frv_pic_relocs_info_for_local (struct htab *ht,
   entry.d.abfd = abfd;
   entry.addend = addend;
 
-  return frv_pic_relocs_info_find (ht, abfd, &entry);
+  return frv_pic_relocs_info_find (ht, abfd, &entry, insert);
+}
+
+/* Merge fields set by check_relocs() of two entries that end up being
+   mapped to the same (presumably global) symbol.  */
+
+inline static void
+frv_pic_merge_early_relocs_info (struct frv_pic_relocs_info *e2,
+                                struct frv_pic_relocs_info const *e1)
+{
+  e2->got12 |= e1->got12;
+  e2->gotlos |= e1->gotlos;
+  e2->gothilo |= e1->gothilo;
+  e2->fd |= e1->fd;
+  e2->fdgot12 |= e1->fdgot12;
+  e2->fdgotlos |= e1->fdgotlos;
+  e2->fdgothilo |= e1->fdgothilo;
+  e2->fdgoff12 |= e1->fdgoff12;
+  e2->fdgofflos |= e1->fdgofflos;
+  e2->fdgoffhilo |= e1->fdgoffhilo;
+  e2->gotoff |= e1->gotoff;
+  e2->call |= e1->call;
+  e2->sym |= e1->sym;
+
+#if 0
+  /* These are set in _frv_count_got_plt_entries() or later, and this
+     function is only called in _frv_resolve_final_relocs_info(), that
+     runs just before it, so we don't have to worry about the fields
+     below.  */
+
+  e2->plt |= e1->plt;
+  e2->privfd |= e1->privfd;
+  e2->lazyplt |= e1->lazyplt;
+  e2->done |= e1->done;
+
+  e2->relocs32 += e1->relocs32;
+  e2->relocsfd += e1->relocsfd;
+  e2->relocsfdv += e1->relocsfdv;
+  e2->fixups += e1->fixups;
+  e2->dynrelocs += e1->dynrelocs;
+
+  if (abs (e1->got_entry) < abs (e2->got_entry))
+    e2->got_entry = e1->got_entry;
+  if (abs (e1->fdgot_entry) < abs (e2->fdgot_entry))
+    e2->fdgot_entry = e1->fdgot_entry;
+  if (abs (e1->fd_entry) < abs (e2->fd_entry))
+    e2->fd_entry = e1->fd_entry;
+
+  if (e1->plt_entry < e2->plt_entry)
+    e2->plt_entry = e1->plt_entry;
+  if (e1->lzplt_entry < e2->lzplt_entry)
+    e2->lzplt_entry = e1->lzplt_entry;
+#endif
 }
 
 /* Every block of 65535 lazy PLT entries shares a single call to the
@@ -859,7 +920,8 @@ frv_pic_relocs_info_for_local (struct htab *ht,
 
 inline static bfd_vma
 _frv_add_dyn_reloc (bfd *output_bfd, asection *sreloc, bfd_vma offset,
-                   int reloc_type, long dynindx, bfd_vma addend)
+                   int reloc_type, long dynindx, bfd_vma addend,
+                   struct frv_pic_relocs_info *entry)
 {
   Elf_Internal_Rela outrel;
   bfd_vma reloc_offset;
@@ -874,13 +936,17 @@ _frv_add_dyn_reloc (bfd *output_bfd, asection *sreloc, bfd_vma offset,
                            sreloc->contents + reloc_offset);
   sreloc->reloc_count++;
 
+  BFD_ASSERT (entry->dynrelocs > 0);
+  entry->dynrelocs--;
+
   return reloc_offset;
 }
 
 /* Add a fixup to the ROFIXUP section.  */
 
 static bfd_vma
-_frv_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset)
+_frv_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset,
+                 struct frv_pic_relocs_info *entry)
 {
   bfd_vma fixup_offset;
 
@@ -894,7 +960,13 @@ _frv_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset)
       bfd_put_32 (output_bfd, offset, rofixup->contents + fixup_offset);
     }
   rofixup->reloc_count++;
-             
+
+  if (entry)
+    {
+      BFD_ASSERT (entry->fixups > 0);
+      entry->fixups--;
+    }
+
   return fixup_offset;
 }
 
@@ -999,13 +1071,13 @@ _frv_emit_got_relocs_plt_entries (struct frv_pic_relocs_info *entry,
        {
          if (sec)
            ad += sec->output_section->vma;
-         if (entry->symndx != -1 ||
-             entry->d.h->root.type != bfd_link_hash_undefweak)
+         if (entry->symndx != -1
+             || entry->d.h->root.type != bfd_link_hash_undefweak)
            _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
                              frv_got_section (info)->output_section->vma
                              + frv_got_section (info)->output_offset
                              + frv_got_initial_offset (info)
-                             + entry->got_entry);
+                             + entry->got_entry, entry);
        }
       else
        _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
@@ -1016,7 +1088,7 @@ _frv_emit_got_relocs_plt_entries (struct frv_pic_relocs_info *entry,
                             + entry->got_entry)
                            + frv_got_section (info)->output_section->vma
                            + frv_got_section (info)->output_offset,
-                           R_FRV_32, idx, ad);
+                           R_FRV_32, idx, ad, entry);
        
       bfd_put_32 (output_bfd, ad,
                  frv_got_section (info)->contents
@@ -1029,65 +1101,79 @@ _frv_emit_got_relocs_plt_entries (struct frv_pic_relocs_info *entry,
   if (entry->fdgot_entry)
     {
       int reloc, idx;
-      bfd_vma ad;
+      bfd_vma ad = 0;
       
-      /* If the symbol is dynamic and there may be dynamic symbol
-        resolution because we are or are linked with a shared
-        library, emit a FUNCDESC relocation such that the dynamic
-        linker will allocate the function descriptor.  */
-      if (entry->symndx == -1 && ! FRV_FUNCDESC_LOCAL (info, entry->d.h))
-       {
-         reloc = R_FRV_FUNCDESC;
-         idx = dynindx;
-         ad = addend;
-         if (ad)
-           return FALSE;
-       }
-      else
-       {
-         /* Otherwise, we know we have a private function descriptor,
-            so reference it directly.  */
-         if (elf_hash_table (info)->dynamic_sections_created)
-           BFD_ASSERT (entry->privfd);
-         reloc = R_FRV_32;
-         idx = elf_section_data (frv_got_section (info)->output_section)
-           ->dynindx;
-         ad = frv_got_section (info)->output_offset +
-           frv_got_initial_offset (info) + entry->fd_entry;
-       }
-
-      /* If there is room for dynamic symbol resolution, emit the
-        dynamic relocation.  However, if we're linking an executable
-        at a fixed location, we won't have emitted a dynamic symbol
-        entry for the got section, so idx will be zero, which means
-        we can and should compute the address of the private
-        descriptor ourselves.  */
-      if (info->executable && !info->pie
-         && (entry->symndx != -1 || FRV_FUNCDESC_LOCAL (info, entry->d.h)))
+      if (! (entry->symndx == -1
+            && entry->d.h->root.type == bfd_link_hash_undefweak
+            && FRV_SYM_LOCAL (info, entry->d.h)))
        {
-         if (entry->symndx == -1
-             && entry->d.h->root.type == bfd_link_hash_undefweak)
-           ad = 0;
+         /* If the symbol is dynamic and there may be dynamic symbol
+            resolution because we are, or are linked with, a shared
+            library, emit a FUNCDESC relocation such that the dynamic
+            linker will allocate the function descriptor.  If the
+            symbol needs a non-local function descriptor but binds
+            locally (e.g., its visibility is protected, emit a
+            dynamic relocation decayed to section+offset.  */
+         if (entry->symndx == -1 && ! FRV_FUNCDESC_LOCAL (info, entry->d.h)
+             && FRV_SYM_LOCAL (info, entry->d.h)
+             && !(info->executable && !info->pie))
+           {
+             reloc = R_FRV_FUNCDESC;
+             idx = elf_section_data (entry->d.h->root.u.def.section
+                                     ->output_section)->dynindx;
+             ad = entry->d.h->root.u.def.section->output_offset
+               + entry->d.h->root.u.def.value;
+           }
+         else if (entry->symndx == -1
+                  && ! FRV_FUNCDESC_LOCAL (info, entry->d.h))
+           {
+             reloc = R_FRV_FUNCDESC;
+             idx = dynindx;
+             ad = addend;
+             if (ad)
+               return FALSE;
+           }
          else
            {
+             /* Otherwise, we know we have a private function descriptor,
+                so reference it directly.  */
+             if (elf_hash_table (info)->dynamic_sections_created)
+               BFD_ASSERT (entry->privfd);
+             reloc = R_FRV_32;
+             idx = elf_section_data (frv_got_section (info)
+                                     ->output_section)->dynindx;
+             ad = frv_got_section (info)->output_offset
+               + frv_got_initial_offset (info) + entry->fd_entry;
+           }
+
+         /* If there is room for dynamic symbol resolution, emit the
+            dynamic relocation.  However, if we're linking an
+            executable at a fixed location, we won't have emitted a
+            dynamic symbol entry for the got section, so idx will be
+            zero, which means we can and should compute the address
+            of the private descriptor ourselves.  */
+         if (info->executable && !info->pie
+             && (entry->symndx != -1
+                 || FRV_FUNCDESC_LOCAL (info, entry->d.h)))
+           {
              ad += frv_got_section (info)->output_section->vma;
              _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
                                frv_got_section (info)->output_section->vma
                                + frv_got_section (info)->output_offset
                                + frv_got_initial_offset (info)
-                               + entry->fdgot_entry);
+                               + entry->fdgot_entry, entry);
            }
+         else
+           _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
+                               _bfd_elf_section_offset
+                               (output_bfd, info,
+                                frv_got_section (info),
+                                frv_got_initial_offset (info)
+                                + entry->fdgot_entry)
+                               + frv_got_section (info)->output_section->vma
+                               + frv_got_section (info)->output_offset,
+                               reloc, idx, ad, entry);
        }
-      else
-       _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
-                           _bfd_elf_section_offset
-                           (output_bfd, info,
-                            frv_got_section (info),
-                            frv_got_initial_offset (info)
-                            + entry->fdgot_entry)
-                           + frv_got_section (info)->output_section->vma
-                           + frv_got_section (info)->output_offset,
-                           reloc, idx, ad);
 
       bfd_put_32 (output_bfd, ad,
                  frv_got_section (info)->contents
@@ -1128,19 +1214,19 @@ _frv_emit_got_relocs_plt_entries (struct frv_pic_relocs_info *entry,
          if (sec)
            ad += sec->output_section->vma;
          ofst = 0;
-         if (entry->symndx != -1 ||
-             entry->d.h->root.type != bfd_link_hash_undefweak)
+         if (entry->symndx != -1
+             || entry->d.h->root.type != bfd_link_hash_undefweak)
            {
              _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
                                frv_got_section (info)->output_section->vma
                                + frv_got_section (info)->output_offset
                                + frv_got_initial_offset (info)
-                               + entry->fd_entry);
+                               + entry->fd_entry, entry);
              _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
                                frv_got_section (info)->output_section->vma
                                + frv_got_section (info)->output_offset
                                + frv_got_initial_offset (info)
-                               + entry->fd_entry + 4);
+                               + entry->fd_entry + 4, entry);
            }
        }
       else
@@ -1156,7 +1242,7 @@ _frv_emit_got_relocs_plt_entries (struct frv_pic_relocs_info *entry,
                                 + entry->fd_entry)
                                + frv_got_section (info)->output_section->vma
                                + frv_got_section (info)->output_offset,
-                               R_FRV_FUNCDESC_VALUE, idx, ad);
+                               R_FRV_FUNCDESC_VALUE, idx, ad, entry);
        }
 
       /* If we've omitted the dynamic relocation, just emit the fixed
@@ -1908,14 +1994,14 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
          if (h != NULL)
            picrel = frv_pic_relocs_info_for_global (frv_relocs_info (info),
                                                     input_bfd, h,
-                                                    orig_addend);
+                                                    orig_addend, INSERT);
          else
            /* In order to find the entry we created before, we must
               use the original addend, not the one that may have been
               modified by _bfd_elf_rela_local_sym().  */
            picrel = frv_pic_relocs_info_for_local (frv_relocs_info (info),
                                                    input_bfd, r_symndx,
-                                                   orig_addend);
+                                                   orig_addend, INSERT);
          if (! picrel)
            return FALSE;
 
@@ -2005,88 +2091,104 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            int dynindx;
            bfd_vma addend = rel->r_addend;
 
-           /* If the symbol is dynamic and there may be dynamic
-              symbol resolution because we are or are linked with a
-              shared library, emit a FUNCDESC relocation such that
-              the dynamic linker will allocate the function
-              descriptor.  */
-           if (h && ! FRV_FUNCDESC_LOCAL (info, h))
+           if (! (h && h->root.type == bfd_link_hash_undefweak
+                  && FRV_SYM_LOCAL (info, h)))
              {
-               if (addend)
+               /* If the symbol is dynamic and there may be dynamic
+                  symbol resolution because we are or are linked with a
+                  shared library, emit a FUNCDESC relocation such that
+                  the dynamic linker will allocate the function
+                  descriptor.  If the symbol needs a non-local function
+                  descriptor but binds locally (e.g., its visibility is
+                  protected, emit a dynamic relocation decayed to
+                  section+offset.  */
+               if (h && ! FRV_FUNCDESC_LOCAL (info, h)
+                   && FRV_SYM_LOCAL (info, h)
+                   && !(info->executable && !info->pie))
                  {
-                   info->callbacks->warning
-                     (info, _("R_FRV_FUNCDESC references dynamic symbol with nonzero addend"),
-                      name, input_bfd, input_section, rel->r_offset);
-                   return FALSE;
+                   dynindx = elf_section_data (h->root.u.def.section
+                                               ->output_section)->dynindx;
+                   addend += h->root.u.def.section->output_offset
+                     + h->root.u.def.value;
+                 }
+               else if (h && ! FRV_FUNCDESC_LOCAL (info, h))
+                 {
+                   if (addend)
+                     {
+                       info->callbacks->warning
+                         (info, _("R_FRV_FUNCDESC references dynamic symbol with nonzero addend"),
+                          name, input_bfd, input_section, rel->r_offset);
+                       return FALSE;
+                     }
+                   dynindx = h->dynindx;
+                 }
+               else
+                 {
+                   /* Otherwise, we know we have a private function
+                      descriptor, so reference it directly.  */
+                   BFD_ASSERT (picrel->privfd);
+                   r_type = R_FRV_32;
+                   dynindx = elf_section_data (frv_got_section (info)
+                                               ->output_section)->dynindx;
+                   addend = frv_got_section (info)->output_offset
+                     + frv_got_initial_offset (info)
+                     + picrel->fd_entry;
                  }
-               dynindx = h->dynindx;
-             }
-           else
-             {
-               /* Otherwise, we know we have a private function
-                  descriptor, so reference it directly.  */
-               BFD_ASSERT (picrel->privfd);
-               r_type = R_FRV_32;
-               dynindx = elf_section_data (frv_got_section
-                                           (info)->output_section)->dynindx;
-               addend = frv_got_section (info)->output_offset
-                 + frv_got_initial_offset (info)
-                 + picrel->fd_entry;
-             }
 
-           /* If there is room for dynamic symbol resolution, emit
-              the dynamic relocation.  However, if we're linking an
-              executable at a fixed location, we won't have emitted a
-              dynamic symbol entry for the got section, so idx will
-              be zero, which means we can and should compute the
-              address of the private descriptor ourselves.  */
-           if (info->executable && !info->pie
-               && (!h || FRV_FUNCDESC_LOCAL (info, h)))
-             {
-               addend += frv_got_section (info)->output_section->vma;
-               if ((bfd_get_section_flags (output_bfd,
-                                          input_section->output_section)
-                    & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+               /* If there is room for dynamic symbol resolution, emit
+                  the dynamic relocation.  However, if we're linking an
+                  executable at a fixed location, we won't have emitted a
+                  dynamic symbol entry for the got section, so idx will
+                  be zero, which means we can and should compute the
+                  address of the private descriptor ourselves.  */
+               if (info->executable && !info->pie
+                   && (!h || FRV_FUNCDESC_LOCAL (info, h)))
+                 {
+                   addend += frv_got_section (info)->output_section->vma;
+                   if ((bfd_get_section_flags (output_bfd,
+                                               input_section->output_section)
+                        & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+                     {
+                       if (_frv_osec_readonly_p (output_bfd,
+                                                 input_section->output_section))
+                         {
+                           info->callbacks->warning
+                             (info,
+                              _("cannot emit fixups in read-only section"),
+                              name, input_bfd, input_section, rel->r_offset);
+                           return FALSE;
+                         }
+                       _frv_add_rofixup (output_bfd,
+                                         frv_gotfixup_section (info),
+                                         _bfd_elf_section_offset
+                                         (output_bfd, info,
+                                          input_section, rel->r_offset)
+                                         + input_section->output_section->vma
+                                         + input_section->output_offset,
+                                         picrel);
+                     }
+                 }
+               else if ((bfd_get_section_flags (output_bfd,
+                                                input_section->output_section)
+                         & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
                  {
                    if (_frv_osec_readonly_p (output_bfd,
                                              input_section->output_section))
                      {
                        info->callbacks->warning
                          (info,
-                          _("cannot emit fixups in read-only section"),
+                          _("cannot emit dynamic relocations in read-only section"),
                           name, input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
-                   if (! h || h->root.type != bfd_link_hash_undefweak)
-                     _frv_add_rofixup (output_bfd,
-                                       frv_gotfixup_section (info),
+                   _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
                                        _bfd_elf_section_offset
                                        (output_bfd, info,
                                         input_section, rel->r_offset)
                                        + input_section->output_section->vma
-                                       + input_section->output_offset);
-                 }
-             }
-           else if ((bfd_get_section_flags (output_bfd,
-                                            input_section->output_section)
-                     & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
-             {
-               if (_frv_osec_readonly_p (output_bfd,
-                                         input_section->output_section))
-                 {
-                   info->callbacks->warning
-                     (info,
-                      _("cannot emit dynamic relocations in read-only section"),
-                      name, input_bfd, input_section, rel->r_offset);
-                   return FALSE;
+                                       + input_section->output_offset,
+                                       r_type, dynindx, addend, picrel);
                  }
-               _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
-                                   _bfd_elf_section_offset
-                                   (output_bfd, info,
-                                    input_section, rel->r_offset)
-                                   + input_section->output_section->vma
-                                   + input_section->output_offset,
-                                   r_type, dynindx, addend);
              }
 
            /* We want the addend in-place because dynamic
@@ -2163,7 +2265,8 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                          (output_bfd, info,
                                           input_section, rel->r_offset)
                                          + input_section->output_section->vma
-                                         + input_section->output_offset);
+                                         + input_section->output_offset,
+                                         picrel);
                        if (r_type == R_FRV_FUNCDESC_VALUE)
                          _frv_add_rofixup
                            (output_bfd,
@@ -2172,7 +2275,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                             (output_bfd, info,
                              input_section, rel->r_offset)
                             + input_section->output_section->vma
-                            + input_section->output_offset + 4);
+                            + input_section->output_offset + 4, picrel);
                      }
                  }
              }
@@ -2197,7 +2300,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                         input_section, rel->r_offset)
                                        + input_section->output_section->vma
                                        + input_section->output_offset,
-                                       r_type, dynindx, addend);
+                                       r_type, dynindx, addend, picrel);
                  }
                /* We want the addend in-place because dynamic
                   relocations are REL.  Setting relocation to it
@@ -2777,6 +2880,7 @@ _frv_count_got_plt_entries (void **entryp, void *dinfo_)
 {
   struct frv_pic_relocs_info *entry = *entryp;
   struct _frv_dynamic_got_info *dinfo = dinfo_;
+  unsigned relocs = 0, fixups = 0;
 
   /* Allocate space for a GOT entry pointing to the symbol.  */
   if (entry->got12)
@@ -2833,27 +2937,33 @@ _frv_count_got_plt_entries (void **entryp, void *dinfo_)
     dinfo->lzplt += 8;
 
   if (!dinfo->info->executable || dinfo->info->pie)
-    dinfo->relocs += entry->relocs32 + entry->relocsfd + entry->relocsfdv;
+    relocs = entry->relocs32 + entry->relocsfd + entry->relocsfdv;
   else
     {
       if (entry->symndx != -1 || FRV_SYM_LOCAL (dinfo->info, entry->d.h))
        {
          if (entry->symndx != -1
-             || entry->d.h->root.type != bfd_link_hash_undefweak)        
-           dinfo->fixups += entry->relocs32 + 2 * entry->relocsfdv;
+             || entry->d.h->root.type != bfd_link_hash_undefweak)
+           fixups += entry->relocs32 + 2 * entry->relocsfdv;
        }
       else
-       dinfo->relocs += entry->relocs32 + entry->relocsfdv;
+       relocs += entry->relocs32 + entry->relocsfdv;
+
       if (entry->symndx != -1 || FRV_FUNCDESC_LOCAL (dinfo->info, entry->d.h))
        {
          if (entry->symndx != -1
              || entry->d.h->root.type != bfd_link_hash_undefweak)
-           dinfo->fixups += entry->relocsfd;
+           fixups += entry->relocsfd;
        }
       else
-       dinfo->relocs += entry->relocsfd;
+       relocs += entry->relocsfd;
     }
 
+  entry->dynrelocs += relocs;
+  entry->fixups += fixups;
+  dinfo->relocs += relocs;
+  dinfo->fixups += fixups;
+
   return 1;
 }
 
@@ -3181,6 +3291,7 @@ _frv_resolve_final_relocs_info (void **entryp, void *p)
   if (entry->symndx == -1)
     {
       struct elf_link_hash_entry *h = entry->d.h;
+      struct frv_pic_relocs_info *oentry;
 
       while (h->root.type == bfd_link_hash_indirect
             || h->root.type == bfd_link_hash_warning)
@@ -3189,6 +3300,17 @@ _frv_resolve_final_relocs_info (void **entryp, void *p)
       if (entry->d.h == h)
        return 1;
 
+      oentry = frv_pic_relocs_info_for_global (*htab, 0, h, entry->addend,
+                                              NO_INSERT);
+
+      if (oentry)
+       {
+         /* Merge the two entries.  */
+         frv_pic_merge_early_relocs_info (oentry, entry);
+         htab_clear_slot (*htab, entryp);
+         return 1;
+       }
+
       entry->d.h = h;
 
       /* If we can't find this entry with the new bfd hash, re-insert
@@ -3552,13 +3674,22 @@ elf32_frv_finish_dynamic_sections (bfd *output_bfd,
                + hgot->root.u.def.section->output_offset;
 
              _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
-                               got_value);
+                               got_value, 0);
            }
 
          if (frv_gotfixup_section (info)->_raw_size
              != (frv_gotfixup_section (info)->reloc_count * 4))
            {
-             if (!elf_hash_table (info)->dynamic_sections_created)
+             if (frv_gotfixup_section (info)->_raw_size
+                 < frv_gotfixup_section (info)->reloc_count * 4)
+               {
+                 info->callbacks->warning
+                   (info, "LINKER BUG: .rofixup section size mismatch",
+                    ".rofixup", NULL, NULL, 0);
+                 abort ();
+                 return FALSE;
+               }
+             else if (!elf_hash_table (info)->dynamic_sections_created)
                {
                  info->callbacks->warning
                    (info, "no dynamic sections, missing -melf32frvfd?",
@@ -3851,12 +3982,12 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
              picrel
                = frv_pic_relocs_info_for_global (frv_relocs_info (info),
                                                  abfd, h,
-                                                 rel->r_addend);
+                                                 rel->r_addend, INSERT);
            }
          else
            picrel = frv_pic_relocs_info_for_local (frv_relocs_info (info),
                                                    abfd, r_symndx,
-                                                   rel->r_addend);
+                                                   rel->r_addend, INSERT);
          if (! picrel)
            return FALSE;
          break;
index f6e6a18..54dbb9a 100644 (file)
@@ -1147,12 +1147,13 @@ elf32_hppa_check_relocs (bfd *abfd,
            }
          break;
 
-       case R_PARISC_SEGBASE: /* Used to set segment base.  */
+       case R_PARISC_SEGBASE:  /* Used to set segment base.  */
        case R_PARISC_SEGREL32: /* Relative reloc, used for unwind.  */
        case R_PARISC_PCREL14F: /* PC relative load/store.  */
        case R_PARISC_PCREL14R:
        case R_PARISC_PCREL17R: /* External branches.  */
        case R_PARISC_PCREL21L: /* As above, and for load/store too.  */
+       case R_PARISC_PCREL32:
          /* We don't need to propagate the relocation if linking a
             shared object since these are section relative.  */
          continue;
@@ -3131,6 +3132,7 @@ final_link_relocate (asection *input_section,
     case R_PARISC_PCREL17R:
     case R_PARISC_PCREL14R:
     case R_PARISC_PCREL14F:
+    case R_PARISC_PCREL32:
       /* Make it a pc relative offset.  */
       value -= location;
       addend -= 8;
@@ -3224,6 +3226,7 @@ final_link_relocate (asection *input_section,
     case R_PARISC_DIR17F:
     case R_PARISC_PCREL17C:
     case R_PARISC_PCREL14F:
+    case R_PARISC_PCREL32:
     case R_PARISC_DPREL14F:
     case R_PARISC_PLABEL32:
     case R_PARISC_DLTIND14F:
index 0d6b0bd..074c108 100644 (file)
@@ -1873,9 +1873,7 @@ allocate_dynrelocs (h, inf)
 
   if (info->shared)
     {
-      if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
-         && ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0
-             || info->symbolic))
+      if (SYMBOL_REFERENCES_LOCAL (info, h))
        {
          struct elf_s390_dyn_relocs **pp;
 
@@ -2551,10 +2549,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
                    && r_type != R_390_PC32DBL
                    && r_type != R_390_PC32)
                   || (h != NULL
-                      && h->dynindx != -1
-                      && (! info->symbolic
-                          || (h->elf_link_hash_flags
-                              & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+                      && !SYMBOL_REFERENCES_LOCAL (info, h))))
              || (ELIMINATE_COPY_RELOCS
                  && !info->shared
                  && h != NULL
index 8367bf5..3016652 100644 (file)
@@ -3272,8 +3272,7 @@ elf32_sparc_finish_dynamic_sections (output_bfd, info)
                      splt->contents + splt->_raw_size - 4);
        }
 
-      elf_section_data (splt->output_section)->this_hdr.sh_entsize =
-       PLT_ENTRY_SIZE;
+      elf_section_data (splt->output_section)->this_hdr.sh_entsize = 0;
     }
 
   /* Set the first entry in the global offset table to the address of
index 461dc1b..63a261a 100644 (file)
@@ -1844,9 +1844,7 @@ allocate_dynrelocs (h, inf)
 
   if (info->shared)
     {
-      if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
-         && ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0
-             || info->symbolic))
+      if (SYMBOL_REFERENCES_LOCAL (info, h))
        {
          struct elf_s390_dyn_relocs **pp;
 
@@ -2529,10 +2527,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
                    && r_type != R_390_PC32DBL
                    && r_type != R_390_PC64)
                   || (h != NULL
-                      && h->dynindx != -1
-                      && (! info->symbolic
-                          || (h->elf_link_hash_flags
-                              & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+                      && !SYMBOL_REFERENCES_LOCAL (info, h))))
              || (ELIMINATE_COPY_RELOCS
                  && !info->shared
                  && h != NULL
index c37d739..96d5981 100644 (file)
@@ -2434,6 +2434,11 @@ NAME(bfd_elf,size_dynamic_sections) (bfd *output_bfd,
          if (! elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
            return FALSE;
        }
+      else if (info->flags & DF_BIND_NOW)
+       {
+         if (! elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
+           return FALSE;
+       }
 
       if (info->flags_1)
        {
index ecc6cbd..b19aac2 100644 (file)
@@ -93,6 +93,9 @@ struct elfNN_ia64_dyn_sym_info
     asection *srel;
     int type;
     int count;
+
+    /* Is this reloc against readonly section? */
+    bfd_boolean reltext;
   } *reloc_entries;
 
   /* TRUE when the section contents have been updated.  */
@@ -244,9 +247,6 @@ static asection *get_pltoff
 static asection *get_reloc_section
   PARAMS ((bfd *abfd, struct elfNN_ia64_link_hash_table *ia64_info,
           asection *sec, bfd_boolean create));
-static bfd_boolean count_dyn_reloc
-  PARAMS ((bfd *abfd, struct elfNN_ia64_dyn_sym_info *dyn_i,
-          asection *srel, int type));
 static bfd_boolean elfNN_ia64_check_relocs
   PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *sec,
           const Elf_Internal_Rela *relocs));
@@ -2176,18 +2176,12 @@ get_reloc_section (abfd, ia64_info, sec, create)
        return NULL;
     }
 
-  if (sec->flags & SEC_READONLY)
-    ia64_info->reltext = 1;
-
   return srel;
 }
 
 static bfd_boolean
-count_dyn_reloc (abfd, dyn_i, srel, type)
-     bfd *abfd;
-     struct elfNN_ia64_dyn_sym_info *dyn_i;
-     asection *srel;
-     int type;
+count_dyn_reloc (bfd *abfd, struct elfNN_ia64_dyn_sym_info *dyn_i,
+                asection *srel, int type, bfd_boolean reltext)
 {
   struct elfNN_ia64_dyn_reloc_entry *rent;
 
@@ -2208,6 +2202,7 @@ count_dyn_reloc (abfd, dyn_i, srel, type)
       rent->count = 0;
       dyn_i->reloc_entries = rent;
     }
+  rent->reltext = reltext;
   rent->count++;
 
   return TRUE;
@@ -2492,7 +2487,8 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs)
              if (!srel)
                return FALSE;
            }
-         if (!count_dyn_reloc (abfd, dyn_i, srel, dynrel_type))
+         if (!count_dyn_reloc (abfd, dyn_i, srel, dynrel_type,
+                               (sec->flags & SEC_READONLY) != 0))
            return FALSE;
        }
     }
@@ -2799,6 +2795,8 @@ allocate_dynrel_entries (dyn_i, data)
        default:
          abort ();
        }
+      if (rent->reltext)
+       ia64_info->reltext = 1;
       rent->srel->_raw_size += sizeof (ElfNN_External_Rela) * count;
     }
 
@@ -2943,8 +2941,12 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info)
   data.ofs = (data.ofs + 31) & (bfd_vma) -32;
 
   elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_plt2_entries, &data);
-  if (data.ofs != 0)
+  if (data.ofs != 0 || ia64_info->root.dynamic_sections_created)
     {
+      /* FIXME: we always reserve the memory for dynamic linker even if
+        there are no PLT entries since dynamic linker may assume the
+        reserved memory always exists.  */
+
       BFD_ASSERT (ia64_info->root.dynamic_sections_created);
 
       ia64_info->plt_sec->_raw_size = data.ofs;
index 69846b8..8fb20d8 100644 (file)
@@ -530,8 +530,7 @@ static bfd *reldyn_sorting_bfd;
   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
 
 /* The name of the stub section.  */
-#define MIPS_ELF_STUB_SECTION_NAME(abfd) \
-  (NEWABI_P (abfd) ? ".MIPS.stubs" : ".stub")
+#define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
 
 /* The size of an external REL relocation.  */
 #define MIPS_ELF_REL_SIZE(abfd) \
@@ -9019,10 +9018,10 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
          which are automatically generated by gas.  */
       if (strcmp (sec->name, ".reginfo")
          && strcmp (sec->name, ".mdebug")
-         && ((!strcmp (sec->name, ".text")
-              || !strcmp (sec->name, ".data")
-              || !strcmp (sec->name, ".bss"))
-             && sec->_raw_size != 0))
+         && (sec->_raw_size != 0
+             || (strcmp (sec->name, ".text")
+                 && strcmp (sec->name, ".data")
+                 && strcmp (sec->name, ".bss"))))
        {
          null_input_bfd = FALSE;
          break;
index 559f2a2..598aa7c 100644 (file)
@@ -992,14 +992,13 @@ _bfd_XXi_swap_scnhdr_out (abfd, in, out)
        default WP_TEXT file flag has been cleared.  WP_TEXT may be cleared
        by ld --enable-auto-import (if auto-import is actually needed),
        by ld --omagic, or by obcopy --writable-text.  */
-  
-    if (strcmp (scnhdr_int->s_name, ".text") 
-       || (bfd_get_file_flags (abfd) & WP_TEXT))
-      flags &= ~IMAGE_SCN_MEM_WRITE;
 
     for (p = known_sections; p->section_name; p++)
       if (strcmp (scnhdr_int->s_name, p->section_name) == 0)
        {
+         if (strcmp (scnhdr_int->s_name, ".text")
+             || (bfd_get_file_flags (abfd) & WP_TEXT))
+           flags &= ~IMAGE_SCN_MEM_WRITE;
          flags |= p->must_have;
          break;
        }
index 42944a4..04b91f6 100644 (file)
@@ -1,5 +1,5 @@
 /* Stabs in sections linking support.
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
@@ -56,12 +56,19 @@ struct stab_link_includes_table
 };
 
 /* A linked list of totals that we have found for a particular header
-   file.  */
+   file.  A total is a unique identifier for a particular BINCL...EINCL
+   sequence of STABs that can be used to identify duplicate sequences.
+   It consists of three fields, 'sum_chars' which is the sum of all the
+   STABS characters; 'num_chars' which is the number of these charactes
+   and 'symb' which is a buffer of all the symbols in the sequence.  This
+   buffer is only checked as a last resort.  */
 
 struct stab_link_includes_totals
 {
   struct stab_link_includes_totals *next;
-  bfd_vma total;
+  bfd_vma sum_chars;  /* Accumulated sum of STABS characters.  */
+  bfd_vma num_chars;  /* Number of STABS characters.  */
+  const char* symb;   /* The STABS characters themselves.  */
 };
 
 /* An entry in the header file hash table.  */
@@ -340,15 +347,21 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
         first number after an open parenthesis).  */
       if (type == (int) N_BINCL)
        {
-         bfd_vma val;
+         bfd_vma sum_chars;
+         bfd_vma num_chars;
+         bfd_vma buf_len = 0;
+         char * symb;
+         char * symb_rover;
          int nest;
-         bfd_byte *incl_sym;
-         struct stab_link_includes_entry *incl_entry;
-         struct stab_link_includes_totals *t;
-         struct stab_excl_list *ne;
+         bfd_byte * incl_sym;
+         struct stab_link_includes_entry * incl_entry;
+         struct stab_link_includes_totals * t;
+         struct stab_excl_list * ne;
 
-         val = 0;
+         symb = symb_rover = NULL;
+         sum_chars = num_chars = 0;
          nest = 0;
+
          for (incl_sym = sym + STABSIZE;
               incl_sym < symend;
               incl_sym += STABSIZE)
@@ -377,7 +390,17 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
                         + bfd_get_32 (abfd, incl_sym + STRDXOFF));
                  for (; *str != '\0'; str++)
                    {
-                     val += *str;
+                     if (num_chars >= buf_len)
+                       {
+                         buf_len += 32 * 1024;
+                         symb = bfd_realloc (symb, buf_len);
+                         if (symb == NULL)
+                           goto error_return;
+                         symb_rover = symb + num_chars;
+                       }
+                     * symb_rover ++ = * str;
+                     sum_chars += *str;
+                     num_chars ++;
                      if (*str == '(')
                        {
                          /* Skip the file number.  */
@@ -390,6 +413,8 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
                }
            }
 
+         BFD_ASSERT (num_chars == (bfd_vma) (symb_rover - symb));
+
          /* If we have already included a header file with the same
             value, then replaced this one with an N_EXCL symbol.  */
          incl_entry = stab_link_includes_lookup (&sinfo->includes, string,
@@ -398,7 +423,9 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
            goto error_return;
 
          for (t = incl_entry->totals; t != NULL; t = t->next)
-           if (t->total == val)
+           if (t->sum_chars == sum_chars
+               && t->num_chars == num_chars
+               && memcmp (t->symb, symb, num_chars) == 0)
              break;
 
          /* Record this symbol, so that we can set the value
@@ -408,7 +435,7 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
          if (ne == NULL)
            goto error_return;
          ne->offset = sym - stabbuf;
-         ne->val = val;
+         ne->val = sum_chars;
          ne->type = (int) N_BINCL;
          ne->next = secinfo->excls;
          secinfo->excls = ne;
@@ -421,7 +448,9 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
                   bfd_hash_allocate (&sinfo->includes.root, sizeof *t));
              if (t == NULL)
                goto error_return;
-             t->total = val;
+             t->sum_chars = sum_chars;
+             t->num_chars = num_chars;
+             t->symb = bfd_realloc (symb, num_chars); /* Trim data down.  */
              t->next = incl_entry->totals;
              incl_entry->totals = t;
            }
@@ -433,6 +462,9 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
                 pass to change the type to N_EXCL.  */
              ne->type = (int) N_EXCL;
 
+             /* Free off superfluous symbols.  */
+             free (symb);
+
              /* Mark the skipped symbols.  */
 
              nest = 0;
@@ -456,6 +488,9 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo, pstring_of
                    }
                  else if (incl_type == (int) N_BINCL)
                    ++nest;
+                 else if (incl_type == (int) N_EXCL)
+                   /* Keep existing exclusion marks.  */
+                   continue;   
                  else if (nest == 0)
                    {
                      *incl_pstridx = (bfd_size_type) -1;
index 9c9ce85..eb820f9 100644 (file)
@@ -1,3 +1,56 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-04-07  Benjamin Monate  <benjamin.monate@cea.fr>
+       PR 86
+       * arsup.c (ar_save): Use smart_rename.
+
+       2004-04-01  Dean Luick <luick@cray.com>
+       * readelf.c (display_debug_pubnames): Align offset and data
+       columns.
+       (read_and_display_attr_value): Add missing break;
+       (debug_displays): Enable the display of the .debug_pubtypes
+       section.
+
+       2004-03-21  Richard Henderson  <rth@redhat.com>
+       * readelf.c (display_debug_frames): Don't crash for mismatched
+       DW_CFA_restore_state.
+
+       2004-03-10  Ben Elliston  <bje@gnu.org>
+       * MAINTAINERS: Update my mail address.
+
+       2004-03-08  Danny Smith  <dannysmith@users.sourceforge.net>
+       * deflex.l: Handle "PRIVATE" string.
+       * defparse.y (%token): Add PRIVATE.
+       (%type): Add opt_PRIVATE.
+       (expline): Pass opt_PRIVATE to def_exports.
+       (opt_PRIVATE): Handle PRIVATE token.
+       * dlltool.h (def_exports): Add 7th param for private flag to
+       declaration.
+       * dlltool.c: Add PRIVATE to comment on EXPORTS syntax.
+       (struct export): Add 'private' field.
+       (def_exports): Set 'private' field of struct exports.
+       (scan_drectve_symbols): Adjust calls to def_exports.
+       (scan_filtered_symbols): Likewise.
+       (dump_def_info): Print 'private' field.
+       (gen_def_file): Likewise.
+       (gen_lib_file): Skip generation of lib object if private.
+       Delete tmp object files in same order as they were generated.
+       Don't delete non-existent private object files.
+
+       2004-02-27  Andreas Schwab  <schwab@suse.de>
+       * ar.c (main): Support POSIX-compatible argument parsing.
+
+       2004-02-23  Daniel Lucq  <daniel@lucq.org>
+       * readelf.c (process_mips_specific): Print conflictsno as an
+       unsigned long.
+
+       2004-02-21  Dmitry Timoshkov  <dmitry@baikal.ru>
+       * dlltool.c (gen_exp_file): Always output names for forwarded symbols.
+
+       2004-02-19  Jakub Jelinek  <jakub@redhat.com>
+       * objcopy.c (copy_section): Avoid warnings.
+
 2004-02-14  Andrew Cagney  <cagney@redhat.com>
 
        * ar.c (remove_output): Use bfd_cache_close.
index 79cabaa..28c9144 100644 (file)
@@ -59,7 +59,7 @@ responsibility among the other maintainers.
   ARM             Richard Earnshaw <rearnsha@arm.com>
   AVR             Denis Chertykov <denisc@overta.ru>
   AVR             Marek Michalkiewicz <marekm@amelek.gda.pl>
-  BUILD SYSTEM    Ben Elliston <bje@wasabisystems.com>
+  BUILD SYSTEM    Ben Elliston <bje@gnu.org>
   BUILD SYSTEM    Daniel Jacobowitz <dan@debian.org>
   CRIS            Hans-Peter Nilsson <hp@axis.com>
   DWARF2          Jason Merrill <jason@redhat.com>
@@ -77,7 +77,7 @@ responsibility among the other maintainers.
   ix86            H.J.Lu <hjl@gnu.org>
   ix86 INTEL MODE  Diego Novillo <dnovillo@redhat.com>
   M68HC11 M68HC12  Stephane Carrez <stcarrez@nerim.fr>
-  M68k            Ben Elliston <bje@wasabisystems.com>
+  M68k            Ben Elliston <bje@gnu.org>
   MIPS            Eric Christopher <echristo@redhat.com>
   MIPS            Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
   MMIX            Hans-Peter Nilsson <hp@bitrange.com>
@@ -90,7 +90,7 @@ responsibility among the other maintainers.
   SH              Alexandre Oliva <aoliva@redhat.com>
   SH              Kaz Kojima <kkojima@rr.iij4u.or.jp>
   SPARC                   Jakub Jelinek <jakub@redhat.com>
-  TESTSUITES      Ben Elliston <bje@wasabisystems.com>
+  TESTSUITES      Ben Elliston <bje@gnu.org>
   TIC4X            Svein Seldal <svein.seldal@solidas.com>
   TIC54X           Timothy Wall <twall@alum.mit.edu>
   VAX             Jason R Thorpe <thorpej@wasabisystems.com>
index b85d62e..ec0657d 100644 (file)
@@ -1,6 +1,6 @@
 /* ar.c - Archive modify and extract.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003
+   2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
@@ -353,6 +353,7 @@ main (int argc, char **argv)
   char *inarch_filename;
   int show_version;
   int i;
+  int do_posix = 0;
 
 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
   setlocale (LC_MESSAGES, "");
@@ -459,107 +460,125 @@ main (int argc, char **argv)
   if (argc < 2)
     usage (0);
 
-  arg_ptr = argv[1];
+  arg_index = 1;
+  arg_ptr = argv[arg_index];
 
   if (*arg_ptr == '-')
-    ++arg_ptr;                 /* compatibility */
+    {
+      /* When the first option starts with '-' we support POSIX-compatible
+        option parsing.  */
+      do_posix = 1;
+      ++arg_ptr;                       /* compatibility */
+    }
 
-  while ((c = *arg_ptr++) != '\0')
+  do
     {
-      switch (c)
+      while ((c = *arg_ptr++) != '\0')
        {
-       case 'd':
-       case 'm':
-       case 'p':
-       case 'q':
-       case 'r':
-       case 't':
-       case 'x':
-         if (operation != none)
-           fatal (_("two different operation options specified"));
          switch (c)
            {
            case 'd':
-             operation = delete;
-             operation_alters_arch = TRUE;
-             break;
            case 'm':
-             operation = move;
-             operation_alters_arch = TRUE;
-             break;
            case 'p':
-             operation = print_files;
-             break;
            case 'q':
-             operation = quick_append;
-             operation_alters_arch = TRUE;
-             break;
            case 'r':
-             operation = replace;
-             operation_alters_arch = TRUE;
-             break;
            case 't':
-             operation = print_table;
-             break;
            case 'x':
-             operation = extract;
+             if (operation != none)
+               fatal (_("two different operation options specified"));
+             switch (c)
+               {
+               case 'd':
+                 operation = delete;
+                 operation_alters_arch = TRUE;
+                 break;
+               case 'm':
+                 operation = move;
+                 operation_alters_arch = TRUE;
+                 break;
+               case 'p':
+                 operation = print_files;
+                 break;
+               case 'q':
+                 operation = quick_append;
+                 operation_alters_arch = TRUE;
+                 break;
+               case 'r':
+                 operation = replace;
+                 operation_alters_arch = TRUE;
+                 break;
+               case 't':
+                 operation = print_table;
+                 break;
+               case 'x':
+                 operation = extract;
+                 break;
+               }
+           case 'l':
+             break;
+           case 'c':
+             silent_create = 1;
+             break;
+           case 'o':
+             preserve_dates = 1;
+             break;
+           case 'V':
+             show_version = TRUE;
+             break;
+           case 's':
+             write_armap = 1;
+             break;
+           case 'S':
+             write_armap = -1;
+             break;
+           case 'u':
+             newer_only = 1;
+             break;
+           case 'v':
+             verbose = 1;
+             break;
+           case 'a':
+             postype = pos_after;
+             break;
+           case 'b':
+             postype = pos_before;
              break;
+           case 'i':
+             postype = pos_before;
+             break;
+           case 'M':
+             mri_mode = 1;
+             break;
+           case 'N':
+             counted_name_mode = TRUE;
+             break;
+           case 'f':
+             ar_truncate = TRUE;
+             break;
+           case 'P':
+             full_pathname = TRUE;
+             break;
+           default:
+             /* xgettext:c-format */
+             non_fatal (_("illegal option -- %c"), c);
+             usage (0);
            }
-       case 'l':
-         break;
-       case 'c':
-         silent_create = 1;
-         break;
-       case 'o':
-         preserve_dates = 1;
-         break;
-       case 'V':
-         show_version = TRUE;
-         break;
-       case 's':
-         write_armap = 1;
-         break;
-       case 'S':
-         write_armap = -1;
-         break;
-       case 'u':
-         newer_only = 1;
-         break;
-       case 'v':
-         verbose = 1;
-         break;
-       case 'a':
-         postype = pos_after;
-         break;
-       case 'b':
-         postype = pos_before;
-         break;
-       case 'i':
-         postype = pos_before;
-         break;
-       case 'M':
-         mri_mode = 1;
-         break;
-       case 'N':
-         counted_name_mode = TRUE;
-         break;
-       case 'f':
-         ar_truncate = TRUE;
-         break;
-       case 'P':
-         full_pathname = TRUE;
-         break;
-       default:
-         /* xgettext:c-format */
-         non_fatal (_("illegal option -- %c"), c);
-         usage (0);
        }
+
+      /* With POSIX-compatible option parsing continue with the next
+        argument if it starts with '-'.  */
+      if (do_posix && arg_index + 1 < argc && argv[arg_index + 1][0] == '-')
+       arg_ptr = argv[++arg_index] + 1;
+      else
+       do_posix = 0;
     }
+  while (do_posix);
 
   if (show_version)
     print_version ("ar");
 
-  if (argc < 3)
+  ++arg_index;
+  if (arg_index >= argc)
     usage (0);
 
   if (mri_mode)
@@ -578,7 +597,7 @@ main (int argc, char **argv)
       if ((operation == none || operation == print_table)
          && write_armap == 1)
        {
-         ranlib_only (argv[2]);
+         ranlib_only (argv[arg_index]);
          xexit (0);
        }
 
@@ -588,8 +607,6 @@ main (int argc, char **argv)
       if (newer_only && operation != replace)
        fatal (_("`u' is only meaningful with the `r' option."));
 
-      arg_index = 2;
-
       if (postype != pos_default)
        posname = argv[arg_index++];
 
index a621bf9..5160dc4 100644 (file)
@@ -1,5 +1,5 @@
 /* arsup.c - Archive support for MRI compatibility
-   Copyright 1992, 1994, 1995, 1996, 1997, 2000, 2002, 2003
+   Copyright 1992, 1994, 1995, 1996, 1997, 2000, 2002, 2003, 2004
    Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
@@ -333,7 +333,7 @@ ar_save (void)
 
       bfd_close (obfd);
 
-      rename (ofilename, real_name);
+      smart_rename (ofilename, real_name, 0);
       obfd = 0;
       free (ofilename);
     }
index 106cc7b..bdf15d3 100644 (file)
@@ -1,28 +1,27 @@
 %{/* deflex.l - Lexer for .def files */
 
-/*   Copyright 1995, 1997, 1998, 1999, 2002, 2003 Free Software Foundation, Inc.
+/*  Copyright 1995, 1997, 1998, 1999, 2002, 2003, 2004
+    Free Software Foundation, Inc.
 
-This file is part of GNU Binutils.
+    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 2 of the License, or
-(at your option) any later version.
+    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 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.
+    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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+    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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
-/* Contributed by Steve Chamberlain
-                 sac@cygnus.com
+/* Contributed by Steve Chamberlain: sac@cygnus.com  */
 
-*/
 #define DONTDECLARE_MALLOC
 #include "libiberty.h"
 #include "defparse.h"
@@ -46,6 +45,7 @@ int linenumber;
 "BASE"         { return BASE;}
 "CONSTANT"     { return CONSTANT; }
 "NONAME"       { return NONAME; }
+"PRIVATE"      { return PRIVATE; }
 "READ"         { return READ;}
 "WRITE"                { return WRITE;}
 "EXECUTE"      { return EXECUTE;}
index d0bccd9..b58aaee 100644 (file)
@@ -1,22 +1,23 @@
 %{ /* defparse.y - parser for .def files */
 
-/*   Copyright 1995, 1997, 1998, 1999 Free Software Foundation, Inc.
+/*  Copyright 1995, 1997, 1998, 1999, 2004
+    Free Software Foundation, Inc.
 
-This file is part of GNU Binutils.
+    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 2 of the License, or
-(at your option) any later version.
+    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 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.
+    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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+    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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "bfd.h"
 #include "bucomm.h"
@@ -30,11 +31,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 %token NAME, LIBRARY, DESCRIPTION, STACKSIZE, HEAPSIZE, CODE, DATA
 %token SECTIONS, EXPORTS, IMPORTS, VERSIONK, BASE, CONSTANT
-%token READ WRITE EXECUTE SHARED NONSHARED NONAME
+%token READ WRITE EXECUTE SHARED NONSHARED NONAME PRIVATE
 %token SINGLE MULTIPLE INITINSTANCE INITGLOBAL TERMINSTANCE TERMGLOBAL
 %token <id> ID
 %token <number> NUMBER
-%type  <number> opt_base opt_ordinal opt_NONAME opt_CONSTANT opt_DATA
+%type  <number> opt_base opt_ordinal opt_NONAME opt_CONSTANT opt_DATA opt_PRIVATE
 %type  <number> attr attr_list opt_number
 %type  <id> opt_name opt_equal_name 
 
@@ -66,8 +67,8 @@ explist:
        ;
 
 expline:
-               ID opt_equal_name opt_ordinal opt_NONAME opt_CONSTANT opt_DATA
-                       { def_exports ($1, $2, $3, $4, $5, $6);}
+               ID opt_equal_name opt_ordinal opt_NONAME opt_CONSTANT opt_DATA opt_PRIVATE
+                       { def_exports ($1, $2, $3, $4, $5, $6, $7);}
        ;
 implist:       
                implist impline
@@ -132,6 +133,11 @@ opt_DATA:
        |            { $$ = 0; }
        ;
 
+opt_PRIVATE:
+               PRIVATE { $$ = 1; }
+       |               { $$ = 0; }
+       ;
+
 opt_name: ID           { $$ =$1; }
        | ID '.' ID     
          { 
index 9d25861..5f921ae 100644 (file)
@@ -1,5 +1,5 @@
 /* dlltool.c -- tool to generate stuff for PE style DLLs
-   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
@@ -49,7 +49,7 @@
 
    EXPORTS  ( (  ( <name1> [ = <name2> ] )
                | ( <name1> = <module-name> . <external-name>))
-            [ @ <integer> ] [ NONAME ] [CONSTANT] [DATA] ) *
+            [ @ <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>
@@ -643,7 +643,8 @@ typedef struct export
     const char *internal_name;
     int ordinal;
     int constant;
-    int noname;
+    int noname;                /* Don't put name in image file.  */
+    int private;       /* Don't put reference in import lib.  */
     int data;
     int hint;
     int forward;       /* Number of forward label, 0 means no forward.  */
@@ -889,7 +890,7 @@ yyerror (const char * err ATTRIBUTE_UNUSED)
 
 void
 def_exports (const char *name, const char *internal_name, int ordinal,
-            int noname, int constant, int data)
+            int noname, int constant, int data, int private)
 {
   struct export *p = (struct export *) xmalloc (sizeof (*p));
 
@@ -898,6 +899,7 @@ def_exports (const char *name, const char *internal_name, int ordinal,
   p->ordinal = ordinal;
   p->constant = constant;
   p->noname = noname;
+  p->private = private;
   p->data = data;
   p->next = d_exports;
   d_exports = p;
@@ -1246,7 +1248,7 @@ scan_drectve_symbols (bfd *abfd)
          /* FIXME: The 5th arg is for the `constant' field.
             What should it be?  Not that it matters since it's not
             currently useful.  */
-         def_exports (c, 0, -1, 0, 0, ! (flags & BSF_FUNCTION));
+         def_exports (c, 0, -1, 0, 0, ! (flags & BSF_FUNCTION), 0);
 
          if (add_stdcall_alias && strchr (c, '@'))
            {
@@ -1255,7 +1257,7 @@ scan_drectve_symbols (bfd *abfd)
              char *atsym = strchr (exported_name, '@');
              *atsym = '\0';
              /* Note: stdcall alias symbols can never be data.  */
-             def_exports (exported_name, xstrdup (c), -1, 0, 0, 0);
+             def_exports (exported_name, xstrdup (c), -1, 0, 0, 0, 0);
            }
        }
       else
@@ -1294,7 +1296,7 @@ scan_filtered_symbols (bfd *abfd, void *minisyms, long symcount,
        ++symbol_name;
 
       def_exports (xstrdup (symbol_name) , 0, -1, 0, 0,
-                  ! (sym->flags & BSF_FUNCTION));
+                  ! (sym->flags & BSF_FUNCTION), 0);
 
       if (add_stdcall_alias && strchr (symbol_name, '@'))
         {
@@ -1303,7 +1305,7 @@ scan_filtered_symbols (bfd *abfd, void *minisyms, long symcount,
          char *atsym = strchr (exported_name, '@');
          *atsym = '\0';
          /* Note: stdcall alias symbols can never be data.  */
-         def_exports (exported_name, xstrdup (symbol_name), -1, 0, 0, 0);
+         def_exports (exported_name, xstrdup (symbol_name), -1, 0, 0, 0, 0);
        }
     }
 }
@@ -1518,13 +1520,14 @@ dump_def_info (FILE *f)
   fprintf (f, "\n");
   for (i = 0, exp = d_exports; exp; i++, exp = exp->next)
     {
-      fprintf (f, "%s  %d = %s %s @ %d %s%s%s\n",
+      fprintf (f, "%s  %d = %s %s @ %d %s%s%s%s\n",
               ASM_C,
               i,
               exp->name,
               exp->internal_name,
               exp->ordinal,
               exp->noname ? "NONAME " : "",
+              exp->private ? "PRIVATE " : "",
               exp->constant ? "CONSTANT" : "",
               exp->data ? "DATA" : "");
     }
@@ -1595,20 +1598,20 @@ gen_def_file (void)
 
       if (strcmp (exp->name, exp->internal_name) == 0)
        {
-
-         fprintf (output_def, "\t%s%s%s @ %d%s%s\n",
+         fprintf (output_def, "\t%s%s%s @ %d%s%s%s\n",
                   quote,
                   exp->name,
                   quote,
                   exp->ordinal,
                   exp->noname ? " NONAME" : "",
+                  exp->private ? "PRIVATE " : "",
                   exp->data ? " DATA" : "");
        }
       else
        {
-         char *quote1 = strchr (exp->internal_name, '.') ? "\"" : "";
+         char * quote1 = strchr (exp->internal_name, '.') ? "\"" : "";
          /* char *alias =  */
-         fprintf (output_def, "\t%s%s%s = %s%s%s @ %d%s%s\n",
+         fprintf (output_def, "\t%s%s%s = %s%s%s @ %d%s%s%s\n",
                   quote,
                   exp->name,
                   quote,
@@ -1617,6 +1620,7 @@ gen_def_file (void)
                   quote1,
                   exp->ordinal,
                   exp->noname ? " NONAME" : "",
+                  exp->private ? "PRIVATE " : "",
                   exp->data ? " DATA" : "");
        }
     }
@@ -1841,14 +1845,14 @@ gen_exp_file (void)
 
       fprintf(f,"%s Export Name Table\n", ASM_C);
       for (i = 0; (exp = d_exports_lexically[i]); i++)
-       if (!exp->noname || show_allnames)
-         {
+       {
+         if (!exp->noname || show_allnames)
            fprintf (f, "n%d:   %s      \"%s\"\n",
                     exp->ordinal, ASM_TEXT, xlate (exp->name));
-           if (exp->forward != 0)
-             fprintf (f, "f%d: %s      \"%s\"\n",
-                      exp->forward, ASM_TEXT, exp->internal_name);
-         }
+         if (exp->forward != 0)
+           fprintf (f, "f%d:   %s      \"%s\"\n",
+                    exp->forward, ASM_TEXT, exp->internal_name);
+       }
 
       if (a_list)
        {
@@ -2794,7 +2798,11 @@ gen_lib_file (void)
 
   for (i = 0; (exp = d_exports_lexically[i]); i++)
     {
-      bfd *n = make_one_lib_file (exp, i);
+      bfd *n;
+      /* Don't add PRIVATE entries to import lib.  */
+      if (exp->private)
+       continue;
+      n = make_one_lib_file (exp, i);
       n->next = head;
       head = n;
     }
@@ -2831,8 +2839,11 @@ gen_lib_file (void)
       char *name;
 
       name = (char *) alloca (strlen (TMP_STUB) + 10);
-      for (i = 0, exp = d_exports; exp; i++, exp = exp->next)
+      for (i = 0; (exp = d_exports_lexically[i]); i++)
        {
+         /* Don't delete non-existent stubs for PRIVATE entries.  */
+          if (exp->private)
+           continue;
          sprintf (name, "%s%05d.o", TMP_STUB, i);
          if (unlink (name) < 0)
            /* xgettext:c-format */
@@ -2843,10 +2854,9 @@ gen_lib_file (void)
   inform (_("Created lib file"));
 }
 
-/**********************************************************************/
-
 /* Run through the information gathered from the .o files and the
    .def file and work out the best stuff.  */
+
 static int
 pfunc (const void *a, const void *b)
 {
@@ -2890,11 +2900,7 @@ remove_null_names (export_type **ptr)
 }
 
 static void
-dtab (export_type **ptr
-#ifndef SACDEBUG
-ATTRIBUTE_UNUSED
-#endif
-      )
+dtab (export_type **ptr ATTRIBUTE_UNUSED)
 {
 #ifdef SACDEBUG
   int i;
@@ -2922,7 +2928,6 @@ process_duplicates (export_type **d_export_vec)
 
   while (more)
     {
-
       more = 0;
       /* Remove duplicates.  */
       qsort (d_export_vec, d_nfuncs, sizeof (export_type *), nfunc);
@@ -2933,7 +2938,6 @@ process_duplicates (export_type **d_export_vec)
          if (strcmp (d_export_vec[i]->name,
                      d_export_vec[i + 1]->name) == 0)
            {
-
              export_type *a = d_export_vec[i];
              export_type *b = d_export_vec[i + 1];
 
@@ -2963,13 +2967,10 @@ process_duplicates (export_type **d_export_vec)
        }
     }
 
-
   /* Count the names.  */
   for (i = 0; i < d_nfuncs; i++)
-    {
-      if (!d_export_vec[i]->noname)
-       d_named_nfuncs++;
-    }
+    if (!d_export_vec[i]->noname)
+      d_named_nfuncs++;
 }
 
 static void
@@ -3008,7 +3009,7 @@ fill_ordinals (export_type **d_export_vec)
     {
       if (d_export_vec[i]->ordinal == -1)
        {
-         register int j;
+         int j;
 
          /* First try within or after any user supplied range.  */
          for (j = lowest; j < size; j++)
@@ -3063,8 +3064,7 @@ mangle_defs (void)
 
   int i;
   int hint = 0;
-  export_type **d_export_vec
-  = (export_type **) xmalloc (sizeof (export_type *) * d_nfuncs);
+  export_type **d_export_vec = xmalloc (sizeof (export_type *) * d_nfuncs);
 
   inform (_("Processing definitions"));
 
@@ -3101,8 +3101,6 @@ mangle_defs (void)
   inform (_("Processed definitions"));
 }
 
-/**********************************************************************/
-
 static void
 usage (FILE *file, int status)
 {
@@ -3239,7 +3237,7 @@ main (int ac, char **av)
          as_flags = optarg;
          break;
 
-         /* ignored for compatibility */
+         /* Ignored for compatibility.  */
        case 'u':
          break;
        case 'a':
index c2eaea6..f488d96 100644 (file)
@@ -1,5 +1,5 @@
 /* dlltool.h -- header file for dlltool
-   Copyright 1997, 1998, 2003 Free Software Foundation, Inc.
+   Copyright 1997, 1998, 2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
@@ -24,7 +24,7 @@
 extern void def_code (int);
 extern void def_data (int);
 extern void def_description (const char *);
-extern void def_exports (const char *, const char *, int, int, int, int);
+extern void def_exports (const char *, const char *, int, int, int, int, int);
 extern void def_heapsize (int, int);
 extern void def_import
   (const char *, const char *, const char *, const char *, int);
@@ -33,9 +33,10 @@ extern void def_name (const char *, int);
 extern void def_section (const char *, int);
 extern void def_stacksize (int, int);
 extern void def_version (int, int);
-extern int yyparse (void);
-extern int yyerror (const char *);
+extern int  yyparse (void);
+extern int  yyerror (const char *);
+extern int  yylex (void);
+
 extern int yydebug;
-extern int yylex (void);
 extern FILE *yyin;
 extern int linenumber;
index d31eb8f..9623398 100644 (file)
@@ -2055,9 +2055,9 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
       if (copy_byte >= 0)
        {
          /* Keep only every `copy_byte'th byte in MEMHUNK.  */
-         char *from = memhunk + copy_byte;
+         char *from = (char *) memhunk + copy_byte;
          char *to = memhunk;
-         char *end = memhunk + size;
+         char *end = (char *) memhunk + size;
 
          for (; from < end; from += interleave)
            *to++ = *from;
index 258c746..e95a501 100644 (file)
@@ -6767,7 +6767,7 @@ display_debug_pubnames (Elf_Internal_Shdr *section,
          if (offset != 0)
            {
              data += offset_size;
-             printf ("    %ld\t\t%s\n", offset, data);
+             printf ("    %-6ld\t\t%s\n", offset, data);
              data += strlen ((char *) data) + 1;
            }
        }
@@ -7941,6 +7941,7 @@ read_and_display_attr_value (unsigned long attribute,
 
     case DW_FORM_addr:
       printf (" %#lx", uvalue);
+      break;
 
     case DW_FORM_flag:
     case DW_FORM_data1:
@@ -9150,13 +9151,19 @@ display_debug_frames (Elf_Internal_Shdr *section,
              if (! do_debug_frames_interp)
                printf ("  DW_CFA_restore_state\n");
              rs = remembered_state;
-             remembered_state = rs->next;
-             frame_need_space (fc, rs->ncols-1);
-             memcpy (fc->col_type, rs->col_type, rs->ncols);
-             memcpy (fc->col_offset, rs->col_offset, rs->ncols * sizeof (int));
-             free (rs->col_type);
-             free (rs->col_offset);
-             free (rs);
+             if (rs)
+               {
+                 remembered_state = rs->next;
+                 frame_need_space (fc, rs->ncols-1);
+                 memcpy (fc->col_type, rs->col_type, rs->ncols);
+                 memcpy (fc->col_offset, rs->col_offset,
+                         rs->ncols * sizeof (int));
+                 free (rs->col_type);
+                 free (rs->col_offset);
+                 free (rs);
+               }
+             else if (do_debug_frames_interp)
+               printf ("Mismatched DW_CFA_restore_state\n");
              break;
 
            case DW_CFA_def_cfa:
@@ -9321,7 +9328,7 @@ debug_displays[] =
   { ".debug_macinfo",          display_debug_macinfo },
   { ".debug_str",              display_debug_str },
   { ".debug_loc",              display_debug_loc },
-  { ".debug_pubtypes",         display_debug_not_supported },
+  { ".debug_pubtypes",         display_debug_pubnames },
   { ".debug_ranges",           display_debug_not_supported },
   { ".debug_static_func",      display_debug_not_supported },
   { ".debug_static_vars",      display_debug_not_supported },
@@ -9787,8 +9794,8 @@ process_mips_specific (FILE *file)
          free (econf64);
        }
 
-      printf (_("\nSection '.conflict' contains %ld entries:\n"),
-             (long) conflictsno);
+      printf (_("\nSection '.conflict' contains %lu entries:\n"),
+             (unsigned long) conflictsno);
       puts (_("  Num:    Index       Value  Name"));
 
       for (cnt = 0; cnt < conflictsno; ++cnt)
index 29cb53c..5e6e7a5 100644 (file)
@@ -1,3 +1,9 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-02-27  Andreas Schwab  <schwab@suse.de>
+       * binutils-all/ar.exp (argument_parsing): New test.
+
 2004-04-08  Alan Modra  <amodra@bigpond.net.au>
 
        Apply from mainline.
index f418e94..7f01c76 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright 1995, 1997 Free Software Foundation, Inc.
+#   Copyright 1995, 1997, 2004 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
@@ -214,7 +214,43 @@ proc symbol_table { } {
     pass $testname
 }
 
+# Test POSIX-compatible argument parsing.
+
+proc argument_parsing { } {
+    global AR
+    global AS
+    global srcdir
+    global subdir
+
+    set testname "ar argument parsing"
+
+    if ![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o] {
+       unresolved $testname
+       return
+    }
+
+    if [is_remote host] {
+       set archive artest.a
+       set objfile [remote_download host tmpdir/bintest.o]
+       remote_file host delete $archive
+    } else {
+       set archive tmpdir/artest.a
+       set objfile tmpdir/bintest.o
+    }
+
+    remote_file build delete tmpdir/artest.a
+
+    set got [binutils_run $AR "-r -c $archive ${objfile}"]
+    if ![string match "" $got] {
+       fail $testname
+       return
+    }
+
+    pass $testname
+}
+
 # Run the tests.
 
 long_filenames
 symbol_table
+argument_parsing
index fa58459..00ccf89 100755 (executable)
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
-timestamp='2003-06-12'
+timestamp='2004-02-16'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -197,12 +197,18 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
        echo "${machine}-${os}${release}"
        exit 0 ;;
+    amd64:OpenBSD:*:*)
+       echo x86_64-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
     amiga:OpenBSD:*:*)
        echo m68k-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
     arc:OpenBSD:*:*)
        echo mipsel-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
+    cats:OpenBSD:*:*)
+       echo arm-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
     hp300:OpenBSD:*:*)
        echo m68k-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
@@ -221,6 +227,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     mvmeppc:OpenBSD:*:*)
        echo powerpc-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
+    pegasos:OpenBSD:*:*)
+       echo powerpc-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
     pmax:OpenBSD:*:*)
        echo mipsel-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
@@ -236,6 +245,15 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:OpenBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
        exit 0 ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit 0 ;;
+    macppc:MirBSD:*:*)
+       echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+       exit 0 ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit 0 ;;
     alpha:OSF1:*:*)
        if test $UNAME_RELEASE = "V4.0"; then
                UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -307,6 +325,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:OS/390:*:*)
        echo i370-ibm-openedition
        exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit 0 ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
        exit 0;;
@@ -399,6 +420,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
         exit 0 ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit 0 ;;
     powerpc:machten:*:*)
        echo powerpc-apple-machten${UNAME_RELEASE}
        exit 0 ;;
@@ -734,7 +758,7 @@ EOF
        echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit 0 ;;
     *:UNICOS/mp:*:*)
-       echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' 
+       echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit 0 ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
        FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
@@ -742,6 +766,11 @@ EOF
         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
         echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
         exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit 0 ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
        echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
        exit 0 ;;
@@ -751,7 +780,7 @@ EOF
     *:BSD/OS:*:*)
        echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
        exit 0 ;;
-    *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
+    *:FreeBSD:*:*)
        # Determine whether the default compiler uses glibc.
        eval $set_cc_for_build
        sed 's/^        //' << EOF >$dummy.c
@@ -763,7 +792,10 @@ EOF
        #endif
 EOF
        eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+       # GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+       # FreeBSD's kernel, but not the complete OS.
+       case ${LIBC} in gnu) kernel_only='k' ;; esac
+       echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
        exit 0 ;;
     i*:CYGWIN*:*)
        echo ${UNAME_MACHINE}-pc-cygwin
@@ -796,8 +828,13 @@ EOF
        echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
        exit 0 ;;
     *:GNU:*:*)
+       # the GNU system
        echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
        exit 0 ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit 0 ;;
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
        exit 0 ;;
@@ -885,6 +922,9 @@ EOF
     s390:Linux:*:* | s390x:Linux:*:*)
        echo ${UNAME_MACHINE}-ibm-linux
        exit 0 ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit 0 ;;
     sh*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit 0 ;;
@@ -942,6 +982,9 @@ EOF
        LIBC=gnuaout
        #endif
        #endif
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
 EOF
        eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
        test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
@@ -972,6 +1015,9 @@ EOF
     i*86:atheos:*:*)
        echo ${UNAME_MACHINE}-unknown-atheos
        exit 0 ;;
+       i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit 0 ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
        echo i386-unknown-lynxos${UNAME_RELEASE}
        exit 0 ;;
@@ -1043,7 +1089,7 @@ EOF
        exit 0 ;;
     M68*:*:R3V[567]*:*)
        test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
        OS_REL=''
        test -r /etc/.relid \
        && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -1158,7 +1204,7 @@ EOF
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit 0 ;;
-    NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
+    NSR-?:NONSTOP_KERNEL:*:*)
        echo nsr-tandem-nsk${UNAME_RELEASE}
        exit 0 ;;
     *:NonStop-UX:*:*)
@@ -1199,6 +1245,12 @@ EOF
     *:ITS:*:*)
        echo pdp10-unknown-its
        exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit 0 ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit 0 ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
index dfeed48..d2e3557 100755 (executable)
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 
-timestamp='2003-06-13'
+timestamp='2004-02-16'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -118,7 +118,8 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
@@ -228,13 +229,14 @@ case $basic_machine in
        | a29k \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
        | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
        | fr30 | frv \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
        | i370 | i860 | i960 | ia64 \
-       | iq2000 | ip2k \
+       | ip2k | iq2000 \
        | m32r | m68000 | m68k | m88k | mcore \
        | mips | mipsbe | mipseb | mipsel | mipsle \
        | mips16 \
@@ -247,6 +249,7 @@ case $basic_machine in
        | mipsisa32 | mipsisa32el \
        | mipsisa32r2 | mipsisa32r2el \
        | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
        | mipsisa64sb1 | mipsisa64sb1el \
        | mipsisa64sr71k | mipsisa64sr71kel \
        | mipstx39 | mipstx39el \
@@ -304,7 +307,7 @@ case $basic_machine in
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
        | i*86-* | i860-* | i960-* | ia64-* \
-       | iq2000-* | ip2k-* \
+       | ip2k-* | iq2000-* \
        | m32r-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
        | m88110-* | m88k-* | mcore-* \
@@ -319,6 +322,7 @@ case $basic_machine in
        | mipsisa32-* | mipsisa32el-* \
        | mipsisa32r2-* | mipsisa32r2el-* \
        | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
        | mipsisa64sb1-* | mipsisa64sb1el-* \
        | mipsisa64sr71k-* | mipsisa64sr71kel-* \
        | mipstx39-* | mipstx39el-* \
@@ -359,6 +363,9 @@ case $basic_machine in
                basic_machine=a29k-amd
                os=-udi
                ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
        adobe68k)
                basic_machine=m68010-adobe
                os=-scout
@@ -376,6 +383,9 @@ case $basic_machine in
        amd64)
                basic_machine=x86_64-pc
                ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        amdahl)
                basic_machine=580-amdahl
                os=-sysv
@@ -435,6 +445,10 @@ case $basic_machine in
                basic_machine=j90-cray
                os=-unicos
                ;;
+       cr16c)
+               basic_machine=cr16c-unknown
+               os=-elf
+               ;;
        crds | unos)
                basic_machine=m68k-crds
                ;;
@@ -740,6 +754,10 @@ case $basic_machine in
                basic_machine=or32-unknown
                os=-coff
                ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
        OSE68000 | ose68000)
                basic_machine=m68000-ericsson
                os=-ose
@@ -847,6 +865,10 @@ case $basic_machine in
        sb1el)
                basic_machine=mipsisa64sb1el-unknown
                ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
        sequent)
                basic_machine=i386-sequent
                ;;
@@ -854,6 +876,9 @@ case $basic_machine in
                basic_machine=sh-hitachi
                os=-hms
                ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
        sparclite-wrs | simso-wrs)
                basic_machine=sparclite-wrs
                os=-vxworks
@@ -953,6 +978,10 @@ case $basic_machine in
        tower | tower-32)
                basic_machine=m68k-ncr
                ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
        udi29k)
                basic_machine=a29k-amd
                os=-udi
@@ -1121,19 +1150,20 @@ case $os in
              | -aos* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
-             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* \
              | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
              | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
              | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7)
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
@@ -1157,6 +1187,9 @@ case $os in
        -mac*)
                os=`echo $os | sed -e 's|mac|macos|'`
                ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
        -linux*)
                os=`echo $os | sed -e 's|linux|linux-gnu|'`
                ;;
@@ -1169,6 +1202,9 @@ case $os in
        -opened*)
                os=-openedition
                ;;
+        -os400*)
+               os=-os400
+               ;;
        -wince*)
                os=-wince
                ;;
@@ -1190,6 +1226,9 @@ case $os in
        -atheos*)
                os=-atheos
                ;;
+       -syllable*)
+               os=-syllable
+               ;;
        -386bsd)
                os=-bsd
                ;;
@@ -1212,6 +1251,9 @@ case $os in
        -sinix*)
                os=-sysv4
                ;;
+        -tpf*)
+               os=-tpf
+               ;;
        -triton*)
                os=-sysv3
                ;;
@@ -1460,9 +1502,15 @@ case $basic_machine in
                        -mvs* | -opened*)
                                vendor=ibm
                                ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
                        -ptx*)
                                vendor=sequent
                                ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
                        -vxsim* | -vxworks* | -windiss*)
                                vendor=wrs
                                ;;
index 00a4a1f..793aee1 100644 (file)
@@ -1,3 +1,9 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-03-30  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+       * m32r.opc (parse_hi16): Fixed shigh(0xffff8000) bug.
+
 2004-01-14  Richard Sandiford  <rsandifo@redhat.com>
 
        * frv.cpu (UNIT): Add IACC.
index 6e60cee..b8df4d7 100644 (file)
@@ -1,3 +1,134 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-04-07  Alan Modra  <amodra@bigpond.net.au>
+       PR 96
+       * config/tc-ppc.c (ppc_elf_suffix): Add valid32 and valid64 fields
+       to struct map_bfd.  Adjust MAP macro, and define MAP32, MAP64.
+       Update "mapping".  Restrict some @ modifiers to 32 bit.
+
+       2004-04-01  Asgari Jinia  <asgarij@kpitcummins.com>
+       Dhananjay Deshpande <dhananjayd@kpitcummins.com>
+
+       * config/tc-sh.c (dont_adjust_reloc_32): New variable.
+       (sh_fix_adjustable): Avoid adjusting BFD_RELOC_32 when
+       dont_adjust_reloc_32 is set.
+       (md_longopts): Add option -renesas.
+       (md_parse_option, md_show_usage): Likewise.
+       * doc/c-sh.texi: Likewise.
+
+       2004-04-01  Dave Korn  <dk@artimi.com>
+       * config/tc-dlx.c (md_assemble): set fx_no_overflow flag for
+       hi16 and lo16 fixS structs.
+       (md_assemble): generate bit_fixS for RELOC_DLX_LO16 in
+       exactly the same way as for RELOC_DLX_REL16.
+       (machine_ip): properly respect LO flag in the_insn and
+       output RELOC_DLX_LO16 rather than RELOC_DLX_16.
+       (md_apply_fix3): apply RELOC_DLX_LO16.
+
+       2004-03-19  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+       * tc-hppa.c (cons_fix_new_hppa): Check for PC relative base type.
+       (pa_comm): Set BSF_OBJECT in symbol flags.
+
+       2004-03-18  Nathan Sidwell  <nathan@codesourcery.com>
+       * read.c (read_a_source_file): Use demand_empty_rest_of_line.
+       (demand_empty_rest_of_line): Issue an error here.
+       (ignore_rest_of_line): Silently skip to end.
+       (demand_copy_string): Issue an error, not warning.
+       (equals): Likewise.
+       * config/obj-elf.c (obj_elf_section_name): Likewise.
+       (obj_elf_section): Likewise.
+       * config/tc-arc.c (arc_extoper): Remove bogus NULL checks.
+       (arc_extinst): Likewise.
+       * config/tc-ia64.c (dot_saveb): Use demand_empty_rest_of_line.
+       (dot_spill): Likewise.
+       (dot_unwabi): Likewise.
+       (dot_prologue): Likewise.
+
+       2004-03-18  Nathan Sidwell  <nathan@codesourcery.com>
+       * expr.c (operand): Reject ++ and --.
+       (operator): Likewise.
+
+       2004-03-12  Bob Wilson  <bob.wilson@acm.org>
+       * read.c (s_leb128): Call md_flush_pending_output.
+
+       2004-03-07  Andreas Schwab  <schwab@suse.de>
+       * doc/c-hppa.texi (HPPA Directives): Fix typo.
+
+       2004-03-07  Richard Henderson  <rth@redhat.com>
+       * dw2gencfi.c (output_cie): Align length to 4 byte boundary.
+       (cfi_finish): Likewise for fde.
+
+       2004-03-05  H.J. Lu  <hongjiu.lu@intel.com>
+       * config/tc-ia64.c (md_assemble): Properly handle NULL
+       align_frag.
+       (ia64_handle_align): Don't abort if failed to add a stop bit.
+
+       2004-03-04  H.J. Lu  <hongjiu.lu@intel.com>
+       * Makefile.in: Regenerated.
+       * aclocal.m4: Likewise.
+       * configure: Likewise.
+       * doc/Makefile.in: Likewise.
+
+       2004-03-03  H.J. Lu  <hongjiu.lu@intel.com>
+       * config/tc-ia64.c (dot_align): New.
+       (ia64_do_align): Make it static.
+       (md_pseudo_table): Use "dot_align" for "align".
+       (ia64_md_do_align): Don't set align_frag here.
+       (ia64_handle_align): Add a stop bit to the previous bundle if
+       needed.
+
+       * config/tc-ia64.h (ia64_do_align): Removed.
+
+       2004-03-02  H.J. Lu  <hongjiu.lu@intel.com>
+       * config/tc-ia64.c (align_frag): New.
+       (md_assemble): Set the tc_frag_data field in align_frag for
+       IA64_OPCODE_FIRST instructions.
+       (ia64_md_do_align): Set align_frag.
+       (ia64_handle_align): Add a stop bit if needed.
+
+       * config/tc-ia64.h (TC_FRAG_TYPE): New.
+       (TC_FRAG_INIT): New.
+
+       2004-02-27  Nick Clifton  <nickc@redhat.com>
+       * config/tc-sh.c (get_operand): Revert previous delta.
+       (tc_gen_reloc): Check for an unknown reloc type before processing
+       the addend.
+
+       2004-02-27  Hannes Reinecke  <hare@suse.de>
+       * config/tc-s390.c (s390_insn): Correct range check for opcode in
+       .insn pseudo operation.
+
+       2004-02-27  Anil Paranjpe  <anilp1@kpitcummins.com>
+       * config/tc-sh.c (get_operand):  In case of #Imm, check has been
+       added for wrong syntax.
+
+       2004-02-26  Andrew Stubbs <andrew.stubbs@superh.com>
+       * config/tc-sh.c (build_Mytes): Add REG_N_D and REG_N_B01
+       nibble types to assembler.
+
+       2004-02-25  Fred Fish  <fnf@redhat.com>
+       * config/tc-iq2000.c: Add missing \n\ in multiline string literal.
+
+       2004-02-20  James E Wilson  <wilson@specifixinc.com>
+       * config/tc-ia64.c (slot_index): New arg before_relax.  Use instead of
+       finalize_syms.
+       (fixup_unw_records): New arg before_relax.  Pass to slot_index.
+       (ia64_estimate_size_before_relax): New.
+       (ia64_convert_frag): Pass 0 to fixup_unw_records.  Add comment.
+       (generate_unwind_image): Pass 1 to fixup_unw_records.
+       * config/tc-ia64.h (ia64_estimate_size_before_relax): Declare.
+       (md_estimate_size_before_relax): Call ia64_estimate_size_before_relax.
+
+       2004-02-19  Jakub Jelinek  <jakub@redhat.com>
+       * stabs.c (generate_asm_file): Avoid warning about use of
+       uninitialized variable.
+
+       2004-02-18  David Mosberger  <davidm@hpl.hp.com>
+       * config/tc-ia64.c (ia64_flush_insns): In addition to prologue,
+       body, and endp, allow unwind records which do not have a "t"
+       (time/instruction) field.
+
 2004-03-22  Bob Wilson  <bob.wilson@acm.org>
 
        * config/tc-xtensa.c (xtensa_post_relax_hook): Create literal
index 17920c8..f76f1c6 100644 (file)
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.7.8 from Makefile.am.
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
 # @configure_input@
 
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,6 +14,9 @@
 
 @SET_MAKE@
 
+
+SOURCES = $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) $(itbl_test_SOURCES)
+
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -21,7 +24,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 top_builddir = .
-
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -38,6 +40,81 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+noinst_PROGRAMS = as-new$(EXEEXT)
+EXTRA_PROGRAMS = itbl-test$(EXEEXT)
+DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub NEWS \
+       README ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/configure $(am__configure_deps) \
+       $(srcdir)/config.in $(srcdir)/../mkinstalldirs \
+       $(srcdir)/gdbinit.in $(srcdir)/gdbinit.in \
+       $(top_srcdir)/po/Make-in m68k-parse.c itbl-parse.c itbl-lex.c \
+       $(srcdir)/../ylwrap $(srcdir)/../ltmain.sh \
+       $(srcdir)/../config.guess $(srcdir)/../config.sub
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/../libtool.m4 $(top_srcdir)/../gettext.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = gdb.ini .gdbinit po/Makefile.in
+PROGRAMS = $(noinst_PROGRAMS)
+am__objects_1 = app.$(OBJEXT) as.$(OBJEXT) atof-generic.$(OBJEXT) \
+       bignum-copy.$(OBJEXT) cond.$(OBJEXT) depend.$(OBJEXT) \
+       dwarf2dbg.$(OBJEXT) dw2gencfi.$(OBJEXT) ecoff.$(OBJEXT) \
+       ehopt.$(OBJEXT) expr.$(OBJEXT) flonum-copy.$(OBJEXT) \
+       flonum-konst.$(OBJEXT) flonum-mult.$(OBJEXT) frags.$(OBJEXT) \
+       hash.$(OBJEXT) input-file.$(OBJEXT) input-scrub.$(OBJEXT) \
+       listing.$(OBJEXT) literal.$(OBJEXT) macro.$(OBJEXT) \
+       messages.$(OBJEXT) output-file.$(OBJEXT) read.$(OBJEXT) \
+       sb.$(OBJEXT) stabs.$(OBJEXT) subsegs.$(OBJEXT) \
+       symbols.$(OBJEXT) write.$(OBJEXT)
+am_as_new_OBJECTS = $(am__objects_1)
+as_new_OBJECTS = $(am_as_new_OBJECTS)
+am__DEPENDENCIES_1 = tc-@target_cpu_type@.o
+am__DEPENDENCIES_2 = obj-@obj_format@.o
+am__DEPENDENCIES_3 = atof-@atof@.o
+am__DEPENDENCIES_4 =
+am__DEPENDENCIES_5 = ../libiberty/libiberty.a
+am_itbl_test_OBJECTS = itbl-parse.$(OBJEXT) itbl-lex.$(OBJEXT)
+itbl_test_OBJECTS = $(am_itbl_test_OBJECTS)
+itbl_test_DEPENDENCIES = itbl-tops.o itbl-test.o $(am__DEPENDENCIES_5)
+SCRIPTS = $(noinst_SCRIPTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+depcomp =
+am__depfiles_maybe =
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
+LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) \
+       $(AM_YFLAGS)
+YLWRAP = $(top_srcdir)/../ylwrap
+SOURCES = $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) \
+       $(itbl_test_SOURCES)
+DIST_SOURCES = $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) \
+       $(itbl_test_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-exec-recursive install-info-recursive \
+       install-recursive installcheck-recursive installdirs-recursive \
+       pdf-recursive ps-recursive uninstall-info-recursive \
+       uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DEJATOOL = $(PACKAGE)
+RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALL_OBJ_DEPS = @ALL_OBJ_DEPS@
@@ -49,7 +126,6 @@ AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 BFDLIB = @BFDLIB@
-
 BFDVER_H = @BFDVER_H@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
@@ -79,7 +155,6 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 INSTOBJEXT = @INSTOBJEXT@
 INTLDEPS = @INTLDEPS@
-
 INTLLIBS = @INTLLIBS@
 INTLOBJS = @INTLOBJS@
 LDFLAGS = @LDFLAGS@
@@ -116,10 +191,8 @@ STRIP = @STRIP@
 USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
 USE_NLS = @USE_NLS@
 VERSION = @VERSION@
-
 WARN_CFLAGS = @WARN_CFLAGS@
 XGETTEXT = @XGETTEXT@
-
 YACC = `if [ -f ../bison/bison ] ; then echo ../bison/bison -y -L../bison/bison ; else echo @YACC@ ; fi`
 ac_ct_CC = @ac_ct_CC@
 ac_ct_RANLIB = @ac_ct_RANLIB@
@@ -154,6 +227,7 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localstatedir = @localstatedir@
 mandir = @mandir@
+mkdir_p = @mkdir_p@
 obj_format = @obj_format@
 oldincludedir = @oldincludedir@
 prefix = @prefix@
@@ -168,16 +242,11 @@ target_cpu_type = @target_cpu_type@
 target_os = @target_os@
 target_vendor = @target_vendor@
 te_file = @te_file@
-
-AUTOMAKE_OPTIONS = cygnus dejagnu
-
+AUTOMAKE_OPTIONS = 1.8 cygnus dejagnu
 SUBDIRS = doc po
-
 tooldir = $(exec_prefix)/$(target_alias)
 AM_CFLAGS = $(WARN_CFLAGS)
-
 MKDEP = gcc -MM
-
 TARG_CPU = @target_cpu_type@
 TARG_CPU_C = $(srcdir)/config/tc-@target_cpu_type@.c
 TARG_CPU_O = tc-@target_cpu_type@.o
@@ -195,7 +264,6 @@ IT_SRCS = itbl-parse.c itbl-lex.c $(srcdir)/itbl-ops.c
 IT_DEPS = $(srcdir)/itbl-parse.y $(srcdir)/itbl-lex.l $(srcdir)/config/itbl-@target_cpu_type@.h
 IT_OBJS = itbl-parse.o itbl-lex.o itbl-ops.o
 
-
 # CPU types.  This is only used for dependency information.
 CPU_TYPES = \
        a29k \
@@ -251,7 +319,6 @@ CPU_TYPES = \
        z8k
 
 
-
 # Object format types.  This is only used for dependency information.
 # We deliberately omit SOM, since it does not work as a cross assembler.
 OBJ_FORMATS = \
@@ -266,7 +333,6 @@ OBJ_FORMATS = \
        vms
 
 
-
 # This is an sh case which sets valid according to whether the CPU
 # type in the shell variable c and the OS type in the shell variable o
 # are supported.  This helps cuts down on the amount of dependency
@@ -308,10 +374,8 @@ CPU_OBJ_VALID = \
        esac;
 
 
-
 # These are like CPU_TYPES and CPU_OBJ_VALID, for the obj=multi case.
 MULTI_CPU_TYPES = i386 mips cris
-
 MULTI_CPU_OBJ_VALID = \
        valid= ; \
        case $$o in \
@@ -331,7 +395,6 @@ MULTI_CPU_OBJ_VALID = \
        esac;
 
 
-
 # Regular source files.
 GAS_CFILES = \
        app.c \
@@ -364,9 +427,7 @@ GAS_CFILES = \
        symbols.c \
        write.c
 
-
 CFILES = $(GAS_CFILES) itbl-ops.c
-
 HFILES = \
        as.h \
        asintl.h \
@@ -397,7 +458,6 @@ HFILES = \
        write.h
 
 
-
 # CPU files in config.
 TARGET_CPU_CFILES = \
        config/tc-a29k.c \
@@ -451,7 +511,6 @@ TARGET_CPU_CFILES = \
        config/tc-xtensa.c \
        config/tc-z8k.c
 
-
 TARGET_CPU_HFILES = \
        config/tc-a29k.h \
        config/tc-alpha.h \
@@ -505,7 +564,6 @@ TARGET_CPU_HFILES = \
        config/tc-z8k.h
 
 
-
 # OBJ files in config
 OBJ_FORMAT_CFILES = \
        config/obj-aout.c \
@@ -519,7 +577,6 @@ OBJ_FORMAT_CFILES = \
        config/obj-som.c \
        config/obj-vms.c
 
-
 OBJ_FORMAT_HFILES = \
        config/obj-aout.h \
        config/obj-bout.h \
@@ -533,7 +590,6 @@ OBJ_FORMAT_HFILES = \
        config/obj-vms.h
 
 
-
 # Emulation header files in config
 TARG_ENV_HFILES = \
        config/te-386bsd.h \
@@ -571,7 +627,6 @@ TARG_ENV_HFILES = \
        config/te-tmips.h
 
 
-
 # Multi files in config
 MULTI_CFILES = \
        config/e-crisaout.c \
@@ -582,14 +637,12 @@ MULTI_CFILES = \
        config/e-mipsecoff.c \
        config/e-mipself.c
 
-
 CONFIG_OBJS = \
        $(TARG_CPU_O) \
        $(OBJ_FORMAT_O) \
        $(ATOF_TARG_O) \
        $(extra_objects)
 
-
 GENERIC_OBJS = \
        app.o \
        as.o \
@@ -621,26 +674,16 @@ GENERIC_OBJS = \
        sb.o \
        macro.o
 
-
 OBJS = $(CONFIG_OBJS) $(GENERIC_OBJS)
-
 POTFILES = $(MULTI_CFILES) $(TARGET_ENV_HFILES) $(OBJ_FORMAT_HFILES) \
        $(OBJ_FORMAT_CFILES) $(TARGET_CPU_HFILES) $(TARGET_CPU_CFILES) \
        $(HFILES) $(CFILES) $(GAS_CFILES)
 
-RECURSIVE_TARGETS = install-info-recursive
-
-# Note: GASP is now deprecated and has been removed.  It is still
-# available in the CVS archive or older binutils releases if it is needed.
-noinst_PROGRAMS = as-new
 noinst_SCRIPTS = $(GDBINIT)
 EXTRA_SCRIPTS = .gdbinit
-
 EXTRA_DIST = make-gas.com m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c
-
 DISTCLEANFILES = targ-cpu.h obj-format.h targ-env.h itbl-cpu.h cgen-desc.h
 
-
 # Now figure out from those variables how to compile and link.
 BASEDIR = $(srcdir)/..
 BFDDIR = $(BASEDIR)/bfd
@@ -658,19 +701,16 @@ INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(srcdir)/config -I$(INCDIR)
 # when building dependencies, because the dependency building is done
 # in a subdirectory.
 DEP_INCLUDES = -D_GNU_SOURCE -I.. -I$${srcdir} -I../../bfd -I$${srcdir}/config -I$${srcdir}/../include -I$${srcdir}/.. -I$${srcdir}/../bfd -I$${srcdir}/../intl -I../../intl -DLOCALEDIR="\"$(prefix)/share/locale\""
-
 DEP_FLAGS = -DBFD_ASSEMBLER -DOBJ_MAYBE_ELF \
        -I. -I.. -I$${srcdir} -I../../bfd $(DEP_INCLUDES)
 
 
-
 # How to link with both our special library facilities
 # and the system's installed libraries.
 GASLIBS = @OPCODES_LIB@ @BFDLIB@ ../libiberty/libiberty.a
 
 # Files to be copied away after each stage in building.
 STAGESTUFF = *.o $(noinst_PROGRAMS)
-
 as_new_SOURCES = $(GAS_CFILES)
 as_new_LDADD = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
        $(extra_objects) $(GASLIBS) $(INTLLIBS) $(LIBM)
@@ -678,47 +718,35 @@ as_new_LDADD = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
 as_new_DEPENDENCIES = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
        $(extra_objects) $(GASLIBS) $(INTLDEPS)
 
-
 EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \
           echo $${rootme}/../expect/expect ; \
           else echo expect ; fi`
 
-
 RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \
                echo $${srcdir}/../dejagnu/runtest ; else echo runtest; \
           fi`
 
 RUNTESTFLAGS = 
 
-
 # The m68k operand parser.
 EXTRA_as_new_SOURCES = config/m68k-parse.y
-
-
-# stand-alone itbl assembler & disassembler
-EXTRA_PROGRAMS = itbl-test
 itbl_test_SOURCES = itbl-parse.y itbl-lex.l
 itbl_test_LDADD = itbl-tops.o itbl-test.o $(GASLIBS) @LEXLIB@
 
-
 # CGEN interface.
 CGEN_CPU_PREFIX = @cgen_cpu_prefix@
 
-
 # Remake the info files.
 MOSTLYCLEANFILES = $(STAGESTUFF) core stamp-mk.com \
        testsuite/*.o testsuite/*.out testsuite/gas.log testsuite/gas.sum \
        testsuite/site.exp site.bak site.exp stage stage1 stage2
 
-
 CLEANFILES = dep.sed DEPTC DEPTCA DEPOBJ DEPOBJA DEP2 DEP2A DEP1 DEPA DEP DEPDIR
-
 against = stage2
-
 DEP_FILE_DEPS = $(CFILES) $(HFILES) $(TARGET_CPU_CFILES) \
        $(TARGET_CPU_HFILES) $(OBJ_FORMAT_CFILES) $(OBJ_FORMAT_HFILES)
 
-
+CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in
 AMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.
 DEPTC_a29k_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
   $(srcdir)/config/tc-a29k.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
@@ -2512,79 +2540,43 @@ DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \
 
 DEP_cris_multi = $(DEP_cris_aout) $(DEP_cris_elf)
 BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = gdb.ini .gdbinit po/Makefile.in
-EXTRA_PROGRAMS = itbl-test$(EXEEXT)
-noinst_PROGRAMS = as-new$(EXEEXT)
-PROGRAMS = $(noinst_PROGRAMS)
-
-am__objects_1 = app.$(OBJEXT) as.$(OBJEXT) atof-generic.$(OBJEXT) \
-       bignum-copy.$(OBJEXT) cond.$(OBJEXT) depend.$(OBJEXT) \
-       dwarf2dbg.$(OBJEXT) dw2gencfi.$(OBJEXT) ecoff.$(OBJEXT) \
-       ehopt.$(OBJEXT) expr.$(OBJEXT) flonum-copy.$(OBJEXT) \
-       flonum-konst.$(OBJEXT) flonum-mult.$(OBJEXT) frags.$(OBJEXT) \
-       hash.$(OBJEXT) input-file.$(OBJEXT) input-scrub.$(OBJEXT) \
-       listing.$(OBJEXT) literal.$(OBJEXT) macro.$(OBJEXT) \
-       messages.$(OBJEXT) output-file.$(OBJEXT) read.$(OBJEXT) \
-       sb.$(OBJEXT) stabs.$(OBJEXT) subsegs.$(OBJEXT) \
-       symbols.$(OBJEXT) write.$(OBJEXT)
-am_as_new_OBJECTS = $(am__objects_1)
-as_new_OBJECTS = $(am_as_new_OBJECTS)
-as_new_LDFLAGS =
-am_itbl_test_OBJECTS = itbl-parse.$(OBJEXT) itbl-lex.$(OBJEXT)
-itbl_test_OBJECTS = $(am_itbl_test_OBJECTS)
-itbl_test_DEPENDENCIES = itbl-tops.o itbl-test.o \
-       ../libiberty/libiberty.a
-itbl_test_LDFLAGS =
-SCRIPTS = $(noinst_SCRIPTS)
-
-
-DEFAULT_INCLUDES =  -I. -I$(srcdir) -I.
-depcomp =
-am__depfiles_maybe =
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
-       $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(AM_LDFLAGS) $(LDFLAGS) -o $@
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
-LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
-YLWRAP = $(top_srcdir)/../ylwrap
-DIST_SOURCES = $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) \
-       $(itbl_test_SOURCES)
-
-RECURSIVE_TARGETS = install-info-recursive info-recursive dvi-recursive \
-       pdf-recursive ps-recursive uninstall-info-recursive \
-       all-recursive install-data-recursive install-exec-recursive \
-       installdirs-recursive install-recursive uninstall-recursive \
-       check-recursive installcheck-recursive
-SOURCES = $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) $(itbl_test_SOURCES)
-
 all: config.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
 .SUFFIXES: .c .l .lo .o .obj .y
-
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+am--refresh:
+       @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus '; \
+             cd $(srcdir) && $(AUTOMAKE) --cygnus  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus  Makefile'; \
        cd $(top_srcdir) && \
          $(AUTOMAKE) --cygnus  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
 
-$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        $(SHELL) ./config.status --recheck
-$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
-       cd $(srcdir) && $(AUTOCONF)
 
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
        cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 
 config.h: stamp-h1
@@ -2596,16 +2588,16 @@ config.h: stamp-h1
 stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status
        @rm -f stamp-h1
        cd $(top_builddir) && $(SHELL) ./config.status config.h
-
-$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
        cd $(top_srcdir) && $(AUTOHEADER)
-       touch $(srcdir)/config.in
+       rm -f stamp-h1
+       touch $@
 
 distclean-hdr:
        -rm -f config.h stamp-h1
-gdb.ini: $(top_builddir)/config.status gdbinit.in
+gdb.ini: $(top_builddir)/config.status $(srcdir)/gdbinit.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
-.gdbinit: $(top_builddir)/config.status gdbinit.in
+.gdbinit: $(top_builddir)/config.status $(srcdir)/gdbinit.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 po/Makefile.in: $(top_builddir)/config.status $(top_srcdir)/po/Make-in
        cd $(top_builddir) && $(SHELL) ./config.status $@
@@ -2624,27 +2616,27 @@ itbl-test$(EXEEXT): $(itbl_test_OBJECTS) $(itbl_test_DEPENDENCIES)
        $(LINK) $(itbl_test_LDFLAGS) $(itbl_test_OBJECTS) $(itbl_test_LDADD) $(LIBS)
 
 mostlyclean-compile:
-       -rm -f *.$(OBJEXT) core *.core
+       -rm -f *.$(OBJEXT)
 
 distclean-compile:
        -rm -f *.tab.c
 
 .c.o:
-       $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+       $(COMPILE) -c $<
 
 .c.obj:
-       $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+       $(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
-       $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
+       $(LTCOMPILE) -c -o $@ $<
 
 .l.c:
-       $(LEXCOMPILE) `test -f $< || echo '$(srcdir)/'`$<
+       $(LEXCOMPILE) $<
        sed '/^#/ s|$(LEX_OUTPUT_ROOT)\.c|$@|' $(LEX_OUTPUT_ROOT).c >$@
        rm -f $(LEX_OUTPUT_ROOT).c
 
 .y.c:
-       $(SHELL) $(YLWRAP) `test -f '$<' || echo '$(srcdir)/'`$< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+       $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -2715,14 +2707,6 @@ ctags-recursive:
          test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
        done
 
-ETAGS = etags
-ETAGSFLAGS =
-
-CTAGS = ctags
-CTAGSFLAGS =
-
-tags: TAGS
-
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
@@ -2731,6 +2715,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
          $(AWK) '    { files[$$0] = 1; } \
               END { for (i in files) print i; }'`; \
        mkid -fID $$unique
+tags: TAGS
 
 TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
@@ -2756,7 +2741,6 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
        test -z "$(ETAGS_ARGS)$$tags$$unique" \
          || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
             $$tags $$unique
-
 ctags: CTAGS
 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
@@ -2779,8 +2763,6 @@ GTAGS:
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-DEJATOOL = $(PACKAGE)
-RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
 site.exp: Makefile
        @echo 'Making a new site.exp file...'
        @echo '## these variables are automatically generated by make ##' >site.tmp
@@ -2812,6 +2794,7 @@ check: check-recursive
 all-am: Makefile $(PROGRAMS) $(SCRIPTS) config.h
 installdirs: installdirs-recursive
 installdirs-am:
+install: install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
 uninstall: uninstall-recursive
@@ -2822,7 +2805,7 @@ install-am: all-am
 installcheck: installcheck-recursive
 install-strip:
        $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         INSTALL_STRIP_FLAG=-s \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
          `test -z '$(STRIP)' || \
            echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -2857,6 +2840,8 @@ dvi: dvi-recursive
 
 dvi-am:
 
+html: html-recursive
+
 info: info-recursive
 
 info-am:
@@ -2865,7 +2850,7 @@ install-data-am:
 
 install-exec-am: install-exec-local
 
-install-info:
+install-info: install-info-recursive
 
 install-man:
 
@@ -2894,33 +2879,25 @@ uninstall-am:
 
 uninstall-info: uninstall-info-recursive
 
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-DEJAGNU \
-       check-am clean clean-generic clean-libtool clean-noinstPROGRAMS \
-       clean-recursive ctags ctags-recursive distclean \
-       distclean-DEJAGNU distclean-compile distclean-generic \
-       distclean-hdr distclean-libtool distclean-recursive \
-       distclean-tags dvi dvi-am dvi-recursive info info-am \
-       info-recursive install install-am install-data install-data-am \
-       install-data-recursive install-exec install-exec-am \
-       install-exec-local install-exec-recursive install-info \
-       install-info-am install-man install-recursive install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
-       installdirs-recursive maintainer-clean maintainer-clean-generic \
-       maintainer-clean-recursive mostlyclean mostlyclean-compile \
-       mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
-       pdf pdf-am pdf-recursive ps ps-am ps-recursive tags \
-       tags-recursive uninstall uninstall-am uninstall-info-am \
-       uninstall-info-recursive uninstall-recursive
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+       check-DEJAGNU check-am clean clean-generic clean-libtool \
+       clean-noinstPROGRAMS clean-recursive ctags ctags-recursive \
+       distclean distclean-DEJAGNU distclean-compile \
+       distclean-generic distclean-hdr distclean-libtool \
+       distclean-recursive distclean-tags dvi dvi-am html html-am \
+       info info-am install install-am install-data install-data-am \
+       install-exec install-exec-am install-exec-local install-info \
+       install-info-am install-man install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic maintainer-clean-recursive \
+       mostlyclean mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am uninstall-info-am
 
 po/POTFILES.in: @MAINT@ Makefile
        for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \
          && mv tmp $(srcdir)/po/POTFILES.in
 
-# We want install to imply install-info as per GNU standards, despite the
-# cygnus option.
-install: install-recursive install-info
-install-info: install-info-recursive
-
 $(srcdir)/make-gas.com: stamp-mk.com
 stamp-mk.com: vmsconf.sh Makefile
        sh $(srcdir)/vmsconf.sh $(GENERIC_OBJS) > new-make.com
@@ -3169,8 +3146,6 @@ de-stage3:
        - (cd stage3 ; rm -f as$(EXEEXT) ; mv -f * ..)
        - rmdir stage3
 
-Makefile: $(BFDDIR)/configure.in
-
 # Automatic dependency computation.  This is a real pain, because the
 # dependencies change based on target_cpu_type and obj_format.
 # Just to make things even more complicated, automake separates the
index a0aa578..6c3e0cd 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.7.8 -*- Autoconf -*-
+# generated automatically by aclocal 1.8.2 -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
 # Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-dnl GAS_CHECK_DECL_NEEDED(name, typedefname, typedef, headers)
-AC_DEFUN(GAS_CHECK_DECL_NEEDED,[
-AC_MSG_CHECKING(whether declaration is required for $1)
-AC_CACHE_VAL(gas_cv_decl_needed_$1,
-AC_TRY_LINK([$4],
-[
-typedef $3;
-$2 x;
-x = ($2) $1;
-], gas_cv_decl_needed_$1=no, gas_cv_decl_needed_$1=yes))dnl
-AC_MSG_RESULT($gas_cv_decl_needed_$1)
-if test $gas_cv_decl_needed_$1 = yes; then
- AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1,
-          [Define if $1 is not declared in system header files.])
-fi
-])dnl
-dnl
-dnl Some non-ANSI preprocessors botch requoting inside strings.  That's bad
-dnl enough, but on some of those systems, the assert macro relies on requoting
-dnl working properly!
-dnl GAS_WORKING_ASSERT
-AC_DEFUN(GAS_WORKING_ASSERT,
-[AC_MSG_CHECKING([for working assert macro])
-AC_CACHE_VAL(gas_cv_assert_ok,
-AC_TRY_LINK([#include <assert.h>
-#include <stdio.h>], [
-/* check for requoting problems */
-static int a, b, c, d;
-static char *s;
-assert (!strcmp(s, "foo bar baz quux"));
-/* check for newline handling */
-assert (a == b
-        || c == d);
-], gas_cv_assert_ok=yes, gas_cv_assert_ok=no))dnl
-AC_MSG_RESULT($gas_cv_assert_ok)
-test $gas_cv_assert_ok = yes || AC_DEFINE(BROKEN_ASSERT, 1, [assert broken?])
-])dnl
-dnl
-dnl Since many Bourne shell implementations lack subroutines, use this
-dnl hack to simplify the code in configure.in.
-dnl GAS_UNIQ(listvar)
-AC_DEFUN(GAS_UNIQ,
-[_gas_uniq_list="[$]$1"
-_gas_uniq_newlist=""
-dnl Protect against empty input list.
-for _gas_uniq_i in _gas_uniq_dummy [$]_gas_uniq_list ; do
-  case [$]_gas_uniq_i in
-  _gas_uniq_dummy) ;;
-  *) case " [$]_gas_uniq_newlist " in
-       *" [$]_gas_uniq_i "*) ;;
-       *) _gas_uniq_newlist="[$]_gas_uniq_newlist [$]_gas_uniq_i" ;;
-     esac ;;
-  esac
-done
-$1=[$]_gas_uniq_newlist
-])dnl
-
-sinclude(../libtool.m4)
-dnl The lines below arrange for aclocal not to bring libtool.m4
-dnl AM_PROG_LIBTOOL into aclocal.m4, while still arranging for automake
-dnl to add a definition of LIBTOOL to Makefile.in.
-ifelse(yes,no,[
-AC_DEFUN([AM_PROG_LIBTOOL],)
-AC_DEFUN([AC_CHECK_LIBM],)
-AC_SUBST(LIBTOOL)
-])
-
-sinclude(../gettext.m4)
-ifelse(yes,no,[
-AC_DEFUN([CY_WITH_NLS],)
-AC_SUBST(INTLLIBS)
-])
-
-# isc-posix.m4 serial 2 (gettext-0.11.2)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License.  As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# This file is not needed with autoconf-2.53 and newer.  Remove it in 2005.
-
-# This test replaces the one in autoconf.
-# Currently this macro should have the same name as the autoconf macro
-# because gettext's gettext.m4 (distributed in the automake package)
-# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
-# give these diagnostics:
-#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
-#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
-
-undefine([AC_ISC_POSIX])
-
-AC_DEFUN([AC_ISC_POSIX],
-  [
-    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
-    AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
-  ]
-)
-
-# Do all the work for Automake.                            -*- Autoconf -*-
-
-# This macro actually does too much some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# 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., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# serial 10
-
-AC_PREREQ([2.54])
-
-# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
-# the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
- AC_REQUIRE([AC_PROG_INSTALL])dnl
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_MISSING_PROG(AMTAR, tar)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-                  [_AM_DEPENDENCIES(CC)],
-                  [define([AC_PROG_CC],
-                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                  [_AM_DEPENDENCIES(CXX)],
-                  [define([AC_PROG_CXX],
-                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-])
-])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $1 | $1:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
-
-# Copyright 2002  Free Software Foundation, Inc.
+#                                                        -*- Autoconf -*-
+# Copyright (C) 2002, 2003  Free Software Foundation, Inc.
+# Generated from amversion.in; do not edit by hand.
 
 # 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
@@ -256,18 +33,18 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
-AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"])
 
 # AM_SET_CURRENT_AUTOMAKE_VERSION
 # -------------------------------
 # Call AM_AUTOMAKE_VERSION so it can be traced.
 # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-        [AM_AUTOMAKE_VERSION([1.7.8])])
+        [AM_AUTOMAKE_VERSION([1.8.2])])
 
-# Helper functions for option handling.                    -*- Autoconf -*-
+# AM_AUX_DIR_EXPAND
 
-# Copyright 2001, 2002  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003 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
@@ -284,36 +61,54 @@ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-# serial 2
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
 #
-# Check to make sure that the build environment is sane.
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
 #
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                              -*- Autoconf -*-
 
-# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1997, 2000, 2001, 2003 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
@@ -330,53 +125,34 @@ AC_DEFUN([_AM_IF_OPTION],
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-# serial 3
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
+# serial 6
 
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
 else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
+  $1_TRUE='#'
+  $1_FALSE=
 fi
-AC_MSG_RESULT(yes)])
-
-#  -*- Autoconf -*-
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.])
+fi])])
 
+# serial 6                                             -*- Autoconf -*-
 
-# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# 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
@@ -393,35 +169,150 @@ AC_MSG_RESULT(yes)])
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-# serial 3
 
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
 
 
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      : > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
 else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
+  am_cv_$1_dependencies_compiler_type=none
 fi
 ])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
 
-# AM_AUX_DIR_EXPAND
 
-# Copyright 2001 Free Software Foundation, Inc.
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking.   -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003 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
@@ -438,57 +329,224 @@ fi
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+       s/\\\\$//
+       p
+       n
+       /\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
 #
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 7
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                            -*- Autoconf -*-
+
+# This macro actually does too much some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 11
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
-# Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
 
-AC_DEFUN([AM_AUX_DIR_EXPAND], [
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
 ])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
 
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
 
-# Copyright 2001 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003 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
@@ -510,45 +568,6 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
 install_sh=${install_sh-"$am_aux_dir/install-sh"}
 AC_SUBST(install_sh)])
 
-# AM_PROG_INSTALL_STRIP
-
-# Copyright 2001 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., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
 #                                                          -*- Autoconf -*-
 # Copyright (C) 2003  Free Software Foundation, Inc.
 
@@ -582,9 +601,9 @@ fi
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
-# serial 5                                             -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation, Inc.
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+# 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
@@ -601,150 +620,25 @@ AC_SUBST([am__leading_dot])])
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
+# serial 4
 
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      : > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    case $depmode in
-    nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    none) break ;;
-    esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored.
-      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking Speeds up one-time builds
-  --enable-dependency-tracking  Do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])
-])
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found.  Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi])
 
-# Generate code to set up dependency tracking.   -*- Autoconf -*-
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
 
-# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+# 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
@@ -759,72 +653,26 @@ AC_SUBST([AMDEPBACKSLASH])
 # 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., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-
-#serial 2
+# 02111-1307, USA.
 
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; do
-  # Strip MF so we end up with the name of the file.
-  mf=`echo "$mf" | sed -e 's/:.*$//'`
-  # Check whether this is an Automake generated Makefile or not.
-  # We used to match only the files named `Makefile.in', but
-  # some people rename them; so instead we look at the file content.
-  # Grep'ing the first line is not enough: some people post-process
-  # each Makefile.in and add a new line on top of each file to say so.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-    dirpart=`AS_DIRNAME("$mf")`
-  else
-    continue
-  fi
-  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
-  # Extract the definition of DEP_FILES from the Makefile without
-  # running `make'.
-  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n -e '/^U = / s///p' < "$mf"`
-  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
-  # We invoke sed twice because it is the simplest approach to
-  # changing $(DEPDIR) to its actual value in the expansion.
-  for file in `sed -n -e '
-    /^DEP_FILES = .*\\\\$/ {
-      s/^DEP_FILES = //
-      :loop
-       s/\\\\$//
-       p
-       n
-       /\\\\$/ b loop
-      p
-    }
-    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`AS_DIRNAME(["$file"])`
-    AS_MKDIR_P([$dirpart/$fdir])
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
-  done
-done
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# serial 3
 
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
 
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
 
 # Check to see how 'make' treats includes.     -*- Autoconf -*-
 
@@ -889,9 +737,10 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
-# AM_CONDITIONAL                                              -*- Autoconf -*-
+#  -*- Autoconf -*-
+
 
-# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1999, 2000, 2001, 2003 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
@@ -908,34 +757,37 @@ rm -f confinc confmf
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-# serial 5
+# serial 3
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
 
-AC_PREREQ(2.52)
 
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-        [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])
-AC_SUBST([$1_FALSE])
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
 else
-  $1_TRUE='#'
-  $1_FALSE=
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
 fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.])
-fi])])
+])
 
-# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
 
-# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004 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
@@ -952,15 +804,92 @@ fi])])
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-AC_PREREQ([2.52])
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p -- . 2>/dev/null; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
 
-# serial 6
+# Copyright (C) 2001, 2002, 2003  Free Software Foundation, Inc.
 
-# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
-AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
+#
+# Check to make sure that the build environment is sane.
+#
 
-# Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 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
@@ -979,23 +908,50 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
 
 # serial 3
 
-AC_PREREQ(2.50)
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
 
-# AM_PROG_LEX
-# -----------
-# Autoconf leaves LEX=: if lex or flex can't be found.  Change that to a
-# "missing" invocation, for better error output.
-AC_DEFUN([AM_PROG_LEX],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
-AC_REQUIRE([AC_PROG_LEX])dnl
-if test "$LEX" = :; then
-  LEX=${am_missing_run}flex
-fi])
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
 
-# Add --enable-maintainer-mode option to configure.
-# From Jim Meyering
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# AM_PROG_INSTALL_STRIP
 
-# Copyright 1996, 1998, 2000, 2001, 2002  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003 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
@@ -1012,22 +968,24 @@ fi])
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-# serial 2
-
-AC_DEFUN([AM_MAINTAINER_MODE],
-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-  dnl maintainer-mode is disabled by default
-  AC_ARG_ENABLE(maintainer-mode,
-[  --enable-maintainer-mode enable make rules and dependencies not useful
-                          (and sometimes confusing) to the casual installer],
-      USE_MAINTAINER_MODE=$enableval,
-      USE_MAINTAINER_MODE=no)
-  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
-  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
-  MAINT=$MAINTAINER_MODE_TRUE
-  AC_SUBST(MAINT)dnl
-]
-)
-
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
+m4_include([acinclude.m4])
index 01ba096..14d48f2 100644 (file)
@@ -787,7 +787,7 @@ obj_elf_section_name (void)
        end++;
       if (end == input_line_pointer)
        {
-         as_warn (_("missing name"));
+         as_bad (_("missing name"));
          ignore_rest_of_line ();
          return NULL;
        }
@@ -938,7 +938,7 @@ obj_elf_section (int push)
              SKIP_WHITESPACE ();
              if (*input_line_pointer != '#')
                {
-                 as_warn (_("character following name is not '#'"));
+                 as_bad (_("character following name is not '#'"));
                  ignore_rest_of_line ();
                  return;
                }
index b99fc0b..60cfa34 100644 (file)
@@ -905,11 +905,6 @@ arc_extoper (opertype)
   name = input_line_pointer;
   c = get_symbol_end ();
   name = xstrdup (name);
-  if (NULL == name)
-    {
-      ignore_rest_of_line ();
-      return;
-    }
 
   p = name;
   while (*p)
@@ -1153,11 +1148,6 @@ arc_extinst (ignore)
   name = input_line_pointer;
   c = get_symbol_end ();
   name = xstrdup (name);
-  if (NULL == name)
-    {
-      ignore_rest_of_line ();
-      return;
-    }
   strcpy (syntax, name);
   name_len = strlen (name);
 
@@ -1305,18 +1295,7 @@ arc_extinst (ignore)
   strcat (syntax, "%S%L");
 
   ext_op = (struct arc_opcode *) xmalloc (sizeof (struct arc_opcode));
-  if (NULL == ext_op)
-    {
-      ignore_rest_of_line ();
-      return;
-    }
-
   ext_op->syntax = xstrdup (syntax);
-  if (NULL == ext_op->syntax)
-    {
-      ignore_rest_of_line ();
-      return;
-    }
 
   ext_op->mask  = I (-1) | ((0x3 == opcode) ? C (-1) : 0);
   ext_op->value = I (opcode) | ((0x3 == opcode) ? C (subopcode) : 0);
index 4b72b56..82b4aa2 100644 (file)
@@ -1,5 +1,5 @@
 /* tc-ldx.c -- Assemble for the DLX
-   Copyright 2002, 2003 Free Software Foundation, Inc.
+   Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -397,6 +397,18 @@ md_assemble (str)
                          the_insn.size, & the_insn.exp, the_insn.pcrel,
                          the_insn.reloc);
 
+      /* Turn off complaints that the addend is
+        too large for things like foo+100000@ha.  */
+      switch (the_insn.reloc)
+       {
+       case RELOC_DLX_HI16:
+       case RELOC_DLX_LO16:
+         fixP->fx_no_overflow = 1;
+         break;
+       default:
+         break;
+       }
+
       switch (fixP->fx_r_type)
        {
        case RELOC_DLX_REL26:
@@ -410,6 +422,7 @@ md_assemble (str)
          bitP->fx_bit_add = 0x03FFFFFF;
          fixP->fx_bit_fixP = bitP;
          break;
+       case RELOC_DLX_LO16:
        case RELOC_DLX_REL16:
          bitP = malloc (sizeof (bit_fixS));
          bitP->fx_bit_size = 16;
@@ -955,7 +968,8 @@ machine_ip (str)
              continue;
            }
 
-         the_insn.reloc        = (the_insn.HI) ? RELOC_DLX_HI16 : RELOC_DLX_16;
+         the_insn.reloc        = (the_insn.HI) ? RELOC_DLX_HI16 
+           : (the_insn.LO ? RELOC_DLX_LO16 : RELOC_DLX_16);
          the_insn.reloc_offset = 2;
          the_insn.size         = 2;
          the_insn.pcrel        = 0;
@@ -1164,6 +1178,7 @@ md_apply_fix3 (fixP, valP, seg)
 
   switch (fixP->fx_r_type)
     {
+    case RELOC_DLX_LO16:
     case RELOC_DLX_REL16:
       if (fixP->fx_bit_fixP != (bit_fixS *) NULL)
        {
index 7fbcd0a..77563a9 100644 (file)
@@ -1399,6 +1399,8 @@ cons_fix_new_hppa (frag, where, size, exp)
   /* Get a base relocation type.  */
   if (is_DP_relative (*exp))
     rel_type = R_HPPA_GOTOFF;
+  else if (is_PC_relative (*exp))
+    rel_type = R_HPPA_PCREL_CALL;
   else if (is_complex (*exp))
     rel_type = R_HPPA_COMPLEX;
   else
@@ -6386,6 +6388,7 @@ pa_comm (unused)
 
   if (symbol)
     {
+      symbol_get_bfdsym (symbol)->flags |= BSF_OBJECT;
       S_SET_VALUE (symbol, size);
       S_SET_SEGMENT (symbol, bfd_und_section_ptr);
       S_SET_EXTERNAL (symbol);
index fe66ffa..f5526c9 100644 (file)
@@ -636,6 +636,9 @@ static struct gr {
   valueT value;
 } gr_values[128] = {{ 1, 0, 0 }};
 
+/* Remember the alignment frag.  */
+static fragS *align_frag;
+
 /* These are the routines required to output the various types of
    unwind records.  */
 
@@ -702,6 +705,7 @@ static int ar_is_in_integer_unit PARAMS ((int regnum));
 static void set_section PARAMS ((char *name));
 static unsigned int set_regstack PARAMS ((unsigned int, unsigned int,
                                          unsigned int, unsigned int));
+static void dot_align (int);
 static void dot_radix PARAMS ((int));
 static void dot_special_section PARAMS ((int));
 static void dot_proc PARAMS ((int));
@@ -898,9 +902,10 @@ static void process_unw_records PARAMS ((unw_rec_list *, vbyte_func));
 static int calc_record_size PARAMS ((unw_rec_list *));
 static void set_imask PARAMS ((unw_rec_list *, unsigned long, unsigned long, unsigned int));
 static unsigned long slot_index PARAMS ((unsigned long, fragS *,
-                                        unsigned long, fragS *));
+                                        unsigned long, fragS *,
+                                        int));
 static unw_rec_list *optimize_unw_records PARAMS ((unw_rec_list *));
-static void fixup_unw_records PARAMS ((unw_rec_list *));
+static void fixup_unw_records PARAMS ((unw_rec_list *, int));
 static int convert_expr_to_ab_reg PARAMS ((expressionS *, unsigned int *, unsigned int *));
 static int convert_expr_to_xy_reg PARAMS ((expressionS *, unsigned int *, unsigned int *));
 static void generate_unwind_image PARAMS ((const char *));
@@ -1092,14 +1097,36 @@ ia64_flush_insns ()
      here.  Give an error for others.  */
   for (ptr = unwind.current_entry; ptr; ptr = ptr->next)
     {
-      if (ptr->r.type == prologue || ptr->r.type == prologue_gr
-         || ptr->r.type == body || ptr->r.type == endp)
+      switch (ptr->r.type)
        {
+       case prologue:
+       case prologue_gr:
+       case body:
+       case endp:
          ptr->slot_number = (unsigned long) frag_more (0);
          ptr->slot_frag = frag_now;
+         break;
+
+         /* Allow any record which doesn't have a "t" field (i.e.,
+            doesn't relate to a particular instruction).  */
+       case unwabi:
+       case br_gr:
+       case copy_state:
+       case fr_mem:
+       case frgr_mem:
+       case gr_gr:
+       case gr_mem:
+       case label_state:
+       case rp_br:
+       case spill_base:
+       case spill_mask:
+         /* nothing */
+         break;
+
+       default:
+         as_bad (_("Unwind directive not followed by an instruction."));
+         break;
        }
-      else
-       as_bad (_("Unwind directive not followed by an instruction."));
     }
   unwind.current_entry = NULL;
 
@@ -1109,9 +1136,8 @@ ia64_flush_insns ()
     as_bad ("qualifying predicate not followed by instruction");
 }
 
-void
-ia64_do_align (nbytes)
-     int nbytes;
+static void
+ia64_do_align (int nbytes)
 {
   char *saved_input_line_pointer = input_line_pointer;
 
@@ -2590,14 +2616,16 @@ set_imask (region, regmask, t, type)
 
 /* Return the number of instruction slots from FIRST_ADDR to SLOT_ADDR.
    SLOT_FRAG is the frag containing SLOT_ADDR, and FIRST_FRAG is the frag
-   containing FIRST_ADDR.  */
+   containing FIRST_ADDR.  If BEFORE_RELAX, then we use worst-case estimates
+   for frag sizes.  */
 
 unsigned long
-slot_index (slot_addr, slot_frag, first_addr, first_frag)
+slot_index (slot_addr, slot_frag, first_addr, first_frag, before_relax)
      unsigned long slot_addr;
      fragS *slot_frag;
      unsigned long first_addr;
      fragS *first_frag;
+     int before_relax;
 {
   unsigned long index = 0;
 
@@ -2612,10 +2640,10 @@ slot_index (slot_addr, slot_frag, first_addr, first_frag)
     {
       unsigned long start_addr = (unsigned long) &first_frag->fr_literal;
 
-      if (finalize_syms)
+      if (! before_relax)
        {
-         /* We can get the final addresses only after relaxation is
-            done. */
+         /* We can get the final addresses only during and after
+            relaxation.  */
          if (first_frag->fr_next && first_frag->fr_next->fr_address)
            index += 3 * ((first_frag->fr_next->fr_address
                           - first_frag->fr_address
@@ -2694,8 +2722,9 @@ optimize_unw_records (list)
    within each record to generate an image.  */
 
 static void
-fixup_unw_records (list)
+fixup_unw_records (list, before_relax)
      unw_rec_list *list;
+     int before_relax;
 {
   unw_rec_list *ptr, *region = 0;
   unsigned long first_addr = 0, rlen = 0, t;
@@ -2706,7 +2735,7 @@ fixup_unw_records (list)
       if (ptr->slot_number == SLOT_NUM_NOT_SET)
        as_bad (" Insn slot not set in unwind record.");
       t = slot_index (ptr->slot_number, ptr->slot_frag,
-                     first_addr, first_frag);
+                     first_addr, first_frag, before_relax);
       switch (ptr->r.type)
        {
        case prologue:
@@ -2730,7 +2759,8 @@ fixup_unw_records (list)
                  last_frag = last->slot_frag;
                  break;
                }
-           size = slot_index (last_addr, last_frag, first_addr, first_frag);
+           size = slot_index (last_addr, last_frag, first_addr, first_frag,
+                              before_relax);
            rlen = ptr->r.record.r.rlen = size;
            if (ptr->r.type == body)
              /* End of region.  */
@@ -2830,6 +2860,35 @@ fixup_unw_records (list)
     }
 }
 
+/* Estimate the size of a frag before relaxing.  We only have one type of frag
+   to handle here, which is the unwind info frag.  */
+
+int
+ia64_estimate_size_before_relax (fragS *frag,
+                                asection *segtype ATTRIBUTE_UNUSED)
+{
+  unw_rec_list *list;
+  int len, size, pad;
+
+  /* ??? This code is identical to the first part of ia64_convert_frag.  */
+  list = (unw_rec_list *) frag->fr_opcode;
+  fixup_unw_records (list, 0);
+
+  len = calc_record_size (list);
+  /* pad to pointer-size boundary.  */
+  pad = len % md.pointer_size;
+  if (pad != 0)
+    len += md.pointer_size - pad;
+  /* Add 8 for the header + a pointer for the personality offset.  */
+  size = len + 8 + md.pointer_size;
+
+  /* fr_var carries the max_chars that we created the fragment with.
+     We must, of course, have allocated enough memory earlier.  */
+  assert (frag->fr_var >= size);
+
+  return frag->fr_fix + size;
+}
+
 /* This function converts a rs_machine_dependent variant frag into a
   normal fill frag with the unwind image from the the record list.  */
 void
@@ -2839,8 +2898,9 @@ ia64_convert_frag (fragS *frag)
   int len, size, pad;
   valueT flag_value;
 
+  /* ??? This code is identical to ia64_estimate_size_before_relax.  */
   list = (unw_rec_list *) frag->fr_opcode;
-  fixup_unw_records (list);
+  fixup_unw_records (list, 0);
 
   len = calc_record_size (list);
   /* pad to pointer-size boundary.  */
@@ -2974,6 +3034,14 @@ convert_expr_to_xy_reg (e, xy, regp)
 }
 
 static void
+dot_align (int arg)
+{
+  /* The current frag is an alignment frag.  */
+  align_frag = frag_now;
+  s_align_bytes (arg);
+}
+
+static void
 dot_radix (dummy)
      int dummy ATTRIBUTE_UNUSED;
 {
@@ -3264,7 +3332,7 @@ generate_unwind_image (text_name)
 
   /* Generate the unwind record.  */
   list = optimize_unw_records (unwind.list);
-  fixup_unw_records (list);
+  fixup_unw_records (list, 1);
   size = calc_record_size (list);
 
   if (size > 0 || unwind.force_unwind_entry)
@@ -3549,7 +3617,7 @@ dot_saveb (dummy)
     add_unwind_entry (output_br_mem (brmask));
 
   if (!is_end_of_line[sep] && !is_it_end_of_statement ())
-    ignore_rest_of_line ();
+    demand_empty_rest_of_line ();
 }
 
 static void
@@ -3581,7 +3649,7 @@ dot_spill (dummy)
 
   sep = parse_operand (&e);
   if (!is_end_of_line[sep] && !is_it_end_of_statement ())
-    ignore_rest_of_line ();
+    demand_empty_rest_of_line ();
 
   if (e.X_op != O_constant)
     as_bad ("Operand to .spill must be a constant");
@@ -3857,7 +3925,7 @@ dot_unwabi (dummy)
     }
   sep = parse_operand (&e2);
   if (!is_end_of_line[sep] && !is_it_end_of_statement ())
-    ignore_rest_of_line ();
+    demand_empty_rest_of_line ();
 
   if (e1.X_op != O_constant)
     {
@@ -3952,7 +4020,7 @@ dot_prologue (dummy)
        as_bad ("No second operand to .prologue");
       sep = parse_operand (&e2);
       if (!is_end_of_line[sep] && !is_it_end_of_statement ())
-       ignore_rest_of_line ();
+       demand_empty_rest_of_line ();
 
       if (e1.X_op == O_constant)
        {
@@ -4900,7 +4968,7 @@ const pseudo_typeS md_pseudo_table[] =
     { "lb", dot_scope, 0 },
     { "le", dot_scope, 1 },
 #endif
-    { "align", s_align_bytes, 0 },
+    { "align", dot_align, 0 },
     { "regstk", dot_regstk, 0 },
     { "rotr", dot_rot, DYNREG_GR },
     { "rotf", dot_rot, DYNREG_FR },
@@ -9933,7 +10001,27 @@ md_assemble (str)
   flags = idesc->flags;
 
   if ((flags & IA64_OPCODE_FIRST) != 0)
-    insn_group_break (1, 0, 0);
+    {
+      /* The alignment frag has to end with a stop bit only if the
+        next instruction after the alignment directive has to be
+        the first instruction in an instruction group.  */
+      if (align_frag)
+       {
+         while (align_frag->fr_type != rs_align_code)
+           {
+             align_frag = align_frag->fr_next;
+             if (!align_frag)
+               break;
+           }
+         /* align_frag can be NULL if there are directives in
+            between.  */
+         if (align_frag && align_frag->fr_next == frag_now)
+           align_frag->tc_frag_data = 1;
+       }
+
+      insn_group_break (1, 0, 0);
+    }
+  align_frag = NULL;
 
   if ((flags & IA64_OPCODE_NO_PRED) != 0 && qp_regno != 0)
     {
@@ -10766,16 +10854,43 @@ ia64_handle_align (fragp)
   static const unsigned char le_nop[]
     = { 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
        0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00};
+  static const unsigned char le_nop_stop[]
+    = { 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+       0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00};
 
   int bytes;
   char *p;
+  const unsigned char *nop;
 
   if (fragp->fr_type != rs_align_code)
     return;
 
+  /* Check if this frag has to end with a stop bit.  */
+  nop = fragp->tc_frag_data ? le_nop_stop : le_nop;
+
   bytes = fragp->fr_next->fr_address - fragp->fr_address - fragp->fr_fix;
   p = fragp->fr_literal + fragp->fr_fix;
 
+  /* If no paddings are needed, we check if we need a stop bit.  */ 
+  if (!bytes && fragp->tc_frag_data)
+    {
+      if (fragp->fr_fix < 16)
+#if 1
+       /* FIXME: It won't work with
+          .align 16
+          alloc r32=ar.pfs,1,2,4,0
+        */
+       ;
+#else
+       as_bad_where (fragp->fr_file, fragp->fr_line,
+                     _("Can't add stop bit to mark end of instruction group"));
+#endif
+      else
+       /* Bundles are always in little-endian byte order. Make sure
+          the previous bundle has the stop bit.  */
+       *(p - 16) |= 1;
+    }
+
   /* Make sure we are on a 16-byte boundary, in case someone has been
      putting data into a text section.  */
   if (bytes & 15)
@@ -10788,7 +10903,7 @@ ia64_handle_align (fragp)
     }
 
   /* Instruction bundles are always little-endian.  */
-  memcpy (p, le_nop, 16);
+  memcpy (p, nop, 16);
   fragp->fr_var = 16;
 }
 
index d1a04ee..dcc2c29 100644 (file)
@@ -86,7 +86,6 @@ struct ia64_fix
     enum ia64_opnd opnd;
   };
 
-extern void ia64_do_align PARAMS((int n));
 extern void ia64_end_of_source PARAMS((void));
 extern void ia64_start_line PARAMS((void));
 extern int ia64_unrecognized_line PARAMS((int ch));
@@ -115,6 +114,7 @@ extern void ia64_handle_align PARAMS ((fragS *f));
 extern void ia64_after_parse_args PARAMS ((void));
 extern void ia64_dwarf2_emit_offset PARAMS ((symbolS *, unsigned int));
 extern void ia64_check_label PARAMS ((symbolS *));
+extern int ia64_estimate_size_before_relax (fragS *, asection *);
 extern void ia64_convert_frag (fragS *);
 
 #define md_end()                               ia64_end_of_source ()
@@ -138,7 +138,7 @@ extern void ia64_convert_frag (fragS *);
 #define md_create_short_jump(p,f,t,fr,s) \
                                        as_fatal ("ia64_create_short_jump")
 #define md_estimate_size_before_relax(f,s) \
-                                       (f)->fr_var
+                                       ia64_estimate_size_before_relax(f,s)
 #define md_elf_section_letter          ia64_elf_section_letter
 #define md_elf_section_flags           ia64_elf_section_flags
 #define TC_FIX_TYPE                    struct ia64_fix
@@ -154,6 +154,10 @@ extern void ia64_convert_frag (fragS *);
 #define TC_DWARF2_EMIT_OFFSET          ia64_dwarf2_emit_offset
 #define tc_check_label(l)              ia64_check_label (l)
 
+/* Record if an alignment frag should end with a stop bit.  */
+#define TC_FRAG_TYPE                   int
+#define TC_FRAG_INIT(FRAGP)            do {(FRAGP)->tc_frag_data = 0;}while (0)
+
 #define MAX_MEM_FOR_RS_ALIGN_CODE  (15 + 16)
 
 #define WORKING_DOT_WORD       /* don't do broken word processing for now */
index 0ab650a..9f591d3 100644 (file)
@@ -1,5 +1,5 @@
 /* tc-iq2000.c -- Assembler for the Sitera IQ2000.
-   Copyright (C) 2003 Free Software Foundation.
+   Copyright (C) 2003, 2004 Free Software Foundation.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -357,7 +357,7 @@ static const char * li_expn    = "\n\
  ori \\rt,%0,\\imm\n\
  .elseif (\\imm & 0xffff0000 == 0xffff0000)\n\
  addi \\rt,%0,\\imm\n\
- .elseif (\\imm & 0x0000ffff == 0)
+ .elseif (\\imm & 0x0000ffff == 0)\n\
  lui \\rt,%uhi(\\imm)\n\
  .else\n\
  lui \\rt,%uhi(\\imm)\n\
index 86daea0..66366a5 100644 (file)
@@ -1,6 +1,6 @@
 /* tc-ppc.c -- Assemble for the PowerPC or POWER (RS/6000)
-   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+   2004 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
 
    This file is part of GAS, the GNU Assembler.
@@ -183,7 +183,7 @@ const char EXP_CHARS[] = "eE";
    as in 0d1.0.  */
 const char FLT_CHARS[] = "dD";
 
-/* '+' and '-' can be used as postfix predicate predictors for conditional 
+/* '+' and '-' can be used as postfix predicate predictors for conditional
    branches.  So they need to be accepted as symbol characters.  */
 const char ppc_symbol_chars[] = "+-";
 
@@ -1493,8 +1493,10 @@ ppc_elf_suffix (str_p, exp_p)
 {
   struct map_bfd {
     char *string;
-    int length;
-    int reloc;
+    unsigned int length : 8;
+    unsigned int valid32 : 1;
+    unsigned int valid64 : 1;
+    unsigned int reloc;
   };
 
   char ident[20];
@@ -1504,97 +1506,97 @@ ppc_elf_suffix (str_p, exp_p)
   int len;
   const struct map_bfd *ptr;
 
-#define MAP(str,reloc) { str, sizeof (str)-1, reloc }
+#define MAP(str, reloc)   { str, sizeof (str) - 1, 1, 1, reloc }
+#define MAP32(str, reloc) { str, sizeof (str) - 1, 1, 0, reloc }
+#define MAP64(str, reloc) { str, sizeof (str) - 1, 0, 1, reloc }
 
   static const struct map_bfd mapping[] = {
-    MAP ("l",                  (int) BFD_RELOC_LO16),
-    MAP ("h",                  (int) BFD_RELOC_HI16),
-    MAP ("ha",                 (int) BFD_RELOC_HI16_S),
-    MAP ("brtaken",            (int) BFD_RELOC_PPC_B16_BRTAKEN),
-    MAP ("brntaken",           (int) BFD_RELOC_PPC_B16_BRNTAKEN),
-    MAP ("got",                        (int) BFD_RELOC_16_GOTOFF),
-    MAP ("got@l",              (int) BFD_RELOC_LO16_GOTOFF),
-    MAP ("got@h",              (int) BFD_RELOC_HI16_GOTOFF),
-    MAP ("got@ha",             (int) BFD_RELOC_HI16_S_GOTOFF),
-    MAP ("fixup",              (int) BFD_RELOC_CTOR),
-    MAP ("plt",                        (int) BFD_RELOC_24_PLT_PCREL),
-    MAP ("pltrel24",           (int) BFD_RELOC_24_PLT_PCREL),
-    MAP ("copy",               (int) BFD_RELOC_PPC_COPY),
-    MAP ("globdat",            (int) BFD_RELOC_PPC_GLOB_DAT),
-    MAP ("local24pc",          (int) BFD_RELOC_PPC_LOCAL24PC),
-    MAP ("local",              (int) BFD_RELOC_PPC_LOCAL24PC),
-    MAP ("pltrel",             (int) BFD_RELOC_32_PLT_PCREL),
-    MAP ("plt@l",              (int) BFD_RELOC_LO16_PLTOFF),
-    MAP ("plt@h",              (int) BFD_RELOC_HI16_PLTOFF),
-    MAP ("plt@ha",             (int) BFD_RELOC_HI16_S_PLTOFF),
-    MAP ("sdarel",             (int) BFD_RELOC_GPREL16),
-    MAP ("sectoff",            (int) BFD_RELOC_16_BASEREL),
-    MAP ("sectoff@l",          (int) BFD_RELOC_LO16_BASEREL),
-    MAP ("sectoff@h",          (int) BFD_RELOC_HI16_BASEREL),
-    MAP ("sectoff@ha",         (int) BFD_RELOC_HI16_S_BASEREL),
-    MAP ("naddr",              (int) BFD_RELOC_PPC_EMB_NADDR32),
-    MAP ("naddr16",            (int) BFD_RELOC_PPC_EMB_NADDR16),
-    MAP ("naddr@l",            (int) BFD_RELOC_PPC_EMB_NADDR16_LO),
-    MAP ("naddr@h",            (int) BFD_RELOC_PPC_EMB_NADDR16_HI),
-    MAP ("naddr@ha",           (int) BFD_RELOC_PPC_EMB_NADDR16_HA),
-    MAP ("sdai16",             (int) BFD_RELOC_PPC_EMB_SDAI16),
-    MAP ("sda2rel",            (int) BFD_RELOC_PPC_EMB_SDA2REL),
-    MAP ("sda2i16",            (int) BFD_RELOC_PPC_EMB_SDA2I16),
-    MAP ("sda21",              (int) BFD_RELOC_PPC_EMB_SDA21),
-    MAP ("mrkref",             (int) BFD_RELOC_PPC_EMB_MRKREF),
-    MAP ("relsect",            (int) BFD_RELOC_PPC_EMB_RELSEC16),
-    MAP ("relsect@l",          (int) BFD_RELOC_PPC_EMB_RELST_LO),
-    MAP ("relsect@h",          (int) BFD_RELOC_PPC_EMB_RELST_HI),
-    MAP ("relsect@ha",         (int) BFD_RELOC_PPC_EMB_RELST_HA),
-    MAP ("bitfld",             (int) BFD_RELOC_PPC_EMB_BIT_FLD),
-    MAP ("relsda",             (int) BFD_RELOC_PPC_EMB_RELSDA),
-    MAP ("xgot",               (int) BFD_RELOC_PPC_TOC16),
-    MAP ("tls",                        (int) BFD_RELOC_PPC_TLS),
-    MAP ("dtpmod",             (int) BFD_RELOC_PPC_DTPMOD),
-    MAP ("dtprel",             (int) BFD_RELOC_PPC_DTPREL),
-    MAP ("dtprel@l",           (int) BFD_RELOC_PPC_DTPREL16_LO),
-    MAP ("dtprel@h",           (int) BFD_RELOC_PPC_DTPREL16_HI),
-    MAP ("dtprel@ha",          (int) BFD_RELOC_PPC_DTPREL16_HA),
-    MAP ("tprel",              (int) BFD_RELOC_PPC_TPREL),
-    MAP ("tprel@l",            (int) BFD_RELOC_PPC_TPREL16_LO),
-    MAP ("tprel@h",            (int) BFD_RELOC_PPC_TPREL16_HI),
-    MAP ("tprel@ha",           (int) BFD_RELOC_PPC_TPREL16_HA),
-    MAP ("got@tlsgd",          (int) BFD_RELOC_PPC_GOT_TLSGD16),
-    MAP ("got@tlsgd@l",                (int) BFD_RELOC_PPC_GOT_TLSGD16_LO),
-    MAP ("got@tlsgd@h",                (int) BFD_RELOC_PPC_GOT_TLSGD16_HI),
-    MAP ("got@tlsgd@ha",       (int) BFD_RELOC_PPC_GOT_TLSGD16_HA),
-    MAP ("got@tlsld",          (int) BFD_RELOC_PPC_GOT_TLSLD16),
-    MAP ("got@tlsld@l",                (int) BFD_RELOC_PPC_GOT_TLSLD16_LO),
-    MAP ("got@tlsld@h",                (int) BFD_RELOC_PPC_GOT_TLSLD16_HI),
-    MAP ("got@tlsld@ha",       (int) BFD_RELOC_PPC_GOT_TLSLD16_HA),
-    MAP ("got@dtprel",         (int) BFD_RELOC_PPC_GOT_DTPREL16),
-    MAP ("got@dtprel@l",       (int) BFD_RELOC_PPC_GOT_DTPREL16_LO),
-    MAP ("got@dtprel@h",       (int) BFD_RELOC_PPC_GOT_DTPREL16_HI),
-    MAP ("got@dtprel@ha",      (int) BFD_RELOC_PPC_GOT_DTPREL16_HA),
-    MAP ("got@tprel",          (int) BFD_RELOC_PPC_GOT_TPREL16),
-    MAP ("got@tprel@l",                (int) BFD_RELOC_PPC_GOT_TPREL16_LO),
-    MAP ("got@tprel@h",                (int) BFD_RELOC_PPC_GOT_TPREL16_HI),
-    MAP ("got@tprel@ha",       (int) BFD_RELOC_PPC_GOT_TPREL16_HA),
-    /* The following are only valid for ppc64.  Negative values are
-       used instead of a flag.  */
-    MAP ("higher",             - (int) BFD_RELOC_PPC64_HIGHER),
-    MAP ("highera",            - (int) BFD_RELOC_PPC64_HIGHER_S),
-    MAP ("highest",            - (int) BFD_RELOC_PPC64_HIGHEST),
-    MAP ("highesta",           - (int) BFD_RELOC_PPC64_HIGHEST_S),
-    MAP ("tocbase",            - (int) BFD_RELOC_PPC64_TOC),
-    MAP ("toc",                        - (int) BFD_RELOC_PPC_TOC16),
-    MAP ("toc@l",              - (int) BFD_RELOC_PPC64_TOC16_LO),
-    MAP ("toc@h",              - (int) BFD_RELOC_PPC64_TOC16_HI),
-    MAP ("toc@ha",             - (int) BFD_RELOC_PPC64_TOC16_HA),
-    MAP ("dtprel@higher",      - (int) BFD_RELOC_PPC64_DTPREL16_HIGHER),
-    MAP ("dtprel@highera",     - (int) BFD_RELOC_PPC64_DTPREL16_HIGHERA),
-    MAP ("dtprel@highest",     - (int) BFD_RELOC_PPC64_DTPREL16_HIGHEST),
-    MAP ("dtprel@highesta",    - (int) BFD_RELOC_PPC64_DTPREL16_HIGHESTA),
-    MAP ("tprel@higher",       - (int) BFD_RELOC_PPC64_TPREL16_HIGHER),
-    MAP ("tprel@highera",      - (int) BFD_RELOC_PPC64_TPREL16_HIGHERA),
-    MAP ("tprel@highest",      - (int) BFD_RELOC_PPC64_TPREL16_HIGHEST),
-    MAP ("tprel@highesta",     - (int) BFD_RELOC_PPC64_TPREL16_HIGHESTA),
-    { (char *) 0, 0,           (int) BFD_RELOC_UNUSED }
+    MAP ("l",                  BFD_RELOC_LO16),
+    MAP ("h",                  BFD_RELOC_HI16),
+    MAP ("ha",                 BFD_RELOC_HI16_S),
+    MAP ("brtaken",            BFD_RELOC_PPC_B16_BRTAKEN),
+    MAP ("brntaken",           BFD_RELOC_PPC_B16_BRNTAKEN),
+    MAP ("got",                        BFD_RELOC_16_GOTOFF),
+    MAP ("got@l",              BFD_RELOC_LO16_GOTOFF),
+    MAP ("got@h",              BFD_RELOC_HI16_GOTOFF),
+    MAP ("got@ha",             BFD_RELOC_HI16_S_GOTOFF),
+    MAP ("plt@l",              BFD_RELOC_LO16_PLTOFF),
+    MAP ("plt@h",              BFD_RELOC_HI16_PLTOFF),
+    MAP ("plt@ha",             BFD_RELOC_HI16_S_PLTOFF),
+    MAP ("copy",               BFD_RELOC_PPC_COPY),
+    MAP ("globdat",            BFD_RELOC_PPC_GLOB_DAT),
+    MAP ("sectoff",            BFD_RELOC_16_BASEREL),
+    MAP ("sectoff@l",          BFD_RELOC_LO16_BASEREL),
+    MAP ("sectoff@h",          BFD_RELOC_HI16_BASEREL),
+    MAP ("sectoff@ha",         BFD_RELOC_HI16_S_BASEREL),
+    MAP ("tls",                        BFD_RELOC_PPC_TLS),
+    MAP ("dtpmod",             BFD_RELOC_PPC_DTPMOD),
+    MAP ("dtprel",             BFD_RELOC_PPC_DTPREL),
+    MAP ("dtprel@l",           BFD_RELOC_PPC_DTPREL16_LO),
+    MAP ("dtprel@h",           BFD_RELOC_PPC_DTPREL16_HI),
+    MAP ("dtprel@ha",          BFD_RELOC_PPC_DTPREL16_HA),
+    MAP ("tprel",              BFD_RELOC_PPC_TPREL),
+    MAP ("tprel@l",            BFD_RELOC_PPC_TPREL16_LO),
+    MAP ("tprel@h",            BFD_RELOC_PPC_TPREL16_HI),
+    MAP ("tprel@ha",           BFD_RELOC_PPC_TPREL16_HA),
+    MAP ("got@tlsgd",          BFD_RELOC_PPC_GOT_TLSGD16),
+    MAP ("got@tlsgd@l",                BFD_RELOC_PPC_GOT_TLSGD16_LO),
+    MAP ("got@tlsgd@h",                BFD_RELOC_PPC_GOT_TLSGD16_HI),
+    MAP ("got@tlsgd@ha",       BFD_RELOC_PPC_GOT_TLSGD16_HA),
+    MAP ("got@tlsld",          BFD_RELOC_PPC_GOT_TLSLD16),
+    MAP ("got@tlsld@l",                BFD_RELOC_PPC_GOT_TLSLD16_LO),
+    MAP ("got@tlsld@h",                BFD_RELOC_PPC_GOT_TLSLD16_HI),
+    MAP ("got@tlsld@ha",       BFD_RELOC_PPC_GOT_TLSLD16_HA),
+    MAP ("got@dtprel",         BFD_RELOC_PPC_GOT_DTPREL16),
+    MAP ("got@dtprel@l",       BFD_RELOC_PPC_GOT_DTPREL16_LO),
+    MAP ("got@dtprel@h",       BFD_RELOC_PPC_GOT_DTPREL16_HI),
+    MAP ("got@dtprel@ha",      BFD_RELOC_PPC_GOT_DTPREL16_HA),
+    MAP ("got@tprel",          BFD_RELOC_PPC_GOT_TPREL16),
+    MAP ("got@tprel@l",                BFD_RELOC_PPC_GOT_TPREL16_LO),
+    MAP ("got@tprel@h",                BFD_RELOC_PPC_GOT_TPREL16_HI),
+    MAP ("got@tprel@ha",       BFD_RELOC_PPC_GOT_TPREL16_HA),
+    MAP32 ("fixup",            BFD_RELOC_CTOR),
+    MAP32 ("plt",              BFD_RELOC_24_PLT_PCREL),
+    MAP32 ("pltrel24",         BFD_RELOC_24_PLT_PCREL),
+    MAP32 ("local24pc",                BFD_RELOC_PPC_LOCAL24PC),
+    MAP32 ("local",            BFD_RELOC_PPC_LOCAL24PC),
+    MAP32 ("pltrel",           BFD_RELOC_32_PLT_PCREL),
+    MAP32 ("sdarel",           BFD_RELOC_GPREL16),
+    MAP32 ("naddr",            BFD_RELOC_PPC_EMB_NADDR32),
+    MAP32 ("naddr16",          BFD_RELOC_PPC_EMB_NADDR16),
+    MAP32 ("naddr@l",          BFD_RELOC_PPC_EMB_NADDR16_LO),
+    MAP32 ("naddr@h",          BFD_RELOC_PPC_EMB_NADDR16_HI),
+    MAP32 ("naddr@ha",         BFD_RELOC_PPC_EMB_NADDR16_HA),
+    MAP32 ("sdai16",           BFD_RELOC_PPC_EMB_SDAI16),
+    MAP32 ("sda2rel",          BFD_RELOC_PPC_EMB_SDA2REL),
+    MAP32 ("sda2i16",          BFD_RELOC_PPC_EMB_SDA2I16),
+    MAP32 ("sda21",            BFD_RELOC_PPC_EMB_SDA21),
+    MAP32 ("mrkref",           BFD_RELOC_PPC_EMB_MRKREF),
+    MAP32 ("relsect",          BFD_RELOC_PPC_EMB_RELSEC16),
+    MAP32 ("relsect@l",                BFD_RELOC_PPC_EMB_RELST_LO),
+    MAP32 ("relsect@h",                BFD_RELOC_PPC_EMB_RELST_HI),
+    MAP32 ("relsect@ha",       BFD_RELOC_PPC_EMB_RELST_HA),
+    MAP32 ("bitfld",           BFD_RELOC_PPC_EMB_BIT_FLD),
+    MAP32 ("relsda",           BFD_RELOC_PPC_EMB_RELSDA),
+    MAP32 ("xgot",             BFD_RELOC_PPC_TOC16),
+    MAP64 ("higher",           BFD_RELOC_PPC64_HIGHER),
+    MAP64 ("highera",          BFD_RELOC_PPC64_HIGHER_S),
+    MAP64 ("highest",          BFD_RELOC_PPC64_HIGHEST),
+    MAP64 ("highesta",         BFD_RELOC_PPC64_HIGHEST_S),
+    MAP64 ("tocbase",          BFD_RELOC_PPC64_TOC),
+    MAP64 ("toc",              BFD_RELOC_PPC_TOC16),
+    MAP64 ("toc@l",            BFD_RELOC_PPC64_TOC16_LO),
+    MAP64 ("toc@h",            BFD_RELOC_PPC64_TOC16_HI),
+    MAP64 ("toc@ha",           BFD_RELOC_PPC64_TOC16_HA),
+    MAP64 ("dtprel@higher",    BFD_RELOC_PPC64_DTPREL16_HIGHER),
+    MAP64 ("dtprel@highera",   BFD_RELOC_PPC64_DTPREL16_HIGHERA),
+    MAP64 ("dtprel@highest",   BFD_RELOC_PPC64_DTPREL16_HIGHEST),
+    MAP64 ("dtprel@highesta",  BFD_RELOC_PPC64_DTPREL16_HIGHESTA),
+    MAP64 ("tprel@higher",     BFD_RELOC_PPC64_TPREL16_HIGHER),
+    MAP64 ("tprel@highera",    BFD_RELOC_PPC64_TPREL16_HIGHERA),
+    MAP64 ("tprel@highest",    BFD_RELOC_PPC64_TPREL16_HIGHEST),
+    MAP64 ("tprel@highesta",   BFD_RELOC_PPC64_TPREL16_HIGHESTA),
+    { (char *) 0, 0, 0, 0,     BFD_RELOC_UNUSED }
   };
 
   if (*str++ != '@')
@@ -1615,17 +1617,11 @@ ppc_elf_suffix (str_p, exp_p)
   for (ptr = &mapping[0]; ptr->length > 0; ptr++)
     if (ch == ptr->string[0]
        && len == ptr->length
-       && memcmp (ident, ptr->string, ptr->length) == 0)
+       && memcmp (ident, ptr->string, ptr->length) == 0
+       && (ppc_obj64 ? ptr->valid64 : ptr->valid32))
       {
        int reloc = ptr->reloc;
 
-       if (reloc < 0)
-         {
-           if (!ppc_obj64)
-             return BFD_RELOC_UNUSED;
-           reloc = -reloc;
-         }
-
        if (!ppc_obj64)
          if (exp_p->X_add_number != 0
              && (reloc == (int) BFD_RELOC_16_GOTOFF
@@ -5901,7 +5897,7 @@ md_apply_fix3 (fixP, valP, seg)
          if (fixP->fx_pcrel)
            {
              /* This can occur if there is a bug in the input assembler, eg:
-                ".byte <undefined_symbol> - ."  */
+                ".byte <undefined_symbol> - ."  */
              if (fixP->fx_addsy)
                as_bad (_("Unable to handle reference to symbol %s"),
                        S_GET_NAME (fixP->fx_addsy));
@@ -6052,15 +6048,15 @@ tc_ppc_regname_to_dw2regnum (const char *regname)
       if (p == q || *q || regnum >= 32)
        return -1;
       if (regname[0] == 'f')
-        regnum += 32;
+       regnum += 32;
       else if (regname[0] == 'v')
-        regnum += 77;
+       regnum += 77;
     }
   else if (regname[0] == 'c' && regname[1] == 'r')
     {
       p = regname + 2 + (regname[2] == '.');
       if (p[0] < '0' || p[0] > '7' || p[1])
-        return -1;
+       return -1;
       regnum = p[0] - '0' + 68;
     }
   return regnum;
index ef51bca..c450eae 100644 (file)
@@ -1614,9 +1614,15 @@ s390_insn (ignore)
   expression (&exp);
   if (exp.X_op == O_constant)
     {
-      if (   (opformat->oplen == 6 && exp.X_op > 0 && exp.X_op < (1ULL << 48))
-         || (opformat->oplen == 4 && exp.X_op > 0 && exp.X_op < (1ULL << 32))
-         || (opformat->oplen == 2 && exp.X_op > 0 && exp.X_op < (1ULL << 16)))
+      if (   (   opformat->oplen == 6
+             && exp.X_add_number >= 0
+             && (addressT) exp.X_add_number < (1ULL << 48))
+         || (   opformat->oplen == 4
+             && exp.X_add_number >= 0
+             && (addressT) exp.X_add_number < (1ULL << 32))
+         || (   opformat->oplen == 2
+             && exp.X_add_number >= 0
+             && (addressT) exp.X_add_number < (1ULL << 16)))
        md_number_to_chars (insn, exp.X_add_number, opformat->oplen);
       else
        as_bad (_("Invalid .insn format\n"));
index 45698d5..424aeb7 100644 (file)
@@ -1,6 +1,6 @@
 /* tc-sh.c -- Assemble code for the Renesas / SuperH SH
-   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+   2003, 2004  Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -132,6 +132,10 @@ int sh_relax;              /* set if -relax seen */
 
 int sh_small;
 
+/* Flag to generate relocations against symbol values for local symbols.  */
+
+static int dont_adjust_reloc_32;
+
 /* preset architecture set, if given; zero otherwise.  */
 
 static int preset_target_arch;
@@ -2143,6 +2147,7 @@ build_Mytes (sh_opcode_info *opcode, sh_operand_info *operand)
          switch (i)
            {
            case REG_N:
+           case REG_N_D:
              nbuf[index] = reg_n;
              break;
            case REG_M:
@@ -2159,6 +2164,9 @@ build_Mytes (sh_opcode_info *opcode, sh_operand_info *operand)
            case REG_B:
              nbuf[index] = reg_b | 0x08;
              break;
+           case REG_N_B01:
+             nbuf[index] = reg_n | 0x01;
+             break;
            case IMM0_4BY4:
              insert (output + low_byte, BFD_RELOC_SH_IMM4BY4, 0, operand);
              break;
@@ -2840,6 +2848,7 @@ struct option md_longopts[] =
 #define OPTION_SMALL (OPTION_LITTLE + 1)
 #define OPTION_DSP (OPTION_SMALL + 1)
 #define OPTION_ISA                    (OPTION_DSP + 1)
+#define OPTION_RENESAS (OPTION_ISA + 1)
 
   {"relax", no_argument, NULL, OPTION_RELAX},
   {"big", no_argument, NULL, OPTION_BIG},
@@ -2847,8 +2856,10 @@ struct option md_longopts[] =
   {"small", no_argument, NULL, OPTION_SMALL},
   {"dsp", no_argument, NULL, OPTION_DSP},
   {"isa",                    required_argument, NULL, OPTION_ISA},
+  {"renesas", no_argument, NULL, OPTION_RENESAS},
+
 #ifdef HAVE_SH64
-#define OPTION_ABI                    (OPTION_ISA + 1)
+#define OPTION_ABI                    (OPTION_RENESAS + 1)
 #define OPTION_NO_MIX                 (OPTION_ABI + 1)
 #define OPTION_SHCOMPACT_CONST_CRANGE (OPTION_NO_MIX + 1)
 #define OPTION_NO_EXPAND              (OPTION_SHCOMPACT_CONST_CRANGE + 1)
@@ -2889,6 +2900,10 @@ md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
       preset_target_arch = arch_sh1_up & ~arch_sh2e_up;
       break;
 
+    case OPTION_RENESAS:
+      dont_adjust_reloc_32 = 1;
+      break;
+
     case OPTION_ISA:
       if (strcasecmp (arg, "sh4") == 0)
        preset_target_arch = arch_sh4;
@@ -2972,6 +2987,8 @@ SH options:\n\
 -little                        generate little endian code\n\
 -big                   generate big endian code\n\
 -relax                 alter jump instructions for long displacements\n\
+-renesas               disable optimization with section symbol for\n\
+                       compatibility with Renesas assembler.\n\
 -small                 align sections to 4 byte boundaries, not 16\n\
 -dsp                   enable sh-dsp insns, and disable floating-point ISAs.\n"));
 #ifdef HAVE_SH64
@@ -3521,6 +3538,7 @@ sh_fix_adjustable (fixS *fixP)
   if (fixP->fx_r_type == BFD_RELOC_32_PLT_PCREL
       || fixP->fx_r_type == BFD_RELOC_32_GOT_PCREL
       || fixP->fx_r_type == BFD_RELOC_SH_GOTPC
+      || ((fixP->fx_r_type == BFD_RELOC_32) && dont_adjust_reloc_32)
       || fixP->fx_r_type == BFD_RELOC_RVA)
     return 0;
 
@@ -4188,10 +4206,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
     rel->addend = 0;
 
   rel->howto = bfd_reloc_type_lookup (stdoutput, r_type);
-#ifdef OBJ_ELF
-  if (rel->howto->type == R_SH_IND12W)
-      rel->addend += fixp->fx_offset - 4;
-#endif
+
   if (rel->howto == NULL)
     {
       as_bad_where (fixp->fx_file, fixp->fx_line,
@@ -4201,6 +4216,10 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
       rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
       assert (rel->howto != NULL);
     }
+#ifdef OBJ_ELF
+  else if (rel->howto->type == R_SH_IND12W)
+    rel->addend += fixp->fx_offset - 4;
+#endif
 
   return rel;
 }
index d663f72..33f93f1 100755 (executable)
@@ -2661,6 +2661,31 @@ else
   fi
 fi
 
+if mkdir -p -- . 2>/dev/null; then
+  # Keeping the `.' argument allows $(mkdir_p) to be used without
+  # argument.  Indeed, we sometimes output rules like
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.
+  # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+  # expensive solution, as it forces Make to start a sub-shell.)
+  mkdir_p='mkdir -p -- .'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
index b53c17a..d0f3cb9 100644 (file)
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.7.8 from Makefile.am.
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
 # @configure_input@
 
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004  Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,7 +13,6 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
-
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
@@ -21,7 +20,6 @@ pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 top_builddir = ..
-
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
 install_sh_DATA = $(install_sh) -c -m 644
@@ -38,6 +36,42 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/../libtool.m4 $(top_srcdir)/../gettext.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+INFO_DEPS = $(srcdir)/as.info
+TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo
+DVIS = as.dvi
+PDFS = as.pdf
+PSS = as.ps
+HTMLS = as.html
+TEXINFOS = as.texinfo
+TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then \
+             echo $(top_srcdir)/../texinfo/util/texi2dvi; \
+           else \
+             echo texi2dvi; \
+           fi`
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+man1dir = $(mandir)/man1
+am__installdirs = $(DESTDIR)$(man1dir)
+NROFF = nroff
+MANS = $(man_MANS)
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALL_OBJ_DEPS = @ALL_OBJ_DEPS@
@@ -150,6 +184,7 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localstatedir = @localstatedir@
 mandir = @mandir@
+mkdir_p = @mkdir_p@
 obj_format = @obj_format@
 oldincludedir = @oldincludedir@
 prefix = @prefix@
@@ -164,25 +199,19 @@ target_cpu_type = @target_cpu_type@
 target_os = @target_os@
 target_vendor = @target_vendor@
 te_file = @te_file@
-
-AUTOMAKE_OPTIONS = cygnus
+AUTOMAKE_OPTIONS = 1.8 cygnus
 
 # What version of the manual you want; "all" includes everything
 CONFIG = all
 
 # Options to extract the man page from as.texinfo
 MANCONF = -Dman
-
 TEXI2POD = perl $(top_srcdir)/../etc/texi2pod.pl
-
 POD2MAN = pod2man --center="GNU Development Tools" \
        --release="binutils-$(VERSION)" --section=1
 
-
 man_MANS = as.1
-
 info_TEXINFOS = as.texinfo 
-
 CPU_DOCS = \
        c-a29k.texi \
        c-alpha.texi \
@@ -219,40 +248,46 @@ CPU_DOCS = \
        c-z8k.texi
 
 
-
 # This one isn't ready for prime time yet.  Not even a little bit.
 noinst_TEXINFOS = internals.texi
-
 DISTCLEANFILES = asconfig.texi
-
 MAINTAINERCLEANFILES = gasver.texi
-subdir = doc
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-depcomp =
-am__depfiles_maybe =
-DIST_SOURCES =
-TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
-am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo
-INFO_DEPS = as.info
-DVIS = as.dvi
-PDFS = as.pdf
-PSS = as.ps
-TEXINFOS = as.texinfo
-
-NROFF = nroff
-MANS = $(man_MANS)
+BASEDIR = $(srcdir)/../..
+BFDDIR = $(BASEDIR)/bfd
+CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .dvi .info .pdf .ps .texinfo
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+.SUFFIXES: .dvi .html .info .pdf .ps .texinfo
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus  doc/Makefile'; \
        cd $(top_srcdir) && \
          $(AUTOMAKE) --cygnus  doc/Makefile
-Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
-       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -264,29 +299,48 @@ distclean-libtool:
        -rm -f libtool
 
 .texinfo.info:
-       @rm -f $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]
-       $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-        -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
+       restore=: && \
+       backupdir="$(am__leading_dot)am$$$$" && \
+       am__cwd=`pwd` && cd $(srcdir) && \
+       rm -rf $$backupdir && mkdir $$backupdir && \
+       for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+         if test -f $$f; then \
+           mv $$f $$backupdir; \
+           restore=mv; \
+         fi; \
+       done; \
+       cd "$$am__cwd"; \
+       if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+        -o $@ $<; \
+       then \
+         rc=0; \
+         cd $(srcdir); \
+       else \
+         rc=$$?; \
+         cd $(srcdir) && \
+         $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+       fi; \
+       rm -rf $$backupdir; \
+       exit $$rc
 
 .texinfo.dvi:
        TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
        MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-       $(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$<
+       $(TEXI2DVI) $<
 
 .texinfo.pdf:
        TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
        MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
-       $(TEXI2PDF) `test -f '$<' || echo '$(srcdir)/'`$<
+       $(TEXI2PDF) $<
+
+.texinfo.html:
+       $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+        -o $@ $<
+       if test ! -d $@ && test -d $(@:.html=); then \
+         mv $(@:.html=) $@; else :; fi
+$(srcdir)/as.info: as.texinfo 
 as.pdf: as.texinfo 
-
-TEXI2DVI = `if test -f $(top_srcdir)/../texinfo/util/texi2dvi; then \
-             echo $(top_srcdir)/../texinfo/util/texi2dvi; \
-           else \
-             echo texi2dvi; \
-           fi`
-
-TEXI2PDF = $(TEXI2DVI) --pdf --batch
-DVIPS = dvips
+as.html: as.texinfo 
 .dvi.ps:
        $(DVIPS) -o $@ $<
 
@@ -313,8 +367,12 @@ uninstall-info-am:
        done
 
 dist-info: $(INFO_DEPS)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
        list='$(INFO_DEPS)'; \
        for base in $$list; do \
+         case $$base in \
+           $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+         esac; \
          if test -f $$base; then d=.; else d=$(srcdir); fi; \
          for file in $$d/$$base*; do \
            relfile=`expr "$$file" : "$$d/\(.*\)"`; \
@@ -324,8 +382,8 @@ dist-info: $(INFO_DEPS)
        done
 
 mostlyclean-aminfo:
-       -rm -f as.aux as.cp as.cps as.fn as.fns as.ky as.log as.pg as.pgs as.tmp \
-         as.toc as.tp as.tps as.vr as.vrs as.dvi as.pdf as.ps
+       -rm -rf as.aux as.cp as.cps as.fn as.fns as.ky as.log as.pg as.pgs as.tmp \
+         as.toc as.tp as.tps as.vr as.vrs as.dvi as.pdf as.ps as.html
 
 maintainer-clean-aminfo:
        @list='$(INFO_DEPS)'; for i in $$list; do \
@@ -335,11 +393,9 @@ maintainer-clean-aminfo:
        done
 
 clean-info: mostlyclean-aminfo
-
-man1dir = $(mandir)/man1
 install-man1: $(man1_MANS) $(man_MANS)
        @$(NORMAL_INSTALL)
-       $(mkinstalldirs) $(DESTDIR)$(man1dir)
+       $(mkdir_p) $(DESTDIR)$(man1dir)
        @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
        l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
        for i in $$l2; do \
@@ -391,9 +447,9 @@ CTAGS:
 check-am:
 check: check-am
 all-am: Makefile $(MANS)
-
 installdirs:
-       $(mkinstalldirs) $(DESTDIR)$(man1dir)
+       $(mkdir_p) $(DESTDIR)$(man1dir)
+install: install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -404,7 +460,7 @@ install-am: all-am
 installcheck: installcheck-am
 install-strip:
        $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         INSTALL_STRIP_FLAG=-s \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
          `test -z '$(STRIP)' || \
            echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -431,21 +487,27 @@ dvi: dvi-am
 
 dvi-am: $(DVIS)
 
-info: info-am
+html: html-am
+
+html-am: $(HTMLS)
 
 info-am: $(INFO_DEPS)
 
-install-data-am: install-man
+install-data-am: install-data-local install-man
 
 install-exec-am:
 
-install-info:
+install-info: install-info-am
 
 install-info-am: $(INFO_DEPS)
        @$(NORMAL_INSTALL)
-       $(mkinstalldirs) $(DESTDIR)$(infodir)
-       @list='$(INFO_DEPS)'; \
+       $(mkdir_p) $(DESTDIR)$(infodir)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       list='$(INFO_DEPS)'; \
        for file in $$list; do \
+         case $$file in \
+           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+         esac; \
          if test -f $$file; then d=.; else d=$(srcdir); fi; \
          file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
          for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
@@ -495,15 +557,15 @@ uninstall-man: uninstall-man1
 
 .PHONY: all all-am check check-am clean clean-generic clean-info \
        clean-libtool dist-info distclean distclean-generic \
-       distclean-libtool dvi dvi-am info info-am install install-am \
-       install-data install-data-am install-exec install-exec-am \
-       install-info install-info-am install-man install-man1 \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-aminfo \
-       maintainer-clean-generic mostlyclean mostlyclean-aminfo \
-       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       uninstall uninstall-am uninstall-info-am uninstall-man \
-       uninstall-man1
+       distclean-libtool dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-data-local \
+       install-exec install-exec-am install-info install-info-am \
+       install-man install-man1 install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-aminfo maintainer-clean-generic mostlyclean \
+       mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
+       uninstall-man uninstall-man1
 
 
 asconfig.texi: $(CONFIG).texi
@@ -521,8 +583,7 @@ as.dvi: $(srcdir)/as.texinfo asconfig.texi gasver.texi $(CPU_DOCS)
 
 # We want install to imply install-info as per GNU standards, despite the
 # cygnus option.
-install: install-info
-install-info: install-info-am
+install-data-local: install-info
 
 # Maintenance
 
index 0ddda04..7e9ea30 100644 (file)
@@ -1,4 +1,4 @@
-@c Copyright 1991, 1992, 1993, 1994, 1995, 1998
+@c Copyright 1991, 1992, 1993, 1994, 1995, 1998, 2004
 @c Free Software Foundation, Inc.
 @c This is part of the GAS manual.
 @c For copying conditions, see the file as.texinfo.
@@ -181,7 +181,7 @@ Define @var{name} as a label for the current assembly location.
 Not yet supported; the assembler rejects programs containing this directive.
 
 @item .origin @var{lc}
-Advance location counter to @var{lc}. Synonym for the @code{@value{as}}
+Advance location counter to @var{lc}. Synonym for the @code{@value{AS}}
 portable directive @code{.org}.
 
 @item .param @var{name} [ ,@var{typ} ]  [ ,@var{param}=@var{r} ]
index 509106f..b08f325 100644 (file)
@@ -29,6 +29,7 @@
 @kindex -relax
 @kindex -small
 @kindex -dsp
+@kindex -renesas
 
 @item -little
 Generate little endian code.
@@ -45,6 +46,10 @@ Align sections to 4 byte boundaries, not 16.
 @item -dsp
 Enable sh-dsp insns, and disable sh3e / sh4 insns.
 
+@item -renesas
+Disable optimization with section symbol for compatibility with
+Renesas assembler.
+
 @item -isa=sh4 | sh4a
 Specify the sh4 or sh4a instruction set.
 @item -isa=dsp
index 3be7e20..ff0aa35 100644 (file)
@@ -857,6 +857,7 @@ output_cie (struct cie_entry *cie)
     for (i = cie->first; i != cie->last; i = i->next)
       output_cfi_insn (i);
 
+  frag_align (2, 0, 0);
   symbol_set_value_now (end_address);
 }
 
@@ -906,8 +907,7 @@ output_fde (struct fde_entry *fde, struct cie_entry *cie,
   for (; first; first = first->next)
     output_cfi_insn (first);
 
-  if (align)
-    frag_align (align, 0, 0);
+  frag_align (align, 0, 0);
   symbol_set_value_now (end_address);
 }
 
@@ -1035,7 +1035,7 @@ cfi_finish (void)
       struct cie_entry *cie;
 
       cie = select_cie_for_fde (fde, &first);
-      output_fde (fde, cie, first, fde->next == NULL ? EH_FRAME_ALIGNMENT : 0);
+      output_fde (fde, cie, first, fde->next == NULL ? EH_FRAME_ALIGNMENT : 2);
     }
 
   flag_traditional_format = save_flag_traditional_format;
index a18d6d8..b7cc1b8 100644 (file)
@@ -1021,6 +1021,9 @@ operand (expressionS *expressionP)
       break;
 
     case '+':
+      /* Do not accept ++e as +(+e) */
+      if (input_line_pointer[1] == '+')
+       goto target_op;
       (void) operand (expressionP);
       break;
 
@@ -1038,6 +1041,10 @@ operand (expressionS *expressionP)
     case '!':
     case '-':
       {
+        /* Do not accept --e as -(-e) */
+       if (c == '-' && input_line_pointer[1] == '-')
+         goto target_op;
+       
        operand (expressionP);
        if (expressionP->X_op == O_constant)
          {
@@ -1289,6 +1296,7 @@ operand (expressionS *expressionP)
        }
       else
        {
+       target_op:
          /* Let the target try to parse it.  Success is indicated by changing
             the X_op field to something other than O_absent and pointing
             input_line_pointer past the expression.  If it can't parse the
@@ -1541,6 +1549,13 @@ operator (int *num_chars)
     default:
       return op_encoding[c];
 
+    case '+':
+    case '-':
+      /* Do not allow a++b and a--b to be a + (+b) and a - (-b) */
+      if (input_line_pointer[1] != c)
+       return op_encoding[c];
+      return O_illegal;
+
     case '<':
       switch (input_line_pointer[1])
        {
index f50409c..f97bd25 100644 (file)
@@ -1053,7 +1053,7 @@ read_a_source_file (char *name)
 #endif
          input_line_pointer--;
          /* Report unknown char as ignored.  */
-         ignore_rest_of_line ();
+         demand_empty_rest_of_line ();
        }
 
 #ifdef md_after_pass_hook
@@ -3020,6 +3020,10 @@ s_text (int ignore ATTRIBUTE_UNUSED)
 #endif
 }
 \f
+
+/* Verify that we are at the end of a line.  If not, issue an error and
+   skip to EOL.  */
+
 void
 demand_empty_rest_of_line (void)
 {
@@ -3027,28 +3031,29 @@ demand_empty_rest_of_line (void)
   if (is_end_of_line[(unsigned char) *input_line_pointer])
     input_line_pointer++;
   else
-    ignore_rest_of_line ();
-
-  /* Return having already swallowed end-of-line.  */
-}
-
-void
-ignore_rest_of_line (void)
-{
-  /* For suspect lines: gives warning.  */
-  if (!is_end_of_line[(unsigned char) *input_line_pointer])
     {
       if (ISPRINT (*input_line_pointer))
-       as_warn (_("rest of line ignored; first ignored character is `%c'"),
+       as_bad (_("junk at end of line, first unrecognized character is `%c'"),
                 *input_line_pointer);
       else
-       as_warn (_("rest of line ignored; first ignored character valued 0x%x"),
+       as_bad (_("junk at end of line, first unrecognized character valued 0x%x"),
                 *input_line_pointer);
-
-      while (input_line_pointer < buffer_limit
-            && !is_end_of_line[(unsigned char) *input_line_pointer])
-       input_line_pointer++;
+      ignore_rest_of_line ();
     }
+  
+  /* Return pointing just after end-of-line.  */
+  know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
+}
+
+/* Silently advance to the end of line.  Use this after already having
+   issued an error about something bad.  */
+
+void
+ignore_rest_of_line (void)
+{
+  while (input_line_pointer < buffer_limit
+        && !is_end_of_line[(unsigned char) *input_line_pointer])
+    input_line_pointer++;
 
   input_line_pointer++;
 
@@ -4376,6 +4381,10 @@ s_leb128 (int sign)
   md_flush_pending_output ();
 #endif
 
+#ifdef md_flush_pending_output
+  md_flush_pending_output ();
+#endif
+
   do
     {
       expression (&exp);
@@ -4738,7 +4747,7 @@ demand_copy_string (int *lenP)
     }
   else
     {
-      as_warn (_("missing string"));
+      as_bad (_("missing string"));
       retval = NULL;
       ignore_rest_of_line ();
     }
@@ -4814,7 +4823,7 @@ equals (char *sym_name, int reassign)
   if (flag_mri)
     {
       /* Check garbage after the expression.  */
-      ignore_rest_of_line ();
+      demand_empty_rest_of_line ();
       mri_comment_end (stop, stopc);
     }
 }
index 3d32729..f8acdc8 100644 (file)
@@ -520,7 +520,7 @@ generate_asm_file (int type, char *file)
   char *buf;
   char *tmp = file;
   char *endp = file + strlen (file);
-  char *bufp = buf;
+  char *bufp;
 
   if (last_file != NULL
       && strcmp (last_file, file) == 0)
index 9783ad2..01007e7 100644 (file)
@@ -1,3 +1,41 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-04-01  Asgari Jinia  <asgarij@kpitcummins.com>
+       * gas/sh/renesas-1.s, gas/sh/renesas-1.d: New test for -renesas
+       option.
+       * gas/sh/basic.exp: Run the new test.
+
+       2004-04-01  Dave Korn  <dk@artimi.com>
+       * gas/dlx/alltests.exp: Execute new lohi test.
+       * gas/dlx/lohi.s: New test for spurious lo16/hi16
+       reloc overflow checking.
+       * gas/dlx/lohi.d: New file: expected output.
+       * gas/dlx/lhi.d: Updated to properly expect lo16
+       relocations where asked for.
+       * gas/dlx/itype.d: Likewise.
+       * gas/dlx/lhi.d: Corrected cut+paste error in test name.
+
+       2004-03-23  Andreas Schwab  <schwab@suse.de>
+       * gas/cfi/cfi-m68k.d: Adjust offsets.
+
+       2004-03-08  Andreas Jaeger  <aj@suse.de>
+       * gas/cfi/cfi-s390x-1.d: Adjust offsets.
+
+       2004-03-07  Richard Henderson  <rth@redhat.com>
+       * gas/cfi/cfi-common-2.d, gas/cfi/cfi-i386.d: Adjust offsets.
+
+       2004-03-07  Andreas Jaeger  <aj@suse.de>
+       * gas/cfi/cfi-x86_64.d: Adjust offsets.
+
+       2004-03-07  Richard Henderson  <rth@redhat.com>
+       * gas/alpha/elf-reloc-8.d, gas/cfi/cfi-alpha-1.d,
+       gas/cfi/cfi-alpha-2.d, gas/cfi/cfi-alpha-3.d, gas/cfi/cfi-common-1.d,
+       gas/cfi/cfi-common-2.d, gas/cfi/cfi-common-3.d: Adjust offsets.
+
+       2004-03-03  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+       * gas/sh/sh64/err-dsp.s: Fix expected error message.
+
 2004-03-22  Hans-Peter Nilsson  <hp@axis.com>
 
        * gas/cris/regreg.d: Assemble with --no-mul-bug-abort.
index 32ebf97..8ba78c3 100644 (file)
@@ -311,20 +311,20 @@ OFFSET *TYPE *VALUE
 
 RELOCATION RECORDS FOR \[\.eh_frame\]:
 OFFSET *TYPE *VALUE 
-0*000001b SREL32            \.init\.text
-0*0000031 SREL32            \.init\.text\+0x0*0000050
-0*0000042 SREL32            \.init\.text\+0x0*0000080
-0*0000053 SREL32            \.init\.text\+0x0*00000b0
-0*0000074 SREL32            \.init\.text\+0x0*00002c0
-0*0000092 SREL32            \.init\.text\+0x0*00005a0
-0*00000aa SREL32            \.init\.text\+0x0*00005f0
-0*00000bb SREL32            \.init\.text\+0x0*0000610
-0*00000cc SREL32            \.init\.text\+0x0*0000630
-0*00000e6 SREL32            \.init\.text\+0x0*0000750
-0*000010a SREL32            \.init\.text\+0x0*0000990
-0*0000124 SREL32            \.init\.text\+0x0*0000a10
-0*0000135 SREL32            \.init\.text\+0x0*0000a20
-0*0000146 SREL32            \.init\.text\+0x0*0000a40
-0*000015e SREL32            \.init\.text\+0x0*0000a90
-0*000016f SREL32            \.init\.text\+0x0*0000aa0
-0*0000180 SREL32            \.text
+0*000001c SREL32            \.init\.text
+0*0000034 SREL32            \.init\.text\+0x0*0000050
+0*0000048 SREL32            \.init\.text\+0x0*0000080
+0*000005c SREL32            \.init\.text\+0x0*00000b0
+0*0000080 SREL32            \.init\.text\+0x0*00002c0
+0*00000a0 SREL32            \.init\.text\+0x0*00005a0
+0*00000b8 SREL32            \.init\.text\+0x0*00005f0
+0*00000cc SREL32            \.init\.text\+0x0*0000610
+0*00000e0 SREL32            \.init\.text\+0x0*0000630
+0*00000fc SREL32            \.init\.text\+0x0*0000750
+0*0000120 SREL32            \.init\.text\+0x0*0000990
+0*000013c SREL32            \.init\.text\+0x0*0000a10
+0*0000150 SREL32            \.init\.text\+0x0*0000a20
+0*0000164 SREL32            \.init\.text\+0x0*0000a40
+0*000017c SREL32            \.init\.text\+0x0*0000a90
+0*0000190 SREL32            \.init\.text\+0x0*0000aa0
+0*00001a4 SREL32            \.text
index 73783e9..9568d3b 100644 (file)
@@ -2,7 +2,7 @@
 #name: CFI on alpha
 The section .eh_frame contains:
 
-00000000 0000000f 00000000 CIE
+00000000 00000010 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: 4
@@ -11,12 +11,19 @@ The section .eh_frame contains:
   Augmentation data:     1b
 
   DW_CFA_def_cfa_reg: r30
+  DW_CFA_nop
 
-00000013 00000019 00000017 FDE cie=00000000 pc=0000001b..0000004f
-  DW_CFA_advance_loc: 24 to 00000033
+00000014 00000020 00000018 FDE cie=00000000 pc=0000001c..00000050
+  DW_CFA_advance_loc: 24 to 00000034
   DW_CFA_def_cfa: r15 ofs 32
   DW_CFA_offset: r26 at cfa-32
   DW_CFA_offset: r9 at cfa-24
   DW_CFA_offset: r15 at cfa-16
   DW_CFA_offset: r34 at cfa-8
-
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
index 49f8cce..4a87da2 100644 (file)
@@ -5,5 +5,5 @@
 
 RELOCATION RECORDS FOR \[\.eh_frame\]:
 OFFSET           TYPE              VALUE 
-0*000001b SREL32            \.text
-0*000002c SREL32            \.text\+0x0*0000004
+0*000001c SREL32            \.text
+0*0000030 SREL32            \.text\+0x0*0000004
index 4d8bd88..f3ad084 100644 (file)
@@ -2,7 +2,7 @@
 #name: CFI on alpha, 3
 The section .eh_frame contains:
 
-00000000 0000000f 00000000 CIE
+00000000 00000010 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: 4
@@ -11,26 +11,26 @@ The section .eh_frame contains:
   Augmentation data:     1b
 
   DW_CFA_def_cfa_reg: r30
+  DW_CFA_nop
 
-00000013 00000029 00000017 FDE cie=00000000 pc=0000001b..0000005b
-  DW_CFA_advance_loc: 4 to 0000001f
+00000014 00000028 00000018 FDE cie=00000000 pc=0000001c..0000005c
+  DW_CFA_advance_loc: 4 to 00000020
   DW_CFA_def_cfa_offset: 32
-  DW_CFA_advance_loc: 4 to 00000023
+  DW_CFA_advance_loc: 4 to 00000024
   DW_CFA_offset: r26 at cfa-32
-  DW_CFA_advance_loc: 4 to 00000027
+  DW_CFA_advance_loc: 4 to 00000028
   DW_CFA_offset: r9 at cfa-24
-  DW_CFA_advance_loc: 4 to 0000002b
+  DW_CFA_advance_loc: 4 to 0000002c
   DW_CFA_offset: r15 at cfa-16
-  DW_CFA_advance_loc: 4 to 0000002f
+  DW_CFA_advance_loc: 4 to 00000030
   DW_CFA_offset: r34 at cfa-8
-  DW_CFA_advance_loc: 4 to 00000033
+  DW_CFA_advance_loc: 4 to 00000034
   DW_CFA_def_cfa_reg: r15
-  DW_CFA_advance_loc: 36 to 00000057
+  DW_CFA_advance_loc: 36 to 00000058
   DW_CFA_def_cfa: r30 ofs 0
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
-  DW_CFA_nop
 
index 0634b70..332c477 100644 (file)
@@ -2,7 +2,7 @@
 #name: CFI common 1
 The section .eh_frame contains:
 
-00000000 0000000d 00000000 CIE
+00000000 00000010 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: .*
@@ -10,14 +10,14 @@ The section .eh_frame contains:
   Return address column: .*
   Augmentation data:     1b
 
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
 
-00000011 0000001b 00000015 FDE cie=00000000 pc=.*
+00000014 00000018 00000018 FDE cie=00000000 pc=.*
   DW_CFA_advance_loc: 4 to .*
   DW_CFA_def_cfa: r0 ofs 16
   DW_CFA_offset: r1 at cfa-8
   DW_CFA_advance_loc: 4 to .*
   DW_CFA_def_cfa_offset: 32
   DW_CFA_offset: r2 at cfa-24
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
index 4c50cdb..a1f1d06 100644 (file)
@@ -2,16 +2,15 @@
 #name: CFI common 2
 The section .eh_frame contains:
 
-00000000 0000000d 00000000 CIE
+00000000 00000010 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: .*
   Data alignment factor: .*
   Return address column: .*
   Augmentation data:     1b
-
-
-00000011 0000001[bf] 00000015 FDE cie=00000000 pc=.*
+#...
+00000014 000000[12][c0] 00000018 FDE cie=00000000 pc=.*
   DW_CFA_advance_loc: 4 to .*
   DW_CFA_def_cfa: r0 ofs 16
   DW_CFA_advance_loc: 4 to .*
@@ -22,5 +21,4 @@ The section .eh_frame contains:
   DW_CFA_restore_state
   DW_CFA_advance_loc: 4 to .*
   DW_CFA_def_cfa_offset: 0
-# 64-bit arches will have here 4 times DW_CFA_nop
-#...
+#pass
index 9ddbc45..82a4193 100644 (file)
@@ -2,19 +2,16 @@
 #name: CFI common 3
 The section .eh_frame contains:
 
-00000000 0000000d 00000000 CIE
+00000000 00000010 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: .*
   Data alignment factor: .*
   Return address column: .*
   Augmentation data:     1b
-
-
-00000011 00000013 00000015 FDE cie=00000000 pc=.*
+#...
+00000014 00000010 00000018 FDE cie=00000000 pc=.*
   DW_CFA_advance_loc: 4 to .*
   DW_CFA_remember_state
   DW_CFA_restore_state
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
+#pass
index 2723727..471f5e1 100644 (file)
@@ -2,7 +2,7 @@
 #name: CFI on i386
 The section .eh_frame contains:
 
-00000000 00000012 00000000 CIE
+00000000 00000014 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: 1
@@ -12,29 +12,37 @@ The section .eh_frame contains:
 
   DW_CFA_def_cfa: r4 ofs 4
   DW_CFA_offset: r8 at cfa-4
+  DW_CFA_nop
+  DW_CFA_nop
 
-00000016 00000014 0000001a FDE cie=00000000 pc=0000001e..00000030
-  DW_CFA_advance_loc: 6 to 00000024
+00000018 00000014 0000001c FDE cie=00000000 pc=00000020..00000032
+  DW_CFA_advance_loc: 6 to 00000026
   DW_CFA_def_cfa_offset: 4664
-  DW_CFA_advance_loc: 11 to 0000002f
+  DW_CFA_advance_loc: 11 to 00000031
   DW_CFA_def_cfa_offset: 4
 
-0000002e 00000018 00000032 FDE cie=00000000 pc=00000048..00000055
-  DW_CFA_advance_loc: 1 to 00000049
+00000030 00000018 00000034 FDE cie=00000000 pc=0000004a..00000057
+  DW_CFA_advance_loc: 1 to 0000004b
   DW_CFA_def_cfa_offset: 8
   DW_CFA_offset: r5 at cfa-8
-  DW_CFA_advance_loc: 2 to 0000004b
+  DW_CFA_advance_loc: 2 to 0000004d
   DW_CFA_def_cfa_reg: r5
-  DW_CFA_advance_loc: 9 to 00000054
+  DW_CFA_advance_loc: 9 to 00000056
   DW_CFA_def_cfa_reg: r4
 
-0000004a 00000014 0000004e FDE cie=00000000 pc=00000071..00000081
-  DW_CFA_advance_loc: 2 to 00000073
+0000004c 00000014 00000050 FDE cie=00000000 pc=00000073..00000083
+  DW_CFA_advance_loc: 2 to 00000075
   DW_CFA_def_cfa_reg: r3
-  DW_CFA_advance_loc: 13 to 00000080
+  DW_CFA_advance_loc: 13 to 00000082
   DW_CFA_def_cfa: r4 ofs 4
 
-00000062 0000000d 00000066 FDE cie=00000000 pc=00000099..0000009f
+00000064 00000010 00000068 FDE cie=00000000 pc=0000009b..000000a1
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
 
-00000073 0000000d 00000077 FDE cie=00000000 pc=000000b0..000000bf
+00000078 00000010 0000007c FDE cie=00000000 pc=000000b5..000000c4
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
 
index a728759..ff239f3 100644 (file)
@@ -2,7 +2,7 @@
 #name: CFI on m68k
 The section .eh_frame contains:
 
-00000000 00000012 00000000 CIE
+00000000 00000014 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: 2
@@ -12,22 +12,27 @@ The section .eh_frame contains:
 
   DW_CFA_def_cfa: r15 ofs 4
   DW_CFA_offset: r24 at cfa-4
+  DW_CFA_nop
+  DW_CFA_nop
 
-00000016 00000014 0000001a FDE cie=00000000 pc=0000001e..0000002a
-  DW_CFA_advance_loc: 4 to 00000022
+00000018 00000014 0000001c FDE cie=00000000 pc=00000020..0000002c
+  DW_CFA_advance_loc: 4 to 00000024
   DW_CFA_def_cfa_offset: 4664
-  DW_CFA_advance_loc: 6 to 00000028
+  DW_CFA_advance_loc: 6 to 0000002a
   DW_CFA_def_cfa_offset: 4
 
-0000002e 00000017 00000032 FDE cie=00000000 pc=00000036..00000042
-  DW_CFA_advance_loc: 4 to 0000003a
+00000030 00000018 00000034 FDE cie=00000000 pc=00000038..00000044
+  DW_CFA_advance_loc: 4 to 0000003c
   DW_CFA_def_cfa_offset: 8
   DW_CFA_offset: r14 at cfa-8
   DW_CFA_def_cfa_reg: r14
-  DW_CFA_advance_loc: 6 to 00000040
+  DW_CFA_advance_loc: 6 to 00000042
   DW_CFA_def_cfa_reg: r15
+  DW_CFA_nop
 
-00000049 0000000f 0000004d FDE cie=00000000 pc=00000051..00000055
+0000004c 00000010 00000050 FDE cie=00000000 pc=00000054..00000058
 
   DW_CFA_nop
   DW_CFA_nop
+  DW_CFA_nop
+
index 88438f2..ad67add 100644 (file)
@@ -4,7 +4,7 @@
 
 The section .eh_frame contains:
 
-00000000 00000011 00000000 CIE
+00000000 00000014 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: 1
@@ -13,9 +13,12 @@ The section .eh_frame contains:
   Augmentation data:     1b
 
   DW_CFA_def_cfa: r15 ofs 160
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
 
-00000015 00000027 00000019 FDE cie=00000000 pc=0000001d..0000008d
-  DW_CFA_advance_loc: 6 to 00000023
+00000018 00000024 0000001c FDE cie=00000000 pc=00000020..00000090
+  DW_CFA_advance_loc: 6 to 00000026
   DW_CFA_offset: r15 at cfa-40
   DW_CFA_offset: r14 at cfa-48
   DW_CFA_offset: r13 at cfa-56
@@ -24,11 +27,8 @@ The section .eh_frame contains:
   DW_CFA_offset: r10 at cfa-80
   DW_CFA_offset: r9 at cfa-88
   DW_CFA_offset: r8 at cfa-96
-  DW_CFA_advance_loc: 8 to 0000002b
+  DW_CFA_advance_loc: 8 to 0000002e
   DW_CFA_def_cfa_offset: 320
   DW_CFA_nop
   DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
-  DW_CFA_nop
 
index 17456ae..2b19641 100644 (file)
@@ -2,7 +2,7 @@
 #name: CFI on x86-64
 The section .eh_frame contains:
 
-00000000 00000012 00000000 CIE
+00000000 00000014 00000000 CIE
   Version:               1
   Augmentation:          "zR"
   Code alignment factor: 1
@@ -12,33 +12,41 @@ The section .eh_frame contains:
 
   DW_CFA_def_cfa: r7 ofs 8
   DW_CFA_offset: r16 at cfa-8
+  DW_CFA_nop
+  DW_CFA_nop
 
-00000016 00000014 0000001a FDE cie=00000000 pc=0000001e..00000032
-  DW_CFA_advance_loc: 7 to 00000025
+00000018 00000014 0000001c FDE cie=00000000 pc=00000020..00000034
+  DW_CFA_advance_loc: 7 to 00000027
   DW_CFA_def_cfa_offset: 4668
-  DW_CFA_advance_loc: 12 to 00000031
+  DW_CFA_advance_loc: 12 to 00000033
   DW_CFA_def_cfa_offset: 8
 
-0000002e 00000019 00000032 FDE cie=00000000 pc=00000036..00000045
-  DW_CFA_advance_loc: 1 to 00000037
+00000030 0000001c 00000034 FDE cie=00000000 pc=00000038..00000047
+  DW_CFA_advance_loc: 1 to 00000039
   DW_CFA_def_cfa_offset: 16
   DW_CFA_offset: r6 at cfa-16
-  DW_CFA_advance_loc: 3 to 0000003a
+  DW_CFA_advance_loc: 3 to 0000003c
   DW_CFA_def_cfa_reg: r6
-  DW_CFA_advance_loc: 10 to 00000044
+  DW_CFA_advance_loc: 10 to 00000046
   DW_CFA_def_cfa: r7 ofs 8
+  DW_CFA_nop
+  DW_CFA_nop
+  DW_CFA_nop
 
-0000004b 00000013 0000004f FDE cie=00000000 pc=00000053..00000066
-  DW_CFA_advance_loc: 3 to 00000056
+00000050 00000014 00000054 FDE cie=00000000 pc=00000058..0000006b
+  DW_CFA_advance_loc: 3 to 0000005b
   DW_CFA_def_cfa_reg: r12
-  DW_CFA_advance_loc: 15 to 00000065
+  DW_CFA_advance_loc: 15 to 0000006a
   DW_CFA_def_cfa_reg: r7
+  DW_CFA_nop
 
-00000062 0000000d 00000066 FDE cie=00000000 pc=0000006a..00000070
-
-00000073 00000011 00000077 FDE cie=00000000 pc=0000007b..0000008d
+00000068 00000010 0000006c FDE cie=00000000 pc=00000070..00000076
+  DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
+
+0000007c 00000010 00000080 FDE cie=00000000 pc=00000084..00000096
+  DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
 
index 003448b..cee7f35 100644 (file)
@@ -5,6 +5,7 @@ if [istarget dlx*-*-*] {
     run_dump_test "itype"
     run_dump_test "lhi"
     run_dump_test "load"
+    run_dump_test "lohi"
     run_dump_test "rtype"
     run_dump_test "store"
 }
index 845ae41..1b8e92b 100644 (file)
@@ -16,7 +16,7 @@ Disassembly of section .text:
                        12: R_DLX_RELOC_16      .text
   14:  35 4c 00 78     ori     r12,r10,0x0078
   18:  39 af 00 00     xori    r15,r13,0x0000
-                       1a: R_DLX_RELOC_16      .text
+                       1a: R_DLX_RELOC_16_LO   .text
   1c:  da 30 00 1c     slli    r16,r17,0x001c
                        1e: R_DLX_RELOC_16      .text
   20:  e2 93 00 0f     srai    r19,r20,0x000f
index db3b35d..e855129 100644 (file)
@@ -1,6 +1,6 @@
 #as:
 #objdump: -dr
-#name: itype
+#name: lhi
 
 .*: +file format .*
 
@@ -11,7 +11,7 @@ Disassembly of section .text:
    4:  3c 03 00 00     lhi     r3,0x0000
                        6: R_DLX_RELOC_16_HI    .text
    8:  3c 04 00 00     lhi     r4,0x0000
-                       a: R_DLX_RELOC_16       .text
+                       a: R_DLX_RELOC_16_LO    .text
    c:  3c 04 ff fb     lhi     r4,0xfffb
                        e: R_DLX_RELOC_16       .text
   10:  3c 04 00 0c     lhi     r4,0x000c
@@ -19,5 +19,5 @@ Disassembly of section .text:
   18:  20 04 00 00     addi    r4,r0,0x0000
                        1a: R_DLX_RELOC_16_HI   .text
   1c:  34 84 00 18     ori     r4,r4,0x0018
-                       1e: R_DLX_RELOC_16      .text
+                       1e: R_DLX_RELOC_16_LO   .text
   20:  20 64 00 00     addi    r4,r3,0x0000
index 9d16e0e..1e72ff1 100644 (file)
@@ -157,6 +157,9 @@ if [istarget sh*-*-*] then {
        run_dump_test "tlspic"
 
        run_dump_test "tlsnopic"
+
+       # Test -renesas.
+       run_dump_test "renesas-1"
     }
 }
 
index 52173a7..3cee009 100644 (file)
@@ -11,5 +11,5 @@
        .text
 start:
        ldc r3,mod              ! { dg-error "invalid operands" }
-       ldre @(16,pc)           ! { dg-error "unknown opcode" }
+       ldre @(16,pc)           ! { dg-error "opcode not valid for this cpu variant" }
        lds r4,a0               ! { dg-error "invalid operands" }
index 75431c2..ac10dc6 100644 (file)
@@ -1,3 +1,9 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-03-19  Alan Modra  <amodra@bigpond.net.au>
+       * po/sv.po: Updated.
+
 
 For older changes see ChangeLog-9203
 \f
index e96f893..c1b49c3 100644 (file)
@@ -1,58 +1,58 @@
 # Swedish messages for gprof.
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-# Christian Rose <menthos@menthos.com>, 2001, 2002.
+# Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
+# Christian Rose <menthos@menthos.com>, 2001, 2002, 2004.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gprof 2.12.1\n"
-"POT-Creation-Date: 2002-01-31 18:32+0000\n"
-"PO-Revision-Date: 2002-07-23 14:01+0200\n"
+"Project-Id-Version: gprof 2.14rel030712\n"
+"POT-Creation-Date: 2003-07-11 13:58+0930\n"
+"PO-Revision-Date: 2004-03-18 23:52+0100\n"
 "Last-Translator: Christian Rose <menthos@menthos.com>\n"
 "Language-Team: Swedish <sv@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: alpha.c:93 mips.c:47
+#: alpha.c:103 mips.c:57
 msgid "<indirect child>"
 msgstr "<indirekt barn>"
 
-#: alpha.c:110 mips.c:64
+#: alpha.c:120 mips.c:74
 #, c-format
 msgid "[find_call] %s: 0x%lx to 0x%lx\n"
 msgstr "[find_call] %s: 0x%lx till 0x%lx\n"
 
-#: alpha.c:132
+#: alpha.c:142
 #, c-format
 msgid "[find_call] 0x%lx: jsr%s <indirect_child>\n"
 msgstr "[find_call] 0x%lx: jsr%s <indirekt_barn>\n"
 
-#: alpha.c:142
+#: alpha.c:152
 #, c-format
 msgid "[find_call] 0x%lx: bsr"
 msgstr "[find_call] 0x%lx: bsr"
 
-#: basic_blocks.c:122 call_graph.c:90 hist.c:93
+#: basic_blocks.c:134 call_graph.c:94 hist.c:98
 #, c-format
 msgid "%s: %s: unexpected end of file\n"
 msgstr "%s: %s: oväntat filslut\n"
 
-#: basic_blocks.c:190
+#: basic_blocks.c:202
 #, c-format
 msgid "%s: warning: ignoring basic-block exec counts (use -l or --line)\n"
 msgstr "%s: varning: ignorerar exekveringsräkning för grundblock (använd -l eller --line)\n"
 
 #. FIXME: This only works if bfd_vma is unsigned long.
-#: basic_blocks.c:281 basic_blocks.c:291
+#: basic_blocks.c:295 basic_blocks.c:305
 #, c-format
 msgid "%s:%d: (%s:0x%lx) %lu executions\n"
 msgstr "%s:%d: (%s:0x%lx) %lu exekveringar\n"
 
-#: basic_blocks.c:282 basic_blocks.c:292
+#: basic_blocks.c:296 basic_blocks.c:306
 msgid "<unknown>"
 msgstr "<okänd>"
 
-#: basic_blocks.c:536
+#: basic_blocks.c:553
 #, c-format
 msgid ""
 "\n"
@@ -69,7 +69,7 @@ msgstr ""
 "     Rad       Antal\n"
 "\n"
 
-#: basic_blocks.c:560
+#: basic_blocks.c:577
 msgid ""
 "\n"
 "Execution Summary:\n"
@@ -79,22 +79,22 @@ msgstr ""
 "Exekveringssammanfattning:\n"
 "\n"
 
-#: basic_blocks.c:561
+#: basic_blocks.c:578
 #, c-format
 msgid "%9ld   Executable lines in this file\n"
 msgstr "%9ld   Exekverbara rader i denna fil\n"
 
-#: basic_blocks.c:563
+#: basic_blocks.c:580
 #, c-format
 msgid "%9ld   Lines executed\n"
 msgstr "%9ld   Exekverade rader\n"
 
-#: basic_blocks.c:564
+#: basic_blocks.c:581
 #, c-format
 msgid "%9.2f   Percent of the file executed\n"
 msgstr "%9.2f   Procent av filen som exekverats\n"
 
-#: basic_blocks.c:568
+#: basic_blocks.c:585
 #, c-format
 msgid ""
 "\n"
@@ -103,17 +103,17 @@ msgstr ""
 "\n"
 "%9lu   Totala antalet radexekveringar\n"
 
-#: basic_blocks.c:570
+#: basic_blocks.c:587
 #, c-format
 msgid "%9.2f   Average executions per line\n"
 msgstr "%9.2f   Medelexekveringar per rad\n"
 
-#: call_graph.c:69
+#: call_graph.c:71
 #, c-format
 msgid "[cg_tally] arc from %s to %s traversed %lu times\n"
 msgstr "[cg_tally] bÃ¥ge frÃ¥n %s till %s traverserad %lu gÃ¥nger\n"
 
-#: cg_print.c:58
+#: cg_print.c:73
 msgid ""
 "\t\t     Call graph (explanation follows)\n"
 "\n"
@@ -121,7 +121,7 @@ msgstr ""
 "\t\t     Angropsgraf (förklaring följer)\n"
 "\n"
 
-#: cg_print.c:60
+#: cg_print.c:75
 msgid ""
 "\t\t\tCall graph\n"
 "\n"
@@ -129,7 +129,7 @@ msgstr ""
 "\t\t\tAnropsgraf\n"
 "\n"
 
-#: cg_print.c:63 hist.c:355
+#: cg_print.c:78 hist.c:363
 #, c-format
 msgid ""
 "\n"
@@ -138,7 +138,7 @@ msgstr ""
 "\n"
 "upplösning: varje stickprov täcker %ld byte"
 
-#: cg_print.c:67
+#: cg_print.c:82
 #, c-format
 msgid ""
 " for %.2f%% of %.2f seconds\n"
@@ -147,7 +147,7 @@ msgstr ""
 " för %.2f%% pÃ¥ %.2f sekunder\n"
 "\n"
 
-#: cg_print.c:71
+#: cg_print.c:86
 msgid ""
 " no time propagated\n"
 "\n"
@@ -155,63 +155,64 @@ msgstr ""
 " ingen tid propagerad\n"
 "\n"
 
-#: cg_print.c:80 cg_print.c:83 cg_print.c:85
+#: cg_print.c:95 cg_print.c:98 cg_print.c:100
 msgid "called"
 msgstr "anropad"
 
-#: cg_print.c:80 cg_print.c:85
+#: cg_print.c:95 cg_print.c:100
 msgid "total"
 msgstr "totalt"
 
-#: cg_print.c:80
+#: cg_print.c:95
 msgid "parents"
 msgstr "föräldrar"
 
-#: cg_print.c:82 cg_print.c:83
+#: cg_print.c:97 cg_print.c:98
 msgid "index"
 msgstr "index"
 
-#: cg_print.c:82
+#: cg_print.c:97
+#, c-format
 msgid "%time"
 msgstr "%tid"
 
-#: cg_print.c:82 cg_print.c:83
+#: cg_print.c:97 cg_print.c:98
 msgid "self"
 msgstr "själv"
 
-#: cg_print.c:82
+#: cg_print.c:97
 msgid "descendants"
 msgstr "ättlingar"
 
-#: cg_print.c:83 hist.c:381
+#: cg_print.c:98 hist.c:389
 msgid "name"
 msgstr "namn"
 
-#: cg_print.c:85
+#: cg_print.c:100
 msgid "children"
 msgstr "barn"
 
-#: cg_print.c:90
+#: cg_print.c:105
 #, c-format
 msgid "index %% time    self  children    called     name\n"
 msgstr "index %% tid     själv barn        anropad    namn\n"
 
-#: cg_print.c:113
+#: cg_print.c:129
 #, c-format
 msgid " <cycle %d as a whole> [%d]\n"
 msgstr " <hela cykel %d> [%d]\n"
 
-#: cg_print.c:339
+#: cg_print.c:363
 #, c-format
 msgid "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s     <spontaneous>\n"
 msgstr "%6.6s %5.5s %7.7s %11.11s %7.7s %7.7s     <spontant>\n"
 
-#: cg_print.c:340
+#: cg_print.c:364
 #, c-format
 msgid "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s     <spontaneous>\n"
 msgstr "%6.6s %5.5s %7.7s %7.7s %7.7s %7.7s     <spontant>\n"
 
-#: cg_print.c:574
+#: cg_print.c:604
 msgid ""
 "Index by function name\n"
 "\n"
@@ -219,7 +220,7 @@ msgstr ""
 "Index efter funktionsnamn\n"
 "\n"
 
-#: cg_print.c:631 cg_print.c:640
+#: cg_print.c:661 cg_print.c:670
 #, c-format
 msgid "<cycle %d>"
 msgstr "<cykel %d>"
@@ -234,133 +235,133 @@ msgstr "%s: kunde inte 
 msgid "%s: unable to parse mapping file %s.\n"
 msgstr "%s: kan inte tolka mappfilen %s.\n"
 
-#: corefile.c:154
+#: corefile.c:155
 #, c-format
 msgid "%s: %s: not in a.out format\n"
 msgstr "%s: %s: inte i a.out-format\n"
 
-#: corefile.c:165
+#: corefile.c:166
 #, c-format
 msgid "%s: can't find .text section in %s\n"
 msgstr "%s: kan inte hitta .text-sektion i %s\n"
 
-#: corefile.c:223
+#: corefile.c:225
 #, c-format
 msgid "%s: ran out room for %lu bytes of text space\n"
 msgstr "%s: slut pÃ¥ utrymme för %lu byte textutrymme\n"
 
-#: corefile.c:237
+#: corefile.c:239
 #, c-format
 msgid "%s: can't do -c\n"
 msgstr "%s: kan inte göra -c\n"
 
-#: corefile.c:272
+#: corefile.c:276
 #, c-format
 msgid "%s: -c not supported on architecture %s\n"
 msgstr "%s: -c stöds inte pÃ¥ arkitekturen %s\n"
 
-#: corefile.c:439
+#: corefile.c:447
 #, c-format
 msgid "%s: file `%s' has no symbols\n"
 msgstr "%s: filen \"%s\" har inga symboler\n"
 
-#: corefile.c:739
+#: corefile.c:758
 #, c-format
 msgid "%s: somebody miscounted: ltab.len=%d instead of %ld\n"
 msgstr "%s: nÃ¥gon räknade fel: ltab.len=%d istället för %ld\n"
 
-#: gmon_io.c:83 gmon_io.c:137 gmon_io.c:188 gmon_io.c:216 gmon_io.c:386 gmon_io.c:413 gmon_io.c:609 gmon_io.c:634
+#: gmon_io.c:82
 #, c-format
-msgid "%s: bits per address has unexpected value of %u\n"
-msgstr "%s: bitar per adress har ett oväntat värde pÃ¥ %u\n"
+msgid "%s: address size has unexpected value of %u\n"
+msgstr "%s: adresstorleken har ett oväntat värde pÃ¥ %u\n"
 
-#: gmon_io.c:252 gmon_io.c:347
+#: gmon_io.c:345 gmon_io.c:440
 #, c-format
 msgid "%s: file too short to be a gmon file\n"
 msgstr "%s: filen Ã¤r för kort för att vara en gmon-fil\n"
 
-#: gmon_io.c:262 gmon_io.c:396
+#: gmon_io.c:355 gmon_io.c:483
 #, c-format
 msgid "%s: file `%s' has bad magic cookie\n"
 msgstr "%s: filen \"%s\" har felaktigt magiskt tal\n"
 
-#: gmon_io.c:273
+#: gmon_io.c:366
 #, c-format
 msgid "%s: file `%s' has unsupported version %d\n"
 msgstr "%s: filen \"%s\" har version %d som inte stöds\n"
 
-#: gmon_io.c:303
+#: gmon_io.c:396
 #, c-format
 msgid "%s: %s: found bad tag %d (file corrupted?)\n"
 msgstr "%s: %s: hittade felaktig tagg %d (är filen skadad?)\n"
 
-#: gmon_io.c:369
+#: gmon_io.c:462
 #, c-format
 msgid "%s: profiling rate incompatible with first gmon file\n"
 msgstr "%s: profileringshastighet Ã¤r inkompatibel med första gmon-filen\n"
 
-#: gmon_io.c:429
+#: gmon_io.c:510
 #, c-format
 msgid "%s: incompatible with first gmon file\n"
 msgstr "%s: inkompatibel med första gmon-filen\n"
 
-#: gmon_io.c:457
+#: gmon_io.c:538
 #, c-format
 msgid "%s: file '%s' does not appear to be in gmon.out format\n"
 msgstr "%s: filen \"%s\" verkar inte vara i gmon.out-format\n"
 
 # Man brukar tala om "bins" i hashtabeller
 #
-#: gmon_io.c:478
+#: gmon_io.c:559
 #, c-format
 msgid "%s: unexpected EOF after reading %d/%d bins\n"
 msgstr "%s: oväntat filslut efter läsning av %d/%d poster\n"
 
-#: gmon_io.c:511
+#: gmon_io.c:592
 msgid "time is in ticks, not seconds\n"
 msgstr "tiden Ã¤r i tick, inte sekunder\n"
 
-#: gmon_io.c:517 gmon_io.c:704
+#: gmon_io.c:598 gmon_io.c:775
 #, c-format
 msgid "%s: don't know how to deal with file format %d\n"
 msgstr "%s: vet inte hur fileformat %d ska hanteras\n"
 
-#: gmon_io.c:524
+#: gmon_io.c:605
 #, c-format
 msgid "File `%s' (version %d) contains:\n"
 msgstr "Filen \"%s\" (version %d) innehÃ¥ller:\n"
 
-#: gmon_io.c:527
+#: gmon_io.c:608
 #, c-format
 msgid "\t%d histogram record\n"
 msgstr "\t%d histogrampost\n"
 
-#: gmon_io.c:528
+#: gmon_io.c:609
 #, c-format
 msgid "\t%d histogram records\n"
 msgstr "\t%d histogramposter\n"
 
-#: gmon_io.c:530
+#: gmon_io.c:611
 #, c-format
 msgid "\t%d call-graph record\n"
 msgstr "\t%d anropsgrafpost\n"
 
-#: gmon_io.c:531
+#: gmon_io.c:612
 #, c-format
 msgid "\t%d call-graph records\n"
 msgstr "\t%d anropsgrafposter\n"
 
-#: gmon_io.c:533
+#: gmon_io.c:614
 #, c-format
 msgid "\t%d basic-block count record\n"
 msgstr "\t%d grundblocksräkningspost\n"
 
-#: gmon_io.c:534
+#: gmon_io.c:615
 #, c-format
 msgid "\t%d basic-block count records\n"
 msgstr "\t%d grundblocksräkningsposter\n"
 
-#: gprof.c:147
+#: gprof.c:163
 #, c-format
 msgid ""
 "Usage: %s [-[abcDhilLsTvwxyz]] [-[ACeEfFJnNOpPqQZ][name]] [-I dirs]\n"
@@ -391,78 +392,78 @@ msgstr ""
 "\t[--demangle[=STIL]] [--no-demangle]\n"
 "\t[bildfil] [profilfil...]\n"
 
-#: gprof.c:163
+#: gprof.c:179
 #, c-format
 msgid "Report bugs to %s\n"
 msgstr ""
 "Rapportera fel till %s,\n"
 "och synpunkter pÃ¥ Ã¶versättningen till sv@li.org\n"
 
-#: gprof.c:235
+#: gprof.c:253
 #, c-format
 msgid "%s: debugging not supported; -d ignored\n"
 msgstr "%s: felsökning stöds inte; -d ignorerades\n"
 
-#: gprof.c:315
+#: gprof.c:333
 #, c-format
 msgid "%s: unknown file format %s\n"
 msgstr "%s: okänt filformat %s\n"
 
 #. This output is intended to follow the GNU standards document.
-#: gprof.c:399
+#: gprof.c:417
 #, c-format
 msgid "GNU gprof %s\n"
 msgstr "GNU gprof %s\n"
 
-#: gprof.c:400
+#: gprof.c:418
 msgid "Based on BSD gprof, copyright 1983 Regents of the University of California.\n"
 msgstr "Baserat pÃ¥ BSD gprof, copyright 1983 Regents of the University of California.\n"
 
-#: gprof.c:401
+#: gprof.c:419
 msgid "This program is free software.  This program has absolutely no warranty.\n"
 msgstr "Detta program Ã¤r fri programvara. Detta program har ingen som helst garanti.\n"
 
-#: gprof.c:442
+#: gprof.c:460
 #, c-format
 msgid "%s: unknown demangling style `%s'\n"
 msgstr "%s: okänd avmanglingsstil \"%s\"\n"
 
-#: gprof.c:462
+#: gprof.c:480
 #, c-format
 msgid "%s: Only one of --function-ordering and --file-ordering may be specified.\n"
 msgstr "%s: Endast en av --function-ordering och --file-ordering kan anges.\n"
 
-#: gprof.c:562
+#: gprof.c:578
 #, c-format
 msgid "%s: sorry, file format `prof' is not yet supported\n"
 msgstr "%s: tyvärr, filformatet \"prof\" stöds inte Ã¤n\n"
 
-#: gprof.c:623
+#: gprof.c:639
 #, c-format
 msgid "%s: gmon.out file is missing histogram\n"
 msgstr "%s: gmon.out-filen saknar histogram\n"
 
-#: gprof.c:630
+#: gprof.c:646
 #, c-format
 msgid "%s: gmon.out file is missing call-graph data\n"
 msgstr "%s: gmon.out-filen saknar anropsgrafdata\n"
 
-#: hist.c:122
+#: hist.c:127
 #, c-format
 msgid "%s: `%s' is incompatible with first gmon file\n"
 msgstr "%s: \"%s\" Ã¤r inkompatibel med första gmon-filen\n"
 
-#: hist.c:138
+#: hist.c:143
 #, c-format
 msgid "%s: %s: unexpected EOF after reading %d of %d samples\n"
 msgstr "%s: %s: oväntat filslut efter läsning av %d av %d stickprov\n"
 
-#: hist.c:351
+#: hist.c:359
 #, c-format
 msgid "%c%c/call"
 msgstr "%c%c/anrop"
 
-#: hist.c:359
+#: hist.c:367
 #, c-format
 msgid ""
 " for %.2f%% of %.2f %s\n"
@@ -471,7 +472,7 @@ msgstr ""
 " för %.2f%% av %.2f %s\n"
 "\n"
 
-#: hist.c:365
+#: hist.c:373
 #, c-format
 msgid ""
 "\n"
@@ -480,7 +481,7 @@ msgstr ""
 "\n"
 "Varje stickprov räknas som %g %s.\n"
 
-#: hist.c:370
+#: hist.c:378
 msgid ""
 " no time accumulated\n"
 "\n"
@@ -488,27 +489,27 @@ msgstr ""
 " ingen ackumulerad tid\n"
 "\n"
 
-#: hist.c:377
+#: hist.c:385
 msgid "cumulative"
 msgstr "kumulativ"
 
-#: hist.c:377
+#: hist.c:385
 msgid "self  "
 msgstr "själv"
 
-#: hist.c:377
+#: hist.c:385
 msgid "total "
 msgstr "totalt"
 
-#: hist.c:380
+#: hist.c:388
 msgid "time"
 msgstr "tid"
 
-#: hist.c:380
+#: hist.c:388
 msgid "calls"
 msgstr "anrop"
 
-#: hist.c:469
+#: hist.c:481
 msgid ""
 "\n"
 "\n"
@@ -520,31 +521,31 @@ msgstr ""
 "\n"
 "platt profil:\n"
 
-#: hist.c:475
+#: hist.c:487
 msgid "Flat profile:\n"
 msgstr "Platt profil:\n"
 
-#: mips.c:75
+#: mips.c:85
 #, c-format
 msgid "[find_call] 0x%lx: jal"
 msgstr "[find_call] 0x%lx: jal"
 
-#: mips.c:100
+#: mips.c:110
 #, c-format
 msgid "[find_call] 0x%lx: jalr\n"
 msgstr "[find_call] 0x%lx: jalr\n"
 
-#: source.c:163
+#: source.c:166
 #, c-format
 msgid "%s: could not locate `%s'\n"
 msgstr "%s: kunde inte hitta \"%s\"\n"
 
-#: source.c:238
+#: source.c:241
 #, c-format
 msgid "*** File %s:\n"
 msgstr "*** Fil %s:\n"
 
-#: utils.c:96
+#: utils.c:109
 #, c-format
 msgid " <cycle %d>"
 msgstr " <cykel %d>"
index 4badf1b..ca01203 100644 (file)
@@ -1,3 +1,26 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-03-30  Nick Clifton  <nickc@redhat.com>
+       * po/sv.po: Updated Swedish translation.
+
+       2004-03-20  Alexandre Oliva  <aoliva@redhat.com>
+       * emulparams/elf32frvfd.sh (MAXPAGESIZE): Change to 16Kb.
+
+       2004-03-08  Danny Smith  <dannysmith@users.sourceforge.net>
+       * pe-dll.c (pe_dll_generate_implib): Skip sections marked as
+       private when building implib.
+
+       2004-03-01  Andreas Schwab  <schwab@suse.de>
+       * ld.texinfo (Options): Fix example for --wrap.
+
+       2004-02-25  Danny Smith  <dannysmith@users.sourceforge.net>
+       * pe-dll.c (fill_edata): Check that exported_symbol_sections is
+       not NULL.
+
+       2004-02-23  Ian Lance Taylor  <ian@wasabisystems.com>
+       * ldlang.c (lang_check): Use %P, not %E, in error message.
+
 2004-04-08  Richard Sandiford  <rsandifo@redhat.com>
 
        * emulparams/elf32bsmip.sh (EXTRA_EM_FILE): Define to irix.
index 224abed..1e2ef59 100644 (file)
@@ -1,6 +1,6 @@
 . ${srcdir}/emulparams/elf32frv.sh
 unset STACK_ADDR
-MAXPAGESIZE=0x10000
+MAXPAGESIZE=0x4000
 TEMPLATE_NAME=elf32
 GENERATE_SHLIB_SCRIPT=yes
 EMBEDDED= # This gets us program headers mapped as part of the text segment.
index 01c30f7..4310c12 100644 (file)
@@ -1714,9 +1714,9 @@ Here is a trivial example:
 
 @smallexample
 void *
-__wrap_malloc (int c)
+__wrap_malloc (size_t c)
 @{
-  printf ("malloc called with %ld\n", c);
+  printf ("malloc called with %zu\n", c);
   return __real_malloc (c);
 @}
 @end smallexample
index 86adde2..0c08601 100644 (file)
@@ -3687,7 +3687,7 @@ lang_check (void)
          if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
            {
              if (command_line.warn_mismatch)
-               einfo (_("%E%X: failed to merge target specific data of file %B\n"),
+               einfo (_("%P%X: failed to merge target specific data of file %B\n"),
                       input_bfd);
            }
          if (! command_line.warn_mismatch)
index ce3f443..10d636e 100644 (file)
@@ -26,6 +26,7 @@
 #include "libiberty.h"
 #include "safe-ctype.h"
 
+#include <stdint.h>
 #include <time.h>
 
 #include "ld.h"
@@ -917,8 +918,8 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
   int s, hint;
   unsigned char *edirectory;
-  unsigned long *eaddresses;
-  unsigned long *enameptrs;
+  uint32_t *eaddresses;
+  uint32_t *enameptrs;
   unsigned short *eordinals;
   unsigned char *enamestr;
   time_t now;
@@ -929,7 +930,7 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
 
   /* Note use of array pointer math here.  */
   edirectory = edata_d;
-  eaddresses = (unsigned long *) (edata_d + 40);
+  eaddresses = (uint32_t *) (edata_d + 40);
   enameptrs = eaddresses + export_table_size;
   eordinals = (unsigned short *) (enameptrs + count_exported_byname);
   enamestr = (char *) (eordinals + count_exported_byname);
@@ -966,9 +967,9 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
   hint = 0;
   for (s = 0; s < NE; s++)
     {
-      if (pe_def_file->exports[s].ordinal != -1)
+      struct bfd_section *ssec = exported_symbol_sections[s];
+      if (ssec && pe_def_file->exports[s].ordinal != -1)
        {
-         struct bfd_section *ssec = exported_symbol_sections[s];
          unsigned long srva = (exported_symbol_offsets[s]
                                + ssec->output_section->vma
                                + ssec->output_offset);
@@ -2257,6 +2258,9 @@ pe_dll_generate_implib (def_file *def, const char *impfilename)
       char *internal = def->exports[i].internal_name;
       bfd *n;
 
+      /* Don't add PRIVATE entries to import lib.  */  
+      if (pe_def_file->exports[i].flag_private)
+       continue;
       def->exports[i].internal_name = def->exports[i].name;
       n = make_one (def->exports + i, outarch);
       n->next = head;
index 63008b2..4c17a25 100644 (file)
 # Swedish messages for ld.
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-# Christian Rose <menthos@menthos.com>, 2001, 2002.
+# Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
+# Christian Rose <menthos@menthos.com>, 2001, 2002, 2004.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: ld 2.12.91\n"
-"POT-Creation-Date: 2002-07-23 15:58-0400\n"
-"PO-Revision-Date: 2002-07-24 12:31+0200\n"
+"Project-Id-Version: ld 2.14rel030712\n"
+"POT-Creation-Date: 2003-07-11 13:58+0930\n"
+"PO-Revision-Date: 2004-03-22 15:32+0100\n"
 "Last-Translator: Christian Rose <menthos@menthos.com>\n"
 "Language-Team: Swedish <sv@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: emultempl/armcoff.em:71
+#: emultempl/armcoff.em:72
 msgid "  --support-old-code   Support interworking with old code\n"
 msgstr "  --support-old-code   Stöd interaktion med gammal kod\n"
 
-#: emultempl/armcoff.em:72
+#: emultempl/armcoff.em:73
 msgid "  --thumb-entry=<sym>  Set the entry point to be Thumb symbol <sym>\n"
 msgstr ""
 "  --thumb-entry=<sym>  Ställ in ingÃ¥ngspunkten till att vara tumsymbolen\n"
 "                         <sym>\n"
 
-#: emultempl/armcoff.em:141
+#: emultempl/armcoff.em:121
 #, c-format
 msgid "Errors encountered processing file %s"
 msgstr "Fel inträffade vid bearbetning av filen %s"
 
-#: emultempl/armcoff.em:207 emultempl/pe.em:1422
+#: emultempl/armcoff.em:188 emultempl/pe.em:1396
 msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
 msgstr "%P: varning: \"--thumb-entry %s\" Ã¥sidosätter \"-e %s\"\n"
 
-#: emultempl/armcoff.em:212 emultempl/pe.em:1427
+#: emultempl/armcoff.em:193 emultempl/pe.em:1401
 msgid "%P: warning: connot find thumb start symbol %s\n"
 msgstr "%P: varning: kan inte hitta tumstartsymbol %s\n"
 
-#: emultempl/pe.em:317
+#: emultempl/pe.em:300
 msgid "  --base_file <basefile>             Generate a base file for relocatable DLLs\n"
 msgstr ""
 "  --base_file <basfil>               Generera en basfil för\n"
 "                                       omlokaliseringsbara DLL:er\n"
 
-#: emultempl/pe.em:318
+#: emultempl/pe.em:301
 msgid "  --dll                              Set image base to the default for DLLs\n"
 msgstr ""
 "  --dll                              Ställ in bildbas till standard för\n"
 "                                       DLL:er\n"
 
-#: emultempl/pe.em:319
+#: emultempl/pe.em:302
 msgid "  --file-alignment <size>            Set file alignment\n"
 msgstr "  --file-alignment <storlek>         Ställ in filjustering\n"
 
-#: emultempl/pe.em:320
+#: emultempl/pe.em:303
 msgid "  --heap <size>                      Set initial size of the heap\n"
 msgstr "  --heap <storlek>                   Ställ in initial storlek pÃ¥ högen\n"
 
-#: emultempl/pe.em:321
+#: emultempl/pe.em:304
 msgid "  --image-base <address>             Set start address of the executable\n"
 msgstr "  --image-base <adress>              Ställ in startadressen för det körbara\n"
 
-#: emultempl/pe.em:322
+#: emultempl/pe.em:305
 msgid "  --major-image-version <number>     Set version number of the executable\n"
 msgstr "  --major-image-version <nummer>     Ställ in versionsnummer för det körbara\n"
 
-#: emultempl/pe.em:323
+#: emultempl/pe.em:306
 msgid "  --major-os-version <number>        Set minimum required OS version\n"
 msgstr "  --major-os-version <nummer>        Ställ in lägsta nödvändiga OS-version\n"
 
-#: emultempl/pe.em:324
+#: emultempl/pe.em:307
 msgid "  --major-subsystem-version <number> Set minimum required OS subsystem version\n"
 msgstr ""
 "  --major-subsystem-version <nummer> Ställ in lägsta nödvändiga\n"
 "                                       OS-undersystemsversion\n"
 
-#: emultempl/pe.em:325
+#: emultempl/pe.em:308
 msgid "  --minor-image-version <number>     Set revision number of the executable\n"
 msgstr ""
 "  --minor-image-version <nummer>     Ställ in underrevisionsnummer för\n"
 "                                       det körbara\n"
 
-#: emultempl/pe.em:326
+#: emultempl/pe.em:309
 msgid "  --minor-os-version <number>        Set minimum required OS revision\n"
 msgstr "  --minor-os-version <nummer>        Ställ in lägsta nödvändiga OS-revision\n"
 
-#: emultempl/pe.em:327
+#: emultempl/pe.em:310
 msgid "  --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
 msgstr ""
 "  --minor-subsystem-version <nummer> Ställ in lägsta nödvändiga\n"
 "                                       OS-undersystemsrevision\n"
 
-#: emultempl/pe.em:328
+#: emultempl/pe.em:311
 msgid "  --section-alignment <size>         Set section alignment\n"
 msgstr "  --section-alignment <storlek>      Ställ in sektionsjustering\n"
 
-#: emultempl/pe.em:329
+#: emultempl/pe.em:312
 msgid "  --stack <size>                     Set size of the initial stack\n"
 msgstr "  --stack <storlek>                  Ställ in storlek pÃ¥ initiala stacken\n"
 
-#: emultempl/pe.em:330
+#: emultempl/pe.em:313
 msgid "  --subsystem <name>[:<version>]     Set required OS subsystem [& version]\n"
 msgstr ""
 "  --subsystem <namn>[:<version>]     Ställ in nödvändigt OS-undersystem\n"
 "                                       [och nödvändig version]\n"
 
-#: emultempl/pe.em:331
+#: emultempl/pe.em:314
 msgid "  --support-old-code                 Support interworking with old code\n"
 msgstr "  --support-old-code                 Stöd interaktion med gammal kod\n"
 
-#: emultempl/pe.em:332
+#: emultempl/pe.em:315
 msgid "  --thumb-entry=<symbol>             Set the entry point to be Thumb <symbol>\n"
 msgstr ""
 "  --thumb-entry=<symbol>             Ställ in ingÃ¥ngspunkten till att\n"
 "                                       vara tummen <symbol>\n"
 
-#: emultempl/pe.em:334
+#: emultempl/pe.em:317
 msgid "  --add-stdcall-alias                Export symbols with and without @nn\n"
 msgstr "  --add-stdcall-alias                Exportera symboler med och utan @nn\n"
 
-#: emultempl/pe.em:335
+#: emultempl/pe.em:318
 msgid "  --disable-stdcall-fixup            Don't link _sym to _sym@nn\n"
 msgstr "  --disable-stdcall-fixup            Länka inte _sym till _sym@nn\n"
 
-#: emultempl/pe.em:336
+#: emultempl/pe.em:319
 msgid "  --enable-stdcall-fixup             Link _sym to _sym@nn without warnings\n"
 msgstr "  --enable-stdcall-fixup             Länka _sym till _sym@nn utan varningar\n"
 
-#: emultempl/pe.em:337
+#: emultempl/pe.em:320
 msgid "  --exclude-symbols sym,sym,...      Exclude symbols from automatic export\n"
 msgstr ""
 "  --exclude-symbols sym,sym,...      Exkludera symboler frÃ¥n automatisk\n"
 "                                       export\n"
 
-#: emultempl/pe.em:338
+#: emultempl/pe.em:321
 msgid "  --exclude-libs lib,lib,...         Exclude libraries from automatic export\n"
 msgstr ""
 "  --exclude-libs bibl,bibl,...       Exkludera bibliotek frÃ¥n automatisk\n"
 "                                       export\n"
 
-#: emultempl/pe.em:339
+#: emultempl/pe.em:322
 msgid "  --export-all-symbols               Automatically export all globals to DLL\n"
 msgstr ""
 "  --export-all-symbols               Exportera automatiskt alla symboler\n"
 "                                       till DLL\n"
 
-#: emultempl/pe.em:340
+#: emultempl/pe.em:323
 msgid "  --kill-at                          Remove @nn from exported symbols\n"
 msgstr "  --kill-at                          Ta bort @nn frÃ¥n exporterade symboler\n"
 
-#: emultempl/pe.em:341
+#: emultempl/pe.em:324
 msgid "  --out-implib <file>                Generate import library\n"
 msgstr "  --out-implib <fil>                 Generera importbibliotek\n"
 
-#: emultempl/pe.em:342
+#: emultempl/pe.em:325
 msgid "  --output-def <file>                Generate a .DEF file for the built DLL\n"
 msgstr "  --output-def <fil>                 Generera en .DEF-fil för byggd DLL\n"
 
-#: emultempl/pe.em:343
+#: emultempl/pe.em:326
 msgid "  --warn-duplicate-exports           Warn about duplicate exports.\n"
 msgstr "  --warn-duplicate-exports           Varna för dubbla exporter.\n"
 
-#: emultempl/pe.em:344
+#: emultempl/pe.em:327
 msgid ""
 "  --compat-implib                    Create backward compatible import libs;\n"
 "                                       create __imp_<SYMBOL> as well.\n"
@@ -168,7 +168,7 @@ msgstr ""
 "  --compat-implib                    Skapa bakÃ¥tkompatibla importbibliotek;\n"
 "                                       och skapa Ã¤ven __imp_<SYMBOL>.\n"
 
-#: emultempl/pe.em:346
+#: emultempl/pe.em:329
 msgid ""
 "  --enable-auto-image-base           Automatically choose image base for DLLs\n"
 "                                       unless user specifies one\n"
@@ -176,37 +176,57 @@ msgstr ""
 "  --enable-auto-image-base           Välj automatiskt bildbas för DLL:er\n"
 "                                       sÃ¥vida inte användaren anger en\n"
 
-#: emultempl/pe.em:348
+#: emultempl/pe.em:331
 msgid "  --disable-auto-image-base          Do not auto-choose image base. (default)\n"
 msgstr ""
 "  --disable-auto-image-base          Välj inte bildbas automatiskt\n"
 "                                       (standard).\n"
 
-#: emultempl/pe.em:349
+#: emultempl/pe.em:332
 msgid ""
-"  --dll-search-prefix=<string>       When linking dynamically to a dll without an\n"
-"                                       importlib, use <string><basename>.dll \n"
+"  --dll-search-prefix=<string>       When linking dynamically to a dll without\n"
+"                                       an importlib, use <string><basename>.dll\n"
 "                                       in preference to lib<basename>.dll \n"
 msgstr ""
 "  --dll-search-prefix=<sträng>       Använd <sträng><basnamn>.dll istället\n"
 "                                       för lib<basnamn>.dll vid dynamisk\n"
 "                                       länkning utan ett importbibliotek\n"
 
-#: emultempl/pe.em:352
+#: emultempl/pe.em:335
 msgid ""
-"  --enable-auto-import               Do sophistcated linking of _sym to \n"
+"  --enable-auto-import               Do sophistcated linking of _sym to\n"
 "                                       __imp_sym for DATA references\n"
 msgstr ""
 "  --enable-auto-import               Utför sofistikerad länkning av _sym till\n"
 "                                       __imp_sym för DATA-referenser\n"
 
-#: emultempl/pe.em:354
+#: emultempl/pe.em:337
 msgid "  --disable-auto-import              Do not auto-import DATA items from DLLs\n"
 msgstr ""
 "  --disable-auto-import              Importera inte DATA-objekt frÃ¥n DLL:er\n"
 "                                       automatiskt\n"
 
-#: emultempl/pe.em:355
+#: emultempl/pe.em:338
+msgid ""
+"  --enable-runtime-pseudo-reloc      Work around auto-import limitations by\n"
+"                                       adding pseudo-relocations resolved at\n"
+"                                       runtime.\n"
+msgstr ""
+"  --enable-runtime-pseudo-reloc      KringgÃ¥ begränsningar i automatisk\n"
+"                                     import genom att lägga till\n"
+"                                     pseudoomlokaliseringar som löses under\n"
+"                                     körtid.\n"
+
+#: emultempl/pe.em:341
+msgid ""
+"  --disable-runtime-pseudo-reloc     Do not add runtime pseudo-relocations for\n"
+"                                       auto-imported DATA.\n"
+msgstr ""
+"  --disable-runtime-pseudo-reloc     Lägg inte till pseudoomlokaliseringar\n"
+"                                     för automatisk importerad DATA under\n"
+"                                     körtid.\n"
+
+#: emultempl/pe.em:343
 msgid ""
 "  --enable-extra-pe-debug            Enable verbose debug output when building\n"
 "                                       or linking to DLLs (esp. auto-import)\n"
@@ -215,85 +235,82 @@ msgstr ""
 "                                       bygge av eller länkning till DLL:er\n"
 "                                       (särskilt automatisk import)\n"
 
-#: emultempl/pe.em:424
+#: emultempl/pe.em:412
 msgid "%P: warning: bad version number in -subsystem option\n"
 msgstr "%P: varning: felaktigt nummer i flaggan -subsystem\n"
 
-#: emultempl/pe.em:460
+#: emultempl/pe.em:448
 msgid "%P%F: invalid subsystem type %s\n"
 msgstr "%P%F: ogiltig typ av undersystem %s\n"
 
-#: emultempl/pe.em:475
+#: emultempl/pe.em:460
 msgid "%P%F: invalid hex number for PE parameter '%s'\n"
 msgstr "%P%F: ogiltigt hexadecimalt tal för PE-parametern \"%s\"\n"
 
-#: emultempl/pe.em:493
+#: emultempl/pe.em:477
 msgid "%P%F: strange hex info for PE parameter '%s'\n"
 msgstr "%P%F: konstig hexadecimal information för PE-parametern \"%s\"\n"
 
-#: emultempl/pe.em:532
+#: emultempl/pe.em:494
 #, c-format
 msgid "%s: Can't open base file %s\n"
 msgstr "%s: Kan inte Ã¶ppna basfilen %s\n"
 
-#: emultempl/pe.em:738
+#: emultempl/pe.em:707
 msgid "%P: warning, file alignment > section alignment.\n"
 msgstr "%P: varning, filjusteringen > sektionsjusteringen.\n"
 
-#: emultempl/pe.em:822 emultempl/pe.em:848
+#: emultempl/pe.em:794 emultempl/pe.em:821
 #, c-format
 msgid "Warning: resolving %s by linking to %s\n"
 msgstr "Varning: löser upp %s genom att länka till %s\n"
 
-#: emultempl/pe.em:827 emultempl/pe.em:853
+#: emultempl/pe.em:799 emultempl/pe.em:826
 msgid "Use --enable-stdcall-fixup to disable these warnings\n"
 msgstr "Använd --enable-stdcall-fixup för att stänga av dessa varningar\n"
 
-#: emultempl/pe.em:828 emultempl/pe.em:854
+#: emultempl/pe.em:800 emultempl/pe.em:827
 msgid "Use --disable-stdcall-fixup to disable these fixups\n"
 msgstr "Använd --disable-stdcall-fixup för att stänga av dessa korrigeringar\n"
 
-#: emultempl/pe.em:879
+#: emultempl/pe.em:846
+#, c-format
 msgid "%C: Cannot get section contents - auto-import exception\n"
 msgstr "%C: Kan inte fÃ¥ tag i sektionsinnehÃ¥ll - undantag i automatisk import\n"
 
-#: emultempl/pe.em:887
-msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
-msgstr "%C: variabeln \"%T\" kan inte importeras automatiskt. Läs dokumentationen för ld:s --enable-auto-import för detaljer.\n"
-
-#: emultempl/pe.em:916
+#: emultempl/pe.em:883
 #, c-format
 msgid "Info: resolving %s by linking to %s (auto-import)\n"
 msgstr "Info: löser upp %s genom att länka till %s (automatisk import)\n"
 
-#: emultempl/pe.em:997
+#: emultempl/pe.em:954
 msgid "%F%P: PE operations on non PE file.\n"
 msgstr "%F%P: PE-operationer pÃ¥ fil som inte Ã¤r PE.\n"
 
-#: emultempl/pe.em:1226
+#: emultempl/pe.em:1188
 #, c-format
 msgid "Errors encountered processing file %s\n"
 msgstr "Fel uppstod vid behandling av filen %s\n"
 
-#: emultempl/pe.em:1249
+#: emultempl/pe.em:1211
 #, c-format
 msgid "Errors encountered processing file %s for interworking"
 msgstr "Fel uppstod vid behandling av filen %s för interaktion"
 
-#: emultempl/pe.em:1305 ldlang.c:2065 ldlang.c:4608 ldlang.c:4641
-#: ldmain.c:1061
+#: emultempl/pe.em:1273 ldlang.c:1904 ldlang.c:4397 ldlang.c:4428
+#: ldmain.c:1122
 msgid "%P%F: bfd_link_hash_lookup failed: %E\n"
 msgstr "%P%F: bfd_link_hash_lookup misslyckades: %E\n"
 
-#: ldcref.c:158
+#: ldcref.c:153
 msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
 msgstr "%X%P: bfd_hash_table_init av korsreferenstabellen misslyckades: %E\n"
 
-#: ldcref.c:164
+#: ldcref.c:159
 msgid "%X%P: cref_hash_lookup failed: %E\n"
 msgstr "%X%P: cref_hash_lookup misslyckades: %E\n"
 
-#: ldcref.c:235
+#: ldcref.c:225
 msgid ""
 "\n"
 "Cross Reference Table\n"
@@ -303,31 +320,31 @@ msgstr ""
 "Korsreferenstabell\n"
 "\n"
 
-#: ldcref.c:236
+#: ldcref.c:226
 msgid "Symbol"
 msgstr "Symbol"
 
-#: ldcref.c:244
+#: ldcref.c:234
 msgid "File\n"
 msgstr "Fil\n"
 
-#: ldcref.c:248
+#: ldcref.c:238
 msgid "No symbols\n"
 msgstr "Inga symboler\n"
 
-#: ldcref.c:400
+#: ldcref.c:384
 msgid "%P: symbol `%T' missing from main hash table\n"
 msgstr "%P: symbolen \"%T\" saknas frÃ¥n hastabellen\n"
 
-#: ldcref.c:465
+#: ldcref.c:448
 msgid "%B%F: could not read symbols; %E\n"
 msgstr "%B%F: kunde inte läsa symboler; %E\n"
 
-#: ldcref.c:469 ldmain.c:1127 ldmain.c:1131
+#: ldcref.c:452 ldmain.c:1187 ldmain.c:1191
 msgid "%B%F: could not read symbols: %E\n"
 msgstr "%B%F: kunde inte läsa symboler: %E\n"
 
-#: ldcref.c:537 ldcref.c:544 ldmain.c:1177 ldmain.c:1184
+#: ldcref.c:517 ldcref.c:524 ldmain.c:1234 ldmain.c:1241
 msgid "%B%F: could not read relocs: %E\n"
 msgstr "%B%F: kunde inte läsa omlokaliseringar: %E\n"
 
@@ -335,27 +352,27 @@ msgstr "%B%F: kunde inte l
 #. in OUTSECNAME.  This reloc is from a section which is
 #. mapped into a section from which references to OUTSECNAME
 #. are prohibited.  We must report an error.
-#: ldcref.c:563
+#: ldcref.c:543
 msgid "%X%C: prohibited cross reference from %s to `%T' in %s\n"
 msgstr "%X%C: förbjuden korsreferens frÃ¥n %s till \"%T\" i %s\n"
 
-#: ldctor.c:88
+#: ldctor.c:84
 msgid "%P%X: Different relocs used in set %s\n"
 msgstr "%P%X: Olika omlokaliseringar använda i gruppen %s\n"
 
-#: ldctor.c:106
+#: ldctor.c:102
 msgid "%P%X: Different object file formats composing set %s\n"
 msgstr "%P%X: Olika objektfilformat utgör gruppen %s\n"
 
-#: ldctor.c:288 ldctor.c:302
+#: ldctor.c:281 ldctor.c:295
 msgid "%P%X: %s does not support reloc %s for set %s\n"
 msgstr "%P%X: %s stöder inte omlokaliseringen %s för gruppen %s\n"
 
-#: ldctor.c:323
+#: ldctor.c:316
 msgid "%P%X: Unsupported size %d for set %s\n"
 msgstr "%P%X: Storleken %d för gruppen %s stöds inte\n"
 
-#: ldctor.c:344
+#: ldctor.c:337
 msgid ""
 "\n"
 "Set                 Symbol\n"
@@ -365,135 +382,150 @@ msgstr ""
 "Grupp               Symbol\n"
 "\n"
 
-#: ldemul.c:225
+#: ldemul.c:247
+#, c-format
 msgid "%S SYSLIB ignored\n"
 msgstr "%S SYSLIB ignorerades\n"
 
-#: ldemul.c:232
+#: ldemul.c:254
+#, c-format
 msgid "%S HLL ignored\n"
 msgstr "%S HLL ignorerades\n"
 
-#: ldemul.c:253
+#: ldemul.c:275
 msgid "%P: unrecognised emulation mode: %s\n"
 msgstr "%P: okänt emuleringsläge: %s\n"
 
-#: ldemul.c:254
+#: ldemul.c:276
 msgid "Supported emulations: "
 msgstr "Emuleringar som stöds: "
 
-#: ldemul.c:298
+#: ldemul.c:320
 msgid "  no emulation specific options.\n"
 msgstr "  inga emuleringsspecifika flaggor.\n"
 
-#: ldexp.c:174
+#: ldexp.c:148
 msgid "%F%P: %s uses undefined section %s\n"
 msgstr "%F%P: %s använder odefinierad sektion %s\n"
 
-#: ldexp.c:176
+#: ldexp.c:150
 msgid "%F%P: %s forward reference of section %s\n"
 msgstr "%F%P: %s framÃ¥treferens av sektionen %s\n"
 
-#: ldexp.c:304
+#: ldexp.c:355
+#, c-format
 msgid "%F%S %% by zero\n"
 msgstr "%F%S %% med noll\n"
 
-#: ldexp.c:311
+#: ldexp.c:362
+#, c-format
 msgid "%F%S / by zero\n"
 msgstr "%F%S / med noll\n"
 
-#: ldexp.c:463
+#: ldexp.c:533
+#, c-format
 msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
 msgstr "%X%S: oupplösningsbara symbolen \"%s\" refererades i uttrycket\n"
 
-#: ldexp.c:483
+#: ldexp.c:553
+#, c-format
 msgid "%F%S: undefined symbol `%s' referenced in expression\n"
 msgstr "%F%S: odefinierade symbolen \"%s\" refererades i uttrycket\n"
 
-#: ldexp.c:685
+#: ldexp.c:677
+#, c-format
 msgid "%F%S can not PROVIDE assignment to location counter\n"
 msgstr "%F%S kan inte TILLHANDAHÃ…LLA tilldelning till platsräknare\n"
 
-#: ldexp.c:695
+#: ldexp.c:687
+#, c-format
 msgid "%F%S invalid assignment to location counter\n"
 msgstr "%F%S ogiltig tilldelning till platsräknare\n"
 
-#: ldexp.c:699
+#: ldexp.c:691
+#, c-format
 msgid "%F%S assignment to location counter invalid outside of SECTION\n"
 msgstr "%F%S tilldelning till platsräknare som Ã¤r ogiltig utanför SEKTION\n"
 
-#: ldexp.c:708
+#: ldexp.c:700
 msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
 msgstr "%F%S kan inte flytta platsräknare bakÃ¥t (frÃ¥n %V till %V)\n"
 
-#: ldexp.c:735
+#: ldexp.c:727
 msgid "%P%F:%s: hash creation failed\n"
 msgstr "%P%F:%s: skapande av hash misslyckades\n"
 
-#: ldexp.c:1037 ldexp.c:1071
+#: ldexp.c:1003 ldexp.c:1035
+#, c-format
 msgid "%F%S nonconstant expression for %s\n"
 msgstr "%F%S ickekonstant uttryck för %s\n"
 
-#: ldexp.c:1126
+#: ldexp.c:1089
+#, c-format
 msgid "%F%S non constant expression for %s\n"
 msgstr "%F%S ickekonstant uttryck för %s\n"
 
-#: ldfile.c:105
+#: ldfile.c:144
 #, c-format
 msgid "attempt to open %s failed\n"
 msgstr "försök att Ã¶ppna %s misslyckades\n"
 
-#: ldfile.c:107
+#: ldfile.c:146
 #, c-format
 msgid "attempt to open %s succeeded\n"
 msgstr "försök att Ã¶ppna %s lyckades\n"
 
-#: ldfile.c:113
+#: ldfile.c:152
 msgid "%F%P: invalid BFD target `%s'\n"
 msgstr "%F%P: ogiltigt BFD-mÃ¥l \"%s\"\n"
 
-#: ldfile.c:142
+#: ldfile.c:258 ldfile.c:275
 msgid "%P: skipping incompatible %s when searching for %s\n"
 msgstr "%P: hoppar Ã¶ver inkompatibel %s vid sökning av %s\n"
 
-#: ldfile.c:234
+#: ldfile.c:377
 msgid "%F%P: cannot open %s for %s: %E\n"
 msgstr "%F%P: kan inte Ã¶ppna %s för %s: %E\n"
 
-#: ldfile.c:237
+#: ldfile.c:380
 msgid "%F%P: cannot open %s: %E\n"
 msgstr "%F%P: kan inte Ã¶ppna %s: %E\n"
 
-#: ldfile.c:267
+#: ldfile.c:410
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: kan inte hitta %s inuti %s\n"
+
+#: ldfile.c:413
 msgid "%F%P: cannot find %s\n"
 msgstr "%F%P: kan inte hitta %s\n"
 
-#: ldfile.c:286 ldfile.c:302
+#: ldfile.c:430 ldfile.c:446
 #, c-format
 msgid "cannot find script file %s\n"
 msgstr "kan inte hitta skriptfilen %s\n"
 
-#: ldfile.c:288 ldfile.c:304
+#: ldfile.c:432 ldfile.c:448
 #, c-format
 msgid "opened script file %s\n"
 msgstr "öppnade skriptfilen %s\n"
 
-#: ldfile.c:353
+#: ldfile.c:492
 msgid "%P%F: cannot open linker script file %s: %E\n"
 msgstr "%P%F: kan inte Ã¶ppna länkskriptfilen %s: %E\n"
 
-#: ldfile.c:391
+#: ldfile.c:529
 msgid "%P%F: unknown architecture: %s\n"
 msgstr "%P%F: okänd arkitektur: %s\n"
 
-#: ldfile.c:407
+#: ldfile.c:543
 msgid "%P%F: target architecture respecified\n"
 msgstr "%P%F: mÃ¥larkitekturen specifierades om\n"
 
-#: ldfile.c:461
+#: ldfile.c:594
 msgid "%P%F: cannot represent machine `%s'\n"
 msgstr "%P%F: kan inte representera maskinen \"%s\"\n"
 
-#: ldlang.c:784
+#: ldlang.c:640
 msgid ""
 "\n"
 "Memory Configuration\n"
@@ -503,23 +535,23 @@ msgstr ""
 "Minneskonfiguration\n"
 "\n"
 
-#: ldlang.c:786
+#: ldlang.c:642
 msgid "Name"
 msgstr "Namn"
 
-#: ldlang.c:786
+#: ldlang.c:642
 msgid "Origin"
 msgstr "Början"
 
-#: ldlang.c:786
+#: ldlang.c:642
 msgid "Length"
 msgstr "Längd"
 
-#: ldlang.c:786
+#: ldlang.c:642
 msgid "Attributes"
 msgstr "Attribut"
 
-#: ldlang.c:828
+#: ldlang.c:682
 msgid ""
 "\n"
 "Linker script and memory map\n"
@@ -529,161 +561,166 @@ msgstr ""
 "Länkskript och minnestabell\n"
 "\n"
 
-#: ldlang.c:845
+#: ldlang.c:698
 msgid "%P%F: Illegal use of `%s' section\n"
 msgstr "%P%F: OtillÃ¥ten användning av sektionen \"%s\"\n"
 
-#: ldlang.c:855
+#: ldlang.c:707
 msgid "%P%F: output format %s cannot represent section called %s\n"
 msgstr "%P%F: utdataformatet %s kan inte representera sektionen kallad %s\n"
 
-#: ldlang.c:1016
+#: ldlang.c:867
 msgid "%P: %B: warning: ignoring duplicate section `%s'\n"
 msgstr "%P: %B: varning: ignorerar dubbel sektion \"%s\"\n"
 
-#: ldlang.c:1019
+#: ldlang.c:870
 msgid "%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"
 msgstr "%P: %B: varning: ignorerar dubbla \"%s\"-sektionssymbolen \"%s\"\n"
 
-#: ldlang.c:1033
+#: ldlang.c:884
 msgid "%P: %B: warning: duplicate section `%s' has different size\n"
 msgstr "%P: %B: varning: dubbla sektionen \"%s\" har annan storlek\n"
 
-#: ldlang.c:1084
+#: ldlang.c:936
 msgid "%P%F: Failed to create hash table\n"
 msgstr "%P%F: Misslyckades med att skapa hashtabell\n"
 
-#: ldlang.c:1503
+#: ldlang.c:1351
 msgid "%B: file not recognized: %E\n"
 msgstr "%B: filen inte igenkänd: %E\n"
 
-#: ldlang.c:1504
+#: ldlang.c:1352
 msgid "%B: matching formats:"
 msgstr "%B: matchande format:"
 
-#: ldlang.c:1511
+#: ldlang.c:1359
 msgid "%F%B: file not recognized: %E\n"
 msgstr "%F%B: filen inte igenkänd: %E\n"
 
-#: ldlang.c:1567
+#: ldlang.c:1418
 msgid "%F%B: member %B in archive is not an object\n"
 msgstr "%F%B: medlem %B i arkivet Ã¤r inte ett objekt\n"
 
-#: ldlang.c:1578 ldlang.c:1592
+#: ldlang.c:1429 ldlang.c:1443
 msgid "%F%B: could not read symbols: %E\n"
 msgstr "%F%B: kunde inte läsa symboler: %E\n"
 
-#: ldlang.c:1853
+#: ldlang.c:1698
 msgid "%P: warning: could not find any targets that match endianness requirement\n"
 msgstr "%P: varning: kunde inte hitta nÃ¥gra mÃ¥l som matchar kravet pÃ¥ endianess\n"
 
-#: ldlang.c:1866
+#: ldlang.c:1711
 msgid "%P%F: target %s not found\n"
 msgstr "%P%F: mÃ¥let %s hittades inte\n"
 
-#: ldlang.c:1868
+#: ldlang.c:1713
 msgid "%P%F: cannot open output file %s: %E\n"
 msgstr "%P%F: kan inte Ã¶ppna utdatafilen %s: %E\n"
 
-#: ldlang.c:1878
+#: ldlang.c:1723
 msgid "%P%F:%s: can not make object file: %E\n"
 msgstr "%P%F:%s: kan inte skapa objektfilen: %E\n"
 
-#: ldlang.c:1882
+#: ldlang.c:1727
 msgid "%P%F:%s: can not set architecture: %E\n"
 msgstr "%P%F:%s: kan inte ställa in arkitektur: %E\n"
 
-#: ldlang.c:1886
+#: ldlang.c:1731
 msgid "%P%F: can not create link hash table: %E\n"
 msgstr "%P%F: kan inte skapa hashtabell Ã¶ver länkar: %E\n"
 
-#: ldlang.c:2235
+#: ldlang.c:2069
 msgid " load address 0x%V"
 msgstr " inläsningsadress 0x%V"
 
-#: ldlang.c:2375
+#: ldlang.c:2204
 msgid "%W (size before relaxing)\n"
 msgstr "%W (storlek innan avslappning)\n"
 
-#: ldlang.c:2462
+#: ldlang.c:2288
 #, c-format
 msgid "Address of section %s set to "
 msgstr "Adressen pÃ¥ sektionen %s ställd till "
 
-#: ldlang.c:2623
+#: ldlang.c:2443
 #, c-format
 msgid "Fail with %d\n"
 msgstr "Misslyckas med %d\n"
 
-#: ldlang.c:2868
+#: ldlang.c:2683
 msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
 msgstr "%X%P: sektionen %s [%V -> %V] Ã¶verlappar med sektionen %s [%V -> %V]\n"
 
-#: ldlang.c:2897
+#: ldlang.c:2711
 msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
 msgstr "%X%P: adressen 0x%v i %B-sektionen %s Ã¤r inte inom omrÃ¥det %s\n"
 
-#: ldlang.c:2905
+#: ldlang.c:2719
 msgid "%X%P: region %s is full (%B section %s)\n"
 msgstr "%X%P: omrÃ¥det %s Ã¤r fullt (%B-sektion %s)\n"
 
-#: ldlang.c:2955
+#: ldlang.c:2770
 msgid "%P%X: Internal error on COFF shared library section %s\n"
 msgstr "%P%X: Internt fel i delat COFF-bibliotek sektion %s\n"
 
-#: ldlang.c:2999
-msgid "%P: warning: no memory region specified for section `%s'\n"
-msgstr "%P: varning: inget minnesomrÃ¥de angivet för sektionen \"%s\"\n"
+#: ldlang.c:2826
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: fel: inget minnesomrÃ¥de angivet för inläsbara sektionen \"%s\"\n"
 
-#: ldlang.c:3014
+#: ldlang.c:2830
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: varning: inget minnesomrÃ¥de angivet för inläsbara sektionen \"%s\"\n"
+
+#: ldlang.c:2846
 msgid "%P: warning: changing start of section %s by %u bytes\n"
 msgstr "%P: varning: Ã¤ndrar start pÃ¥ sektionen %s med %u byte\n"
 
-#: ldlang.c:3028
+#: ldlang.c:2859
+#, c-format
 msgid "%F%S: non constant address expression for section %s\n"
 msgstr "%F%S: ickekonstant adressuttryck för sektionen %s\n"
 
-#: ldlang.c:3203
+#: ldlang.c:3036
 msgid "%P%F: can't relax section: %E\n"
 msgstr "%P%F: kan inte slappna av sektion: %E\n"
 
-#: ldlang.c:3398
+#: ldlang.c:3232
 msgid "%F%P: invalid data statement\n"
 msgstr "%F%P: ogiltig datasats\n"
 
-#: ldlang.c:3435
+#: ldlang.c:3269
 msgid "%F%P: invalid reloc statement\n"
 msgstr "%F%P: ogiltig omlokaliseringssats\n"
 
-#: ldlang.c:3574
+#: ldlang.c:3408
 msgid "%P%F:%s: can't set start address\n"
 msgstr "%P%F:%s: kan inte ställa in startadress\n"
 
-#: ldlang.c:3587 ldlang.c:3605
+#: ldlang.c:3421 ldlang.c:3439
 msgid "%P%F: can't set start address\n"
 msgstr "%P%F: kan inte ställa in startadress\n"
 
-#: ldlang.c:3599
+#: ldlang.c:3433
 msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
 msgstr "%P: varning: kan inte hitta ingÃ¥ngssymbolen %s; använder som standard %V\n"
 
-#: ldlang.c:3610
+#: ldlang.c:3444
 msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
 msgstr "%P: varning: kan inte hitta ingÃ¥ngssymbolen %s; ställer inte in startadress\n"
 
-#: ldlang.c:3660
+#: ldlang.c:3488
 msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
 msgstr "%P%F: Omlokaliseringsbar länkning med omlänkningar frÃ¥n formatet %s (%B) till formatet %s (%B) stöds inte\n"
 
-#: ldlang.c:3669
+#: ldlang.c:3497
 msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
 msgstr "%P: varning: %s-arkitekturen i indatafilen \"%B\" Ã¤r inkompatibel med %s-utdata\n"
 
-#: ldlang.c:3690
+#: ldlang.c:3518
 msgid "%E%X: failed to merge target specific data of file %B\n"
 msgstr "%E%X: misslyckades med att slÃ¥ samman mÃ¥lspecifik data i filen %B\n"
 
-#: ldlang.c:3779
+#: ldlang.c:3604
 msgid ""
 "\n"
 "Allocating common symbols\n"
@@ -691,7 +728,7 @@ msgstr ""
 "\n"
 "Allokerar gemensamma symboler\n"
 
-#: ldlang.c:3780
+#: ldlang.c:3605
 msgid ""
 "Common symbol       size              file\n"
 "\n"
@@ -702,158 +739,158 @@ msgstr ""
 #. This message happens when using the
 #. svr3.ifile linker script, so I have
 #. disabled it.
-#: ldlang.c:3858
+#: ldlang.c:3681
 msgid "%P: no [COMMON] command, defaulting to .bss\n"
 msgstr "%P: inget [COMMON]-kommando, använder standardalternativet .bss\n"
 
-#: ldlang.c:3917
+#: ldlang.c:3737
 msgid "%P%F: invalid syntax in flags\n"
 msgstr "%P%F: ogiltig syntax i flaggor\n"
 
-#: ldlang.c:4532
+#: ldlang.c:4325
 msgid "%P%Fmultiple STARTUP files\n"
 msgstr "%P%Fflera samtidiga STARTUP-filer\n"
 
-#: ldlang.c:4575
+#: ldlang.c:4368
 msgid "%X%P:%S: section has both a load address and a load region\n"
 msgstr "%X%P:%S: sektionen har bÃ¥de en inläsningsadress och ett minnesinläsningsomrÃ¥de\n"
 
-#: ldlang.c:4825
+#: ldlang.c:4608
 msgid "%F%P: bfd_record_phdr failed: %E\n"
 msgstr "%F%P: bfd_record_phdr misslyckades: %E\n"
 
-#: ldlang.c:4844
+#: ldlang.c:4627
 msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
 msgstr "%X%P: sektionen \"%s\" Ã¤r tilldelad till ickexisterande phvd \"%s\"\n"
 
-#: ldlang.c:5143
+#: ldlang.c:4919
 msgid "%X%P: unknown language `%s' in version information\n"
 msgstr "%X%P: okänt sprÃ¥k i \"%s\" i versionsinformation\n"
 
-#: ldlang.c:5195
+#: ldlang.c:4969
 msgid "%X%P: anonymous version tag cannot be combined with other version tags\n"
 msgstr "%X%P: anonym versionstagg kan inte kombineras med andra versionstaggar\n"
 
-#: ldlang.c:5202
+#: ldlang.c:4977
 msgid "%X%P: duplicate version tag `%s'\n"
 msgstr "%X%P: dubbel versionstagg \"%s\"\n"
 
-#: ldlang.c:5215 ldlang.c:5228
+#: ldlang.c:4990 ldlang.c:5003
 msgid "%X%P: duplicate expression `%s' in version information\n"
 msgstr "%X%P: dubbelt uttryck \"%s\" i versionsinformation\n"
 
-#: ldlang.c:5270
+#: ldlang.c:5043
 msgid "%X%P: unable to find version dependency `%s'\n"
 msgstr "%X%P: kan inte hitta versionsberoende \"%s\"\n"
 
-#: ldlang.c:5292
+#: ldlang.c:5065
 msgid "%X%P: unable to read .exports section contents\n"
 msgstr "%X%P: kan inte läsa innehÃ¥llet i .exports-sektionen\n"
 
-#: ldmain.c:198
+#: ldmain.c:247
 msgid "%X%P: can't set BFD default target to `%s': %E\n"
 msgstr "%X%P: kan inte ställa in BSD-standardmÃ¥let till \"%s\": %E\n"
 
-#: ldmain.c:290
+#: ldmain.c:349
 msgid "%P%F: -r and --mpc860c0 may not be used together\n"
 msgstr "%P%F: -r och --mpc860c0 kan inte användas tillsammans\n"
 
-#: ldmain.c:292
+#: ldmain.c:351
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr "%P%F: --relax och -r kan inte användas tillsammans\n"
 
-#: ldmain.c:294
+#: ldmain.c:353
 msgid "%P%F: -r and -shared may not be used together\n"
 msgstr "%P%F: -r och -shared kan inte användas tillsammans\n"
 
-#: ldmain.c:300
+#: ldmain.c:359
 msgid "%P%F: -F may not be used without -shared\n"
 msgstr "%P%F: -F kan inte användas utan -shared\n"
 
-#: ldmain.c:302
+#: ldmain.c:361
 msgid "%P%F: -f may not be used without -shared\n"
 msgstr "%P%F: -f kan inte användas utan -shared\n"
 
-#: ldmain.c:341
+#: ldmain.c:403
 msgid "using external linker script:"
 msgstr "använder externt länkskript:"
 
-#: ldmain.c:343
+#: ldmain.c:405
 msgid "using internal linker script:"
 msgstr "använder internt länkskript:"
 
-#: ldmain.c:377
+#: ldmain.c:439
 msgid "%P%F: no input files\n"
 msgstr "%P%F: inga indatafiler\n"
 
-#: ldmain.c:382
+#: ldmain.c:443
 msgid "%P: mode %s\n"
 msgstr "%P: läge %s\n"
 
-#: ldmain.c:399
+#: ldmain.c:459
 msgid "%P%F: cannot open map file %s: %E\n"
 msgstr "%P%F: kan inte Ã¶ppna tabellfil %s: %E\n"
 
-#: ldmain.c:432
+#: ldmain.c:489
 msgid "%P: link errors found, deleting executable `%s'\n"
 msgstr "%P: länkfel hittades, tar bort den körbara filen \"%s\"\n"
 
-#: ldmain.c:443
+#: ldmain.c:498
 msgid "%F%B: final close failed: %E\n"
 msgstr "%F%B: avslutande stängning misslyckades: %E\n"
 
-#: ldmain.c:467
+#: ldmain.c:524
 msgid "%X%P: unable to open for source of copy `%s'\n"
 msgstr "%X%P: kan inte Ã¶ppna för källkoden till kopian \"%s\"\n"
 
-#: ldmain.c:469
+#: ldmain.c:527
 msgid "%X%P: unable to open for destination of copy `%s'\n"
 msgstr "%X%P: kan inte Ã¶ppna för mÃ¥l av kopian \"%s\"\n"
 
-#: ldmain.c:475
+#: ldmain.c:534
 msgid "%P: Error writing file `%s'\n"
 msgstr "%P: Fel vid skrivning av filen \"%s\"\n"
 
-#: ldmain.c:481 pe-dll.c:1463
+#: ldmain.c:539 pe-dll.c:1443
 #, c-format
 msgid "%P: Error closing file `%s'\n"
 msgstr "%P: Fel vid stängning av filen \"%s\"\n"
 
-#: ldmain.c:498
+#: ldmain.c:555
 #, c-format
 msgid "%s: total time in link: %ld.%06ld\n"
 msgstr "%s: total tid i länkning: %ld.%06ld\n"
 
-#: ldmain.c:501
+#: ldmain.c:558
 #, c-format
 msgid "%s: data size %ld\n"
 msgstr "%s: datastorlek %ld\n"
 
-#: ldmain.c:542
+#: ldmain.c:596
 msgid "%P%F: missing argument to -m\n"
 msgstr "%P%F: argument saknas till -m\n"
 
-#: ldmain.c:670 ldmain.c:691 ldmain.c:722
+#: ldmain.c:741 ldmain.c:759 ldmain.c:789
 msgid "%P%F: bfd_hash_table_init failed: %E\n"
 msgstr "%P%F: bfd_hash_table_init misslyckades: %E\n"
 
-#: ldmain.c:675 ldmain.c:694
+#: ldmain.c:745 ldmain.c:763
 msgid "%P%F: bfd_hash_lookup failed: %E\n"
 msgstr "%P%F: bfd_hash_lookup misslyckades: %E\n"
 
-#: ldmain.c:709
+#: ldmain.c:777
 msgid "%X%P: error: duplicate retain-symbols-file\n"
 msgstr "%X%P: fel: dubbel retain-symbols-file\n"
 
-#: ldmain.c:753
+#: ldmain.c:819
 msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
 msgstr "%P%F: bfd_hash_lookup för ingÃ¥ng misslyckades: %E\n"
 
-#: ldmain.c:758
+#: ldmain.c:824
 msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
 msgstr "%P: \"-retain-symbols-file\" Ã¥sidosätter \"-s\" och \"-S\"\n"
 
-#: ldmain.c:834
+#: ldmain.c:899
 msgid ""
 "Archive member included because of file (symbol)\n"
 "\n"
@@ -861,154 +898,155 @@ msgstr ""
 "Arkivmedlem inkluderad pÃ¥ grund av fil (symbol)\n"
 "\n"
 
-#: ldmain.c:905
+#: ldmain.c:969
 msgid "%X%C: multiple definition of `%T'\n"
 msgstr "%X%C: flera defintioner av \"%T\"\n"
 
-#: ldmain.c:908
+#: ldmain.c:972
 msgid "%D: first defined here\n"
 msgstr "%D: först definierad här\n"
 
-#: ldmain.c:912
+#: ldmain.c:976
 msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
 msgstr "%P: Stänger av avslappning: det kommer inte att fungera med flera definitioner\n"
 
-#: ldmain.c:943
+#: ldmain.c:1006
 msgid "%B: warning: definition of `%T' overriding common\n"
 msgstr "%B: varning: definitioner av \"%T\" Ã¥sidosätter gemensam\n"
 
-#: ldmain.c:946
+#: ldmain.c:1009
 msgid "%B: warning: common is here\n"
 msgstr "%B: varning: gemensam Ã¤r här\n"
 
-#: ldmain.c:953
+#: ldmain.c:1016
 msgid "%B: warning: common of `%T' overridden by definition\n"
 msgstr "%B: varning: gemensam i \"%T\" Ã¥sidosattes av definition\n"
 
-#: ldmain.c:956
+#: ldmain.c:1019
 msgid "%B: warning: defined here\n"
 msgstr "%B: varning: definierad här\n"
 
-#: ldmain.c:963
+#: ldmain.c:1026
 msgid "%B: warning: common of `%T' overridden by larger common\n"
 msgstr "%B: varning: gemensam i \"%T\" Ã¥sidosattes av större gemensam\n"
 
-#: ldmain.c:966
+#: ldmain.c:1029
 msgid "%B: warning: larger common is here\n"
 msgstr "%B: varning: större gemensam Ã¤r här\n"
 
-#: ldmain.c:970
+#: ldmain.c:1033
 msgid "%B: warning: common of `%T' overriding smaller common\n"
 msgstr "%B: varning: gemensam i \"%T\" Ã¥sidosätter mindre gemensam\n"
 
-#: ldmain.c:973
+#: ldmain.c:1036
 msgid "%B: warning: smaller common is here\n"
 msgstr "%B: varning: mindre gemensam Ã¤r här\n"
 
-#: ldmain.c:977
+#: ldmain.c:1040
 msgid "%B: warning: multiple common of `%T'\n"
 msgstr "%B: varning: flera gemensamma i \"%T\"\n"
 
-#: ldmain.c:979
+#: ldmain.c:1042
 msgid "%B: warning: previous common is here\n"
 msgstr "%B: varning: föregÃ¥ende gemensam Ã¤r här\n"
 
-#: ldmain.c:1000 ldmain.c:1039
+#: ldmain.c:1062 ldmain.c:1100
 msgid "%P: warning: global constructor %s used\n"
 msgstr "%P: varning: global konstruktor %s användes\n"
 
-#: ldmain.c:1049
+#: ldmain.c:1110
 msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
 msgstr "%P%F: Fel i BFD-backend: BFD_RELOC_CTOR stöds inte\n"
 
-#: ldmain.c:1233
+#: ldmain.c:1287 ldmisc.c:533
 msgid "%F%P: bfd_hash_table_init failed: %E\n"
 msgstr "%F%P: bfd_hash_table_init misslyckades: %E\n"
 
-#: ldmain.c:1240
+#: ldmain.c:1294 ldmisc.c:540
 msgid "%F%P: bfd_hash_lookup failed: %E\n"
 msgstr "%F%P: bfd_hash_lookup misslyckades: %E\n"
 
-#: ldmain.c:1260
+#: ldmain.c:1314
 msgid "%C: undefined reference to `%T'\n"
 msgstr "%C: odefinierad referens till \"%T\"\n"
 
-#: ldmain.c:1266
+#: ldmain.c:1320
 msgid "%D: more undefined references to `%T' follow\n"
 msgstr "%D: flera odefinierade referenser till \"%T\" följer\n"
 
-#: ldmain.c:1273
+#: ldmain.c:1327
 msgid "%B: undefined reference to `%T'\n"
 msgstr "%B: odefinierad referens till \"%T\"\n"
 
-#: ldmain.c:1279
+#: ldmain.c:1333
 msgid "%B: more undefined references to `%T' follow\n"
 msgstr "%B: flera odefinierade referenser till \"%T\" följer\n"
 
-#: ldmain.c:1299 ldmain.c:1320 ldmain.c:1339
+#: ldmain.c:1364 ldmain.c:1392 ldmain.c:1410
 msgid "%P%X: generated"
 msgstr "%P%X: genererad"
 
-#: ldmain.c:1302
+#: ldmain.c:1371
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " ytterligare omlokaliseringsspill utelämnade frÃ¥n utdatan\n"
+
+#: ldmain.c:1375
 msgid " relocation truncated to fit: %s %T"
 msgstr " omlokalisering trunkerad för att passa: %s %T"
 
-#: ldmain.c:1323
+#: ldmain.c:1395
 #, c-format
 msgid "dangerous relocation: %s\n"
 msgstr "farlig omlokalisering: %s\n"
 
-#: ldmain.c:1342
+#: ldmain.c:1413
 msgid " reloc refers to symbol `%T' which is not being output\n"
 msgstr " omlokalisering refererar till symbolen \"%T\" som inte skrivs ut\n"
 
-#: ldmisc.c:157
+#: ldmisc.c:147
 msgid "no symbol"
 msgstr "ingen symbol"
 
-#: ldmisc.c:221
+#: ldmisc.c:211
 #, c-format
 msgid "built in linker script:%u"
 msgstr "inbyggt länkskript:%u"
 
-#: ldmisc.c:271 ldmisc.c:275
+#: ldmisc.c:260 ldmisc.c:264
 msgid "%B%F: could not read symbols\n"
 msgstr "%B%F: kunde inte läsa symboler\n"
 
-#. We use abfd->filename in this initial line,
-#. in case filename is a .h file or something
-#. similarly unhelpful.
-#: ldmisc.c:311
-msgid "%B: In function `%T':\n"
-msgstr "%B: I funktionen \"%T\":\n"
+#: ldmisc.c:291
+msgid ": In function `%T':\n"
+msgstr ": I funktionen \"%T\":\n"
 
-#: ldmisc.c:463
+#: ldmisc.c:438
 msgid "%F%P: internal error %s %d\n"
 msgstr "%F%P: internt fel %s %d\n"
 
-#: ldmisc.c:513
+#: ldmisc.c:484
 msgid "%P: internal error: aborting at %s line %d in %s\n"
 msgstr "%P: internt fel: avbryter vid %s rad %d i %s\n"
 
-#: ldmisc.c:516
+#: ldmisc.c:487
 msgid "%P: internal error: aborting at %s line %d\n"
 msgstr "%P: internt fel: avbryter vid %s rad %d\n"
 
-#: ldmisc.c:518
+#: ldmisc.c:489
 msgid "%P%F: please report this bug\n"
 msgstr "%P%F: rapportera detta fel\n"
 
 #. Output for noisy == 2 is intended to follow the GNU standards.
-#: ldver.c:38
+#: ldver.c:39
 #, c-format
 msgid "GNU ld version %s\n"
 msgstr "GNU ld version %s\n"
 
-#: ldver.c:42
+#: ldver.c:43
 msgid "Copyright 2002 Free Software Foundation, Inc.\n"
 msgstr "Copyright 2002 Free Software Foundation, Inc.\n"
 
-#: ldver.c:43
+#: ldver.c:44
 msgid ""
 "This program is free software; you may redistribute it under the terms of\n"
 "the GNU General Public License.  This program has absolutely no warranty.\n"
@@ -1017,371 +1055,398 @@ msgstr ""
 "villkoren i GNU General Public License. Detta program har ingen som\n"
 "helst garanti.\n"
 
-#: ldver.c:52
+#: ldver.c:53
 msgid "  Supported emulations:\n"
 msgstr "  Emuleringar som stöds:\n"
 
-#: ldwrite.c:59 ldwrite.c:195
+#: ldwrite.c:54 ldwrite.c:190
 msgid "%P%F: bfd_new_link_order failed\n"
 msgstr "%P%F: bfd_new_link_order misslyckades\n"
 
-#: ldwrite.c:325
+#: ldwrite.c:310
 msgid "%F%P: clone section failed: %E\n"
 msgstr "%F%P: klonsektion misslyckades: %E\n"
 
-#: ldwrite.c:364
+#: ldwrite.c:348
 #, c-format
 msgid "%8x something else\n"
 msgstr "%8x nÃ¥gonting annat\n"
 
-#: ldwrite.c:547
+#: ldwrite.c:525
 msgid "%F%P: final link failed: %E\n"
 msgstr "%F%P: avslutande länkning misslyckades: %E\n"
 
-#: lexsup.c:172 lexsup.c:267
+#: lexsup.c:179 lexsup.c:284
 msgid "KEYWORD"
 msgstr "NYCKELORD"
 
-#: lexsup.c:172
+#: lexsup.c:179
 msgid "Shared library control for HP/UX compatibility"
 msgstr "Styrning av delade bibliotek för kompatibilitet med HP/UX"
 
-#: lexsup.c:175
+#: lexsup.c:182
 msgid "ARCH"
 msgstr "ARK"
 
-#: lexsup.c:175
+#: lexsup.c:182
 msgid "Set architecture"
 msgstr "Ställ in arkitektur"
 
-#: lexsup.c:177 lexsup.c:336
+#: lexsup.c:184 lexsup.c:357
 msgid "TARGET"
 msgstr "MÃ…L"
 
-#: lexsup.c:177
+#: lexsup.c:184
 msgid "Specify target for following input files"
 msgstr "Ange mÃ¥l för följande indatafiler"
 
-#: lexsup.c:179 lexsup.c:220 lexsup.c:232 lexsup.c:241 lexsup.c:312
-#: lexsup.c:343 lexsup.c:383
+#: lexsup.c:186 lexsup.c:229 lexsup.c:241 lexsup.c:254 lexsup.c:329
+#: lexsup.c:364 lexsup.c:408
 msgid "FILE"
 msgstr "FIL"
 
-#: lexsup.c:179
+#: lexsup.c:186
 msgid "Read MRI format linker script"
 msgstr "Läs länkskript i MRI-format"
 
-#: lexsup.c:181
+#: lexsup.c:188
 msgid "Force common symbols to be defined"
 msgstr "Tvinga gemensamma symboler att vara definierade"
 
-#: lexsup.c:185 lexsup.c:373 lexsup.c:375 lexsup.c:377
+#: lexsup.c:192 lexsup.c:398 lexsup.c:400 lexsup.c:402
 msgid "ADDRESS"
 msgstr "ADRESS"
 
-#: lexsup.c:185
+#: lexsup.c:192
 msgid "Set start address"
 msgstr "Ställ in startadress"
 
-#: lexsup.c:187
+#: lexsup.c:194
 msgid "Export all dynamic symbols"
 msgstr "Exportera alla dynamiska symboler"
 
-#: lexsup.c:189
+#: lexsup.c:196
 msgid "Link big-endian objects"
 msgstr "Länka objekt som Ã¤r big-endian"
 
-#: lexsup.c:191
+#: lexsup.c:198
 msgid "Link little-endian objects"
 msgstr "Länka objekt som Ã¤r little-endian"
 
-#: lexsup.c:193 lexsup.c:196
+#: lexsup.c:200 lexsup.c:203
 msgid "SHLIB"
 msgstr "DELBIBL"
 
-#: lexsup.c:193
+#: lexsup.c:200
 msgid "Auxiliary filter for shared object symbol table"
 msgstr "Yttre filter för symboltabell Ã¶ver delade objekt"
 
-#: lexsup.c:196
+#: lexsup.c:203
 msgid "Filter for shared object symbol table"
 msgstr "Filter för symboltabell Ã¶ver delade objekt"
 
-#: lexsup.c:198
+#: lexsup.c:205
 msgid "Ignored"
 msgstr "Ignorerad"
 
-#: lexsup.c:200
+#: lexsup.c:207
 msgid "SIZE"
 msgstr "STORLEK"
 
-#: lexsup.c:200
+#: lexsup.c:207
 msgid "Small data size (if no size, same as --shared)"
 msgstr "Liten datastorlek (om ingen storlek, samma som --shared)"
 
-#: lexsup.c:203
+#: lexsup.c:210
 msgid "FILENAME"
 msgstr "FILNAMN"
 
-#: lexsup.c:203
+#: lexsup.c:210
 msgid "Set internal name of shared library"
 msgstr "Ställ in internt namn pÃ¥ delat bibliotek"
 
-#: lexsup.c:205
+#: lexsup.c:212
 msgid "PROGRAM"
 msgstr "PROGRAM"
 
-#: lexsup.c:205
+#: lexsup.c:212
 msgid "Set PROGRAM as the dynamic linker to use"
 msgstr "Ställ in PROGRAM som den dynamiska länkare som ska användas"
 
-#: lexsup.c:207
+#: lexsup.c:214
 msgid "LIBNAME"
 msgstr "BIBLNAMN"
 
-#: lexsup.c:207
+#: lexsup.c:214
 msgid "Search for library LIBNAME"
 msgstr "Sök efter biblioteket BIBLNAMN"
 
-#: lexsup.c:209
+#: lexsup.c:216
 msgid "DIRECTORY"
 msgstr "KATALOG"
 
-#: lexsup.c:209
+#: lexsup.c:216
 msgid "Add DIRECTORY to library search path"
 msgstr "Lägg till KATALOG till bibliotekssökvägen"
 
-#: lexsup.c:211
+#: lexsup.c:218
 msgid "EMULATION"
 msgstr "EMULERING"
 
-#: lexsup.c:211
+#: lexsup.c:218
 msgid "Set emulation"
 msgstr "Ställ in emulering"
 
-#: lexsup.c:213
+#: lexsup.c:220
 msgid "Print map file on standard output"
 msgstr "Visa tabellfil pÃ¥ standard ut"
 
-#: lexsup.c:215
+#: lexsup.c:222
 msgid "Do not page align data"
 msgstr "Justera inte data efter jämna sidor"
 
-#: lexsup.c:217
+#: lexsup.c:224
 msgid "Do not page align data, do not make text readonly"
 msgstr "Justera inte data efter jämna sidor, gör inte texten endast läsbar"
 
-#: lexsup.c:220
+#: lexsup.c:227
+msgid "Page align data, make text readonly"
+msgstr "Sidjustera data, gör texten endast läsbar"
+
+#: lexsup.c:229
 msgid "Set output file name"
 msgstr "Ställ in utdatafilnamnet"
 
-#: lexsup.c:222
+#: lexsup.c:231
 msgid "Optimize output file"
 msgstr "Optimera utdatafil"
 
-#: lexsup.c:224
+#: lexsup.c:233
 msgid "Ignored for SVR4 compatibility"
 msgstr "Ignorerad för kompatibilitet med SVR4"
 
-#: lexsup.c:228
-msgid "Generate relocateable output"
+#: lexsup.c:237
+msgid "Generate relocatable output"
 msgstr "Generera omlokaliseringsbar utdata"
 
-#: lexsup.c:232
+#: lexsup.c:241
 msgid "Just link symbols (if directory, same as --rpath)"
 msgstr "Länka bara symboler (om katalog, samma som --rpath)"
 
-#: lexsup.c:235
+#: lexsup.c:244
 msgid "Strip all symbols"
 msgstr "Ta bort alla symboler"
 
-#: lexsup.c:237
+#: lexsup.c:246
 msgid "Strip debugging symbols"
 msgstr "Ta bort felsökningssymboler"
 
-#: lexsup.c:239
+#: lexsup.c:248
+msgid "Strip symbols in discarded sections"
+msgstr "Ta bort symboler i kastade sektioner"
+
+#: lexsup.c:250
+msgid "Do not strip symbols in discarded sections"
+msgstr "Ta inte bort symboler i kastade sektioner"
+
+#: lexsup.c:252
 msgid "Trace file opens"
 msgstr "SpÃ¥ra filöppningar"
 
-#: lexsup.c:241
+#: lexsup.c:254
 msgid "Read linker script"
 msgstr "Läs länkskript"
 
-#: lexsup.c:243 lexsup.c:259 lexsup.c:298 lexsup.c:310 lexsup.c:367
-#: lexsup.c:386 lexsup.c:406
+#: lexsup.c:256 lexsup.c:272 lexsup.c:315 lexsup.c:327 lexsup.c:392
+#: lexsup.c:411 lexsup.c:431
 msgid "SYMBOL"
 msgstr "SYMBOL"
 
-#: lexsup.c:243
+#: lexsup.c:256
 msgid "Start with undefined reference to SYMBOL"
 msgstr "Börja med odefinierad referens till SYMBOL"
 
-#: lexsup.c:245
+#: lexsup.c:258
 msgid "[=SECTION]"
 msgstr "[=SEKTION]"
 
-#: lexsup.c:245
+#: lexsup.c:258
 msgid "Don't merge input [SECTION | orphan] sections"
 msgstr "SlÃ¥ inte samman [SEKTION | föräldralösa] sektioner"
 
-#: lexsup.c:247
+#: lexsup.c:260
 msgid "Build global constructor/destructor tables"
 msgstr "Bygg globala konstruktors-/destruktorstabeller"
 
-#: lexsup.c:249
+#: lexsup.c:262
 msgid "Print version information"
 msgstr "Visa versionsinformation"
 
-#: lexsup.c:251
+#: lexsup.c:264
 msgid "Print version and emulation information"
 msgstr "Visa versions- och emuleringsinformation"
 
-#: lexsup.c:253
+#: lexsup.c:266
 msgid "Discard all local symbols"
 msgstr "Kasta alla lokala symboler"
 
-#: lexsup.c:255
+#: lexsup.c:268
 msgid "Discard temporary local symbols (default)"
 msgstr "Kasta temporära lokala symboler (standard)"
 
-#: lexsup.c:257
+#: lexsup.c:270
 msgid "Don't discard any local symbols"
 msgstr "Kasta inte nÃ¥gra lokala symboler"
 
-#: lexsup.c:259
+#: lexsup.c:272
 msgid "Trace mentions of SYMBOL"
 msgstr "SpÃ¥ra omnämningar av SYMBOL"
 
-#: lexsup.c:261 lexsup.c:345 lexsup.c:347
+#: lexsup.c:274 lexsup.c:366 lexsup.c:368
 msgid "PATH"
 msgstr "SÖKVÄG"
 
-#: lexsup.c:261
+#: lexsup.c:274
 msgid "Default search path for Solaris compatibility"
 msgstr "Standardsökväg för Solaris-kompatibilitet"
 
-#: lexsup.c:263
+#: lexsup.c:276
 msgid "Start a group"
 msgstr "Starta en grupp"
 
-#: lexsup.c:265
+#: lexsup.c:278
 msgid "End a group"
 msgstr "Sluta en grupp"
 
-#: lexsup.c:267
+#: lexsup.c:280
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Acceptera indatafiler vars arkitektur inte kan avgöras"
+
+#: lexsup.c:282
+msgid "Reject input files whose architecture is unknown"
+msgstr "Avvisa indatafiler vars arkitektur Ã¤r okänd"
+
+#: lexsup.c:284
 msgid "Ignored for SunOS compatibility"
 msgstr "Ignorerad för SunOS-kompatibilitet"
 
-#: lexsup.c:269
+#: lexsup.c:286
 msgid "Link against shared libraries"
 msgstr "Länka mot delade bibliotek"
 
-#: lexsup.c:275
+#: lexsup.c:292
 msgid "Do not link against shared libraries"
 msgstr "Länka inte mot delade bibliotek"
 
-#: lexsup.c:283
+#: lexsup.c:300
 msgid "Bind global references locally"
 msgstr "Bind globala referenser lokalt"
 
-#: lexsup.c:285
+#: lexsup.c:302
 msgid "Check section addresses for overlaps (default)"
 msgstr "Kontrollera sektionsadresser för Ã¶verlappningar (standard)"
 
-#: lexsup.c:287
+#: lexsup.c:304
 msgid "Do not check section addresses for overlaps"
 msgstr "Kontrollera inte sektionsadresser för Ã¶verlappningar"
 
-#: lexsup.c:290
+#: lexsup.c:307
 msgid "Output cross reference table"
 msgstr "Skapa korsreferenstabell"
 
-#: lexsup.c:292
+#: lexsup.c:309
 msgid "SYMBOL=EXPRESSION"
 msgstr "SYMBOL=UTTRYCK"
 
-#: lexsup.c:292
+#: lexsup.c:309
 msgid "Define a symbol"
 msgstr "Definiera en symbol"
 
-#: lexsup.c:294
+#: lexsup.c:311
 msgid "[=STYLE]"
 msgstr "[=STIL]"
 
-#: lexsup.c:294
+#: lexsup.c:311
 msgid "Demangle symbol names [using STYLE]"
 msgstr "Avkoda symbolnamn [använd STIL]"
 
-#: lexsup.c:296
+#: lexsup.c:313
 msgid "Generate embedded relocs"
 msgstr "Generera inbäddade omlokaliseringar"
 
-#: lexsup.c:298
+#: lexsup.c:315
 msgid "Call SYMBOL at unload-time"
 msgstr "Anropa SYMBOL vid urladdning"
 
-#: lexsup.c:300
+#: lexsup.c:317
 msgid "Force generation of file with .exe suffix"
 msgstr "Tvinga generering av fil med Ã¤ndelsen .exe"
 
-#: lexsup.c:302
+#: lexsup.c:319
 msgid "Remove unused sections (on some targets)"
 msgstr "Ta bort oanvända sektioner (pÃ¥ vissa mÃ¥l)"
 
-#: lexsup.c:305
+#: lexsup.c:322
 msgid "Don't remove unused sections (default)"
 msgstr "Ta inte bort oanvända sektioner (standard)"
 
-#: lexsup.c:308
+#: lexsup.c:325
 msgid "Print option help"
 msgstr "Visa hjälp om flaggor"
 
-#: lexsup.c:310
+#: lexsup.c:327
 msgid "Call SYMBOL at load-time"
 msgstr "Anropa SYMBOL vid inläsning"
 
-#: lexsup.c:312
+#: lexsup.c:329
 msgid "Write a map file"
 msgstr "Skriv en tabellfil"
 
-#: lexsup.c:314
+#: lexsup.c:331
 msgid "Do not define Common storage"
 msgstr "Definiera inte gemensam lagring"
 
-#: lexsup.c:316
+#: lexsup.c:333
 msgid "Do not demangle symbol names"
 msgstr "Avkoda inte symbolnamn"
 
-#: lexsup.c:318
+#: lexsup.c:335
 msgid "Use less memory and more disk I/O"
 msgstr "Använd mindre minne och mer disk-I/O"
 
-#: lexsup.c:320
+#: lexsup.c:337
 msgid "Allow no undefined symbols"
 msgstr "TillÃ¥t inga odefinierade symboler"
 
-#: lexsup.c:322
-msgid "Allow undefined symbols in shared objects"
-msgstr "TillÃ¥t odefinierade symboler i delade objekt"
+#: lexsup.c:339
+msgid "Allow undefined symbols in shared objects (the default)"
+msgstr "TillÃ¥t odefinierade symboler i delade objekt (standardalternativet)"
+
+#: lexsup.c:341
+msgid "Do not allow undefined symbols in shared objects"
+msgstr "TillÃ¥t inte odefinierade symboler i delade objekt"
 
-#: lexsup.c:324
+#: lexsup.c:343
 msgid "Allow multiple definitions"
 msgstr "TillÃ¥t flera defintioner"
 
-# src/prefs.c:170
-#: lexsup.c:326
+#: lexsup.c:345
+msgid "Disallow undefined version"
+msgstr "TillÃ¥t inte odefinierad version"
+
+#: lexsup.c:347
 msgid "Don't warn about mismatched input files"
 msgstr "Varna inte om opassande indatafiler"
 
-#: lexsup.c:328
+#: lexsup.c:349
 msgid "Turn off --whole-archive"
 msgstr "SlÃ¥ av ---whole-archive"
 
-#: lexsup.c:330
+#: lexsup.c:351
 msgid "Create an output file even if errors occur"
 msgstr "Skapa en utdatafil Ã¤ven om fel förekommer"
 
-#: lexsup.c:334
+#: lexsup.c:355
 msgid ""
 "Only use library directories specified on\n"
 "\t\t\t\tthe command line"
@@ -1389,107 +1454,111 @@ msgstr ""
 "Använd endast bibliotekskataloger som anges\n"
 "\t\t\t\tpÃ¥ kommandoraden"
 
-#: lexsup.c:336
+#: lexsup.c:357
 msgid "Specify target of output file"
 msgstr "Ange mÃ¥l för utdatafil"
 
-#: lexsup.c:338
+#: lexsup.c:359
 msgid "Ignored for Linux compatibility"
 msgstr "Ignorerad för kompatibilitet med Linux"
 
-#: lexsup.c:340
+#: lexsup.c:361
 msgid "Relax branches on certain targets"
 msgstr "Slappna av greningar pÃ¥ vissa mÃ¥l"
 
-#: lexsup.c:343
+#: lexsup.c:364
 msgid "Keep only symbols listed in FILE"
 msgstr "BehÃ¥ll endast symboler angivna i FIL"
 
-#: lexsup.c:345
+#: lexsup.c:366
 msgid "Set runtime shared library search path"
 msgstr "Ställ in körtidssökväg för delade bibliotek"
 
-#: lexsup.c:347
+#: lexsup.c:368
 msgid "Set link time shared library search path"
 msgstr "Ställ in länkningstidssökväg för delade bibliotek"
 
-#: lexsup.c:349
+#: lexsup.c:370
 msgid "Create a shared library"
 msgstr "Skapa ett delat bibliotek"
 
-#: lexsup.c:353
+#: lexsup.c:374
+msgid "Create a position independent executable"
+msgstr "Skapa en positionsoberoende körbar fil"
+
+#: lexsup.c:378
 msgid "Sort common symbols by size"
 msgstr "Sortera gemensamma symboler efter storlek"
 
-#: lexsup.c:357
+#: lexsup.c:382
 msgid "COUNT"
 msgstr "ANTAL"
 
-#: lexsup.c:357
+#: lexsup.c:382
 msgid "How many tags to reserve in .dynamic section"
 msgstr "Hur mÃ¥nga taggar som ska reserveras i .dynamic-sektion"
 
-#: lexsup.c:359
+#: lexsup.c:384
 msgid "[=SIZE]"
 msgstr "[=STORLEK]"
 
-#: lexsup.c:359
+#: lexsup.c:384
 msgid "Split output sections every SIZE octets"
 msgstr "Dela utdatasektioner var STORLEK oktett"
 
-#: lexsup.c:361
+#: lexsup.c:386
 msgid "[=COUNT]"
 msgstr "[=ANTAL]"
 
-#: lexsup.c:361
+#: lexsup.c:386
 msgid "Split output sections every COUNT relocs"
 msgstr "Dela utdatasektioner var ANTAL omlokalisering"
 
-#: lexsup.c:363
+#: lexsup.c:388
 msgid "Print memory usage statistics"
 msgstr "Visa statistik Ã¶ver minnesanvändning"
 
-#: lexsup.c:365
+#: lexsup.c:390
 msgid "Display target specific options"
 msgstr "Visa mÃ¥lspecifika flaggor"
 
-#: lexsup.c:367
+#: lexsup.c:392
 msgid "Do task level linking"
 msgstr "Utför länkning pÃ¥ uppgiftsnivÃ¥"
 
-#: lexsup.c:369
+#: lexsup.c:394
 msgid "Use same format as native linker"
 msgstr "Använd samma format som inhemska länkaren"
 
-#: lexsup.c:371
+#: lexsup.c:396
 msgid "SECTION=ADDRESS"
 msgstr "SEKTION=ADRESS"
 
-#: lexsup.c:371
+#: lexsup.c:396
 msgid "Set address of named section"
 msgstr "Ställ in adress pÃ¥ namngiven sektion"
 
-#: lexsup.c:373
+#: lexsup.c:398
 msgid "Set address of .bss section"
 msgstr "Ställ in adress pÃ¥ .bss-sektion"
 
-#: lexsup.c:375
+#: lexsup.c:400
 msgid "Set address of .data section"
 msgstr "Ställ in adress pÃ¥ .data-sektion"
 
-#: lexsup.c:377
+#: lexsup.c:402
 msgid "Set address of .text section"
 msgstr "Ställ in adress pÃ¥ .text-sektion"
 
-#: lexsup.c:379
+#: lexsup.c:404
 msgid "Output lots of information during link"
 msgstr "Visa mycket information under länkning"
 
-#: lexsup.c:383
+#: lexsup.c:408
 msgid "Read version information script"
 msgstr "Läs skript med versionsinformation"
 
-#: lexsup.c:386
+#: lexsup.c:411
 msgid ""
 "Take export symbols list from .exports, using\n"
 "\t\t\t\tSYMBOL as the version."
@@ -1497,43 +1566,43 @@ msgstr ""
 "Plocka lista med exportsymboler frÃ¥n .exports och\n"
 "\t\t\t\tanvänd SYMBOL som version."
 
-#: lexsup.c:389
+#: lexsup.c:414
 msgid "Warn about duplicate common symbols"
 msgstr "Varna för dubbla gemensamma symboler"
 
-#: lexsup.c:391
+#: lexsup.c:416
 msgid "Warn if global constructors/destructors are seen"
 msgstr "Varna om globala konstruktorer/destruktorer hittas"
 
-#: lexsup.c:394
+#: lexsup.c:419
 msgid "Warn if the multiple GP values are used"
 msgstr "Varna om flera GP-värden används"
 
-#: lexsup.c:396
+#: lexsup.c:421
 msgid "Warn only once per undefined symbol"
 msgstr "Varna endast en gÃ¥ng per odefinierad symbol"
 
-#: lexsup.c:398
+#: lexsup.c:423
 msgid "Warn if start of section changes due to alignment"
 msgstr "Varna om början pÃ¥ sektionen Ã¤ndras pÃ¥ grund av justering"
 
-#: lexsup.c:401
+#: lexsup.c:426
 msgid "Treat warnings as errors"
 msgstr "Behandla varningar som fel"
 
-#: lexsup.c:404
+#: lexsup.c:429
 msgid "Include all objects from following archives"
 msgstr "Inkludera alla objekt frÃ¥n följande arkiv"
 
-#: lexsup.c:406
+#: lexsup.c:431
 msgid "Use wrapper functions for SYMBOL"
 msgstr "Använd inkapslingsfunktioner för SYMBOL"
 
-#: lexsup.c:408
+#: lexsup.c:433
 msgid "[=WORDS]"
 msgstr "[=ORD]"
 
-#: lexsup.c:408
+#: lexsup.c:433
 msgid ""
 "Modify problematic branches in last WORDS (1-10,\n"
 "\t\t\t\tdefault 5) words of a page"
@@ -1541,27 +1610,27 @@ msgstr ""
 "Ändra problematiska greningar i sista ORD (1-10,\n"
 "\t\t\t\tstandardvärde 5) orden pÃ¥ en sida"
 
-#: lexsup.c:574
+#: lexsup.c:602
 msgid "%P: unrecognized option '%s'\n"
 msgstr "%P: okänd flagga \"%s\"\n"
 
-#: lexsup.c:576
+#: lexsup.c:604
 msgid "%P%F: use the --help option for usage information\n"
 msgstr "%P%F: använd flaggan --help för användningsinformation\n"
 
-#: lexsup.c:595
+#: lexsup.c:622
 msgid "%P%F: unrecognized -a option `%s'\n"
 msgstr "%P%F: okänd -a-flagga \"%s\"\n"
 
-#: lexsup.c:608
+#: lexsup.c:635
 msgid "%P%F: unrecognized -assert option `%s'\n"
 msgstr "%P%F: okänd -assert-flagga \"%s\"\n"
 
-#: lexsup.c:651
+#: lexsup.c:678
 msgid "%F%P: unknown demangling style `%s'"
 msgstr "%F%P: okänd avkodningsstil \"%s\""
 
-#: lexsup.c:711
+#: lexsup.c:737
 msgid "%P%F: invalid number `%s'\n"
 msgstr "%P%F: ogiltigt tal \"%s\"\n"
 
@@ -1573,134 +1642,155 @@ msgstr "%P%F: ogiltigt tal \"%s\"\n"
 #. an error message here.  We cannot just make this a warning,
 #. increment optind, and continue because getopt is too confused
 #. and will seg-fault the next time around.
-#: lexsup.c:812
+#: lexsup.c:849
 msgid "%P%F: bad -rpath option\n"
 msgstr "%P%F: okänd -rpath-flagga\n"
 
-#: lexsup.c:910
+#: lexsup.c:953
 msgid "%P%F: -shared not supported\n"
 msgstr "%P%F: -shared stöds inte\n"
 
-#: lexsup.c:942
+#: lexsup.c:962
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie stöds inte\n"
+
+#: lexsup.c:994
 msgid "%P%F: invalid argument to option \"--section-start\"\n"
 msgstr "%P%F: ogiltigt argument till flaggan \"--section-start\"\n"
 
-#: lexsup.c:948
+#: lexsup.c:1000
 msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
 msgstr "%P%F: argument saknas till flaggan \"--section-start\"\n"
 
-#: lexsup.c:1097
+#: lexsup.c:1158
 msgid "%P%F: may not nest groups (--help for usage)\n"
 msgstr "%P%F: fÃ¥r inte nästla grupper (--help för användning)\n"
 
-#: lexsup.c:1104
+#: lexsup.c:1165
 msgid "%P%F: group ended before it began (--help for usage)\n"
 msgstr "%P%F: gruppen slutade innan den började (--help för användning)\n"
 
-#: lexsup.c:1118
+#: lexsup.c:1179
 msgid "%P%F: invalid argument to option \"mpc860c0\"\n"
 msgstr "%P%F: ogiltigt argument till flaggan \"mpc860c0\"\n"
 
-#: lexsup.c:1173
+#: lexsup.c:1234
 msgid "%P%F: invalid hex number `%s'\n"
 msgstr "%P%F: ogiltigt hexadecimalt tal \"%s\"\n"
 
-#: lexsup.c:1185
+#: lexsup.c:1246
 #, c-format
 msgid "Usage: %s [options] file...\n"
 msgstr "Användning: %s [flaggor] fil...\n"
 
-#: lexsup.c:1187
+#: lexsup.c:1248
 msgid "Options:\n"
 msgstr "Alternativ:\n"
 
 #. Note: Various tools (such as libtool) depend upon the
 #. format of the listings below - do not change them.
-#: lexsup.c:1270
+#: lexsup.c:1331
 #, c-format
 msgid "%s: supported targets:"
 msgstr "%s: mÃ¥l som stöds:"
 
-#: lexsup.c:1278
+#: lexsup.c:1339
 #, c-format
 msgid "%s: supported emulations: "
 msgstr "%s: emuleringar som stöds: "
 
-#: lexsup.c:1283
+#: lexsup.c:1344
 #, c-format
 msgid "%s: emulation specific options:\n"
 msgstr "%s: emuleringsspecifika flaggor:\n"
 
-#: lexsup.c:1287
+#: lexsup.c:1348
 #, c-format
 msgid "Report bugs to %s\n"
 msgstr ""
 "Rapportera fel till %s\n"
 "Rapportera fel i Ã¶versättningen till sv@li.org\n"
 
-#: mri.c:334
+#: mri.c:307
 msgid "%P%F: unknown format type %s\n"
 msgstr "%P%F: okänd formattyp %s\n"
 
-#: pe-dll.c:321
+#: pe-dll.c:301
 #, c-format
 msgid "%XUnsupported PEI architecture: %s\n"
 msgstr "%XPEI-arkitekturen stöds inte: %s\n"
 
-#: pe-dll.c:671
+#: pe-dll.c:650
 #, c-format
 msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
 msgstr "%XFel, dubbel EXPORT med ordinaler: %s (%d gentemot %d)\n"
 
-#: pe-dll.c:678
+#: pe-dll.c:657
 #, c-format
 msgid "Warning, duplicate EXPORT: %s\n"
 msgstr "Varning, dubbel EXPORT: %s\n"
 
-#: pe-dll.c:742
+#: pe-dll.c:723
 #, c-format
 msgid "%XCannot export %s: symbol not defined\n"
 msgstr "%XKan inte exportera %s: symbolen Ã¤r inte definierad\n"
 
-#: pe-dll.c:748
+#: pe-dll.c:729
 #, c-format
 msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
 msgstr "%XKan inte exportera %s: symbolen Ã¤r av fel typ (%d gentemot %d)\n"
 
-#: pe-dll.c:755
+#: pe-dll.c:736
 #, c-format
 msgid "%XCannot export %s: symbol not found\n"
 msgstr "%XKan inte exportera %s: symbolen hittades inte\n"
 
-#: pe-dll.c:870
+#: pe-dll.c:848
 #, c-format
 msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
 msgstr "%XFel, ordinalen användes tvÃ¥ gÃ¥nger: %d (%s gentemot %s)\n"
 
-#: pe-dll.c:1181
+#: pe-dll.c:1165
 #, c-format
 msgid "%XError: %d-bit reloc in dll\n"
 msgstr "%XFel: %d-bitars omlokalisering i dll\n"
 
-#: pe-dll.c:1316
+#: pe-dll.c:1296
 #, c-format
 msgid "%s: Can't open output def file %s\n"
 msgstr "%s: Kan inte Ã¶ppna utdatadefinitionsfilen %s\n"
 
-#: pe-dll.c:1459
+#: pe-dll.c:1439
 msgid "; no contents available\n"
 msgstr "; inget innehÃ¥ll Ã¤r tillgängligt\n"
 
-#: pe-dll.c:2128
+#: pe-dll.c:2203
+msgid "%C: variable '%T' can't be auto-imported. Please read the documentation for ld's --enable-auto-import for details.\n"
+msgstr "%C: variabeln \"%T\" kan inte importeras automatiskt. Läs dokumentationen för ld:s --enable-auto-import för detaljer.\n"
+
+#: pe-dll.c:2233
 #, c-format
 msgid "%XCan't open .lib file: %s\n"
 msgstr "%XKan inte Ã¶ppna .lib-filen: %s\n"
 
-#: pe-dll.c:2133
+#: pe-dll.c:2238
 #, c-format
 msgid "Creating library file: %s\n"
 msgstr "Skapar biblioteksfil: %s\n"
 
+#~ msgid ""
+#~ "  --enable-auto-import               Do sophisticated linking of _sym to\n"
+#~ "                                       __imp_sym for DATA references\n"
+#~ msgstr ""
+#~ "  --enable-auto-import               Utför sofistikerad länkning av _sym till\n"
+#~ "                                       __imp_sym för DATA-referenser\n"
+
+#~ msgid "%B: In function `%T':\n"
+#~ msgstr "%B: I funktionen \"%T\":\n"
+
+#~ msgid "Allow undefined symbols in shared objects"
+#~ msgstr "TillÃ¥t odefinierade symboler i delade objekt"
+
 #~ msgid "                                       create __imp_<SYMBOL> as well.\n"
 #~ msgstr "                                       skapa Ã¤ven __imp_<SYMBOL>.\n"
 
index 4ce09aa..cd1cba1 100644 (file)
@@ -1,3 +1,23 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-03-27  Alexandre Oliva  <aoliva@redhat.com>
+       * ld-frv/fdpic*.d: Adjust to compensate for page size change.
+
+       2004-02-24  Alexandre Oliva  <aoliva@redhat.com>
+       * ld-frv/fdpic-pie-2.d: Adjust for decay of FUNCDESC relocs that
+       bind locally.
+       * ld-frv/fdpic-pie-8.d: Likewise.
+       * ld-frv/fdpic-shared-4.d: Likewise.
+       * ld-frv/fdpic-pie-6-fail.d: Renamed from...
+       * ld-frv/fdpic-pie-6.d: New test.
+       * ld-frv/fdpic-shared-6-fail.d: Renamed from...
+       * ld-frv/fdpic-shared-6.d: New test.
+       * ld-frv/fdpic6.ldv: New.
+       * ld-frv/fdpic-static-6.d: Adjust test name.
+       * ld-frv/fdpic-pie-8-fail.d: Removed.
+       * ld-frv/fdpic.exp: Run new tests.
+
 2004-04-08  Alan Modra  <amodra@bigpond.net.au>
 
        PR 47.
index da356ae..15d36ae 100644 (file)
@@ -32,27 +32,27 @@ Disassembly of section \.text:
  418:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010430 <D1>:
-   10430:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10430: R_FRV_32 \.data
-
-00010434 <\.D0>:
-   10434:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10434: R_FRV_32 \.got
-   10438:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10438: R_FRV_32 \.text
+00004430 <D1>:
+    4430:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4430: R_FRV_32  \.data
+
+00004434 <\.D0>:
+    4434:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4434: R_FRV_32  \.got
+    4438:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4438: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000104b8 <_GLOBAL_OFFSET_TABLE_-0x8>:
-   104b8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       104b8: R_FRV_FUNCDESC_VALUE     \.text
-   104bc:      00 00 00 02     add\.p gr0,fp,gr0
+000044b8 <_GLOBAL_OFFSET_TABLE_-0x8>:
+    44b8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       44b8: R_FRV_FUNCDESC_VALUE      \.text
+    44bc:      00 00 00 02     add\.p gr0,fp,gr0
 
-000104c0 <_GLOBAL_OFFSET_TABLE_>:
+000044c0 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   104cc:      00 00 00 04     add\.p gr0,gr4,gr0
-                       104cc: R_FRV_32 \.text
-   104d0:      00 00 00 00     add\.p gr0,gr0,gr0
-                       104d0: R_FRV_32 \.got
-   104d4:      00 00 00 04     add\.p gr0,gr4,gr0
-                       104d4: R_FRV_32 \.data
+    44cc:      00 00 00 04     add\.p gr0,gr4,gr0
+                       44cc: R_FRV_32  \.text
+    44d0:      00 00 00 00     add\.p gr0,gr0,gr0
+                       44d0: R_FRV_32  \.got
+    44d4:      00 00 00 04     add\.p gr0,gr4,gr0
+                       44d4: R_FRV_32  \.data
index fb7691a..fb5e1e6 100644 (file)
@@ -32,39 +32,41 @@ Disassembly of section \.text:
  618:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010630 <D2>:
-   10630:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10630: R_FRV_32 \.data
+00004630 <D2>:
+    4630:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4630: R_FRV_32  \.data
 
-00010634 <GD0>:
-   10634:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10634: R_FRV_FUNCDESC   GFb
-   10638:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10638: R_FRV_32 \.text
+00004634 <GD0>:
+    4634:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4634: R_FRV_FUNCDESC    \.text
+    4638:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4638: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000106b8 <_GLOBAL_OFFSET_TABLE_-0x18>:
-   106b8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106b8: R_FRV_FUNCDESC_VALUE     \.text
-   106bc:      00 00 00 02     add\.p gr0,fp,gr0
-   106c0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106c0: R_FRV_FUNCDESC_VALUE     \.text
-   106c4:      00 00 00 02     add\.p gr0,fp,gr0
-   106c8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106c8: R_FRV_FUNCDESC_VALUE     \.text
-   106cc:      00 00 00 02     add\.p gr0,fp,gr0
+000046b8 <_GLOBAL_OFFSET_TABLE_-0x18>:
+    46b8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46b8: R_FRV_FUNCDESC_VALUE      \.text
+    46bc:      00 00 00 02     add\.p gr0,fp,gr0
+    46c0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46c0: R_FRV_FUNCDESC_VALUE      \.text
+    46c4:      00 00 00 02     add\.p gr0,fp,gr0
+    46c8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46c8: R_FRV_FUNCDESC_VALUE      \.text
+    46cc:      00 00 00 02     add\.p gr0,fp,gr0
 
-000106d0 <_GLOBAL_OFFSET_TABLE_>:
+000046d0 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-                       106dc: R_FRV_FUNCDESC   GF4
-   106e0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106e0: R_FRV_32 \.text
-       \.\.\.
-                       106e4: R_FRV_FUNCDESC   GF6
-                       106e8: R_FRV_FUNCDESC   GF5
-   106ec:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106ec: R_FRV_32 \.data
-   106f0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106f0: R_FRV_32 \.text
-   106f4:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106f4: R_FRV_32 \.text
+    46dc:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46dc: R_FRV_FUNCDESC    \.text
+    46e0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46e0: R_FRV_32  \.text
+    46e4:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46e4: R_FRV_FUNCDESC    \.text
+    46e8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46e8: R_FRV_FUNCDESC    \.text
+    46ec:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46ec: R_FRV_32  \.data
+    46f0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46f0: R_FRV_32  \.text
+    46f4:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46f4: R_FRV_32  \.text
index eaca671..c9263f7 100644 (file)
@@ -1,6 +1,74 @@
-#name: FRV uClinux PIC relocs to undefined symbols, pie linking
+#name: FRV uClinux PIC relocs to weak undefined symbols, pie linking
 #source: fdpic6.s
 #objdump: -DR -j .text -j .data -j .got -j .plt
 #as: -mfdpic
-#ld: -pie
-#error: different segments
+#ld: -pie --defsym WD1=D6
+
+.*:     file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+000005a8 <\.plt>:
+ 5a8:  00 00 00 08     add\.p gr0,gr8,gr0
+ 5ac:  c0 1a 00 06     bra 5c4 <F6-0x10>
+ 5b0:  00 00 00 00     add\.p gr0,gr0,gr0
+ 5b4:  c0 1a 00 04     bra 5c4 <F6-0x10>
+ 5b8:  00 00 00 10     add\.p gr0,gr16,gr0
+ 5bc:  c0 1a 00 02     bra 5c4 <F6-0x10>
+ 5c0:  00 00 00 18     add\.p gr0,gr24,gr0
+ 5c4:  88 08 f1 40     ldd @\(gr15,gr0\),gr4
+ 5c8:  80 30 40 00     jmpl @\(gr4,gr0\)
+ 5cc:  9c cc ff f0     lddi @\(gr15,-16\),gr14
+ 5d0:  80 30 e0 00     jmpl @\(gr14,gr0\)
+Disassembly of section \.text:
+
+000005d4 <F6>:
+ 5d4:  fe 3f ff fe     call 5cc <F6-0x8>
+ 5d8:  80 40 f0 0c     addi gr15,12,gr0
+ 5dc:  80 fc 00 24     setlos 0x24,gr0
+ 5e0:  80 f4 00 20     setlo 0x20,gr0
+ 5e4:  80 f8 00 00     sethi hi\(0x0\),gr0
+ 5e8:  80 40 f0 10     addi gr15,16,gr0
+ 5ec:  80 fc 00 18     setlos 0x18,gr0
+ 5f0:  80 f4 00 1c     setlo 0x1c,gr0
+ 5f4:  80 f8 00 00     sethi hi\(0x0\),gr0
+ 5f8:  80 40 ff f8     addi gr15,-8,gr0
+ 5fc:  80 fc ff e8     setlos 0xffffffe8,gr0
+ 600:  80 f4 ff e0     setlo 0xffe0,gr0
+ 604:  80 f8 ff ff     sethi 0xffff,gr0
+ 608:  80 f4 ff 44     setlo 0xff44,gr0
+ 60c:  80 f8 ff ff     sethi 0xffff,gr0
+ 610:  80 f4 00 14     setlo 0x14,gr0
+ 614:  80 f8 00 00     sethi hi\(0x0\),gr0
+Disassembly of section \.data:
+
+0000462c <D6>:
+       \.\.\.
+                       462c: R_FRV_32  WD0
+                       4630: R_FRV_FUNCDESC    WFb
+                       4634: R_FRV_32  WFb
+Disassembly of section \.got:
+
+000046c8 <_GLOBAL_OFFSET_TABLE_-0x20>:
+    46c8:      00 00 05 c4     subxcc\.p gr0,gr4,gr0,icc1
+                       46c8: R_FRV_FUNCDESC_VALUE      WF9
+    46cc:      00 00 00 02     add\.p gr0,fp,gr0
+    46d0:      00 00 05 bc     subx\.p gr0,gr60,gr0,icc1
+                       46d0: R_FRV_FUNCDESC_VALUE      WF8
+    46d4:      00 00 00 02     add\.p gr0,fp,gr0
+    46d8:      00 00 05 b4     subx\.p gr0,gr52,gr0,icc1
+                       46d8: R_FRV_FUNCDESC_VALUE      WF0
+    46dc:      00 00 00 02     add\.p gr0,fp,gr0
+    46e0:      00 00 05 ac     subx\.p gr0,gr44,gr0,icc1
+                       46e0: R_FRV_FUNCDESC_VALUE      WF7
+    46e4:      00 00 00 02     add\.p gr0,fp,gr0
+
+000046e8 <_GLOBAL_OFFSET_TABLE_>:
+       \.\.\.
+                       46f4: R_FRV_32  WF1
+                       46f8: R_FRV_FUNCDESC    WF4
+                       46fc: R_FRV_32  WD2
+                       4700: R_FRV_FUNCDESC    WF5
+                       4704: R_FRV_FUNCDESC    WF6
+                       4708: R_FRV_32  WF3
+                       470c: R_FRV_32  WF2
index a3f0478..67a6abf 100644 (file)
@@ -32,27 +32,27 @@ Disassembly of section \.text:
  418:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010430 <D7>:
-   10430:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10430: R_FRV_32 \.data
-
-00010434 <\.D0>:
-   10434:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10434: R_FRV_32 \.got
-   10438:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10438: R_FRV_32 \.text
+00004430 <D7>:
+    4430:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4430: R_FRV_32  \.data
+
+00004434 <\.D0>:
+    4434:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4434: R_FRV_32  \.got
+    4438:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4438: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000104b8 <_GLOBAL_OFFSET_TABLE_-0x8>:
-   104b8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       104b8: R_FRV_FUNCDESC_VALUE     \.text
-   104bc:      00 00 00 02     add\.p gr0,fp,gr0
+000044b8 <_GLOBAL_OFFSET_TABLE_-0x8>:
+    44b8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       44b8: R_FRV_FUNCDESC_VALUE      \.text
+    44bc:      00 00 00 02     add\.p gr0,fp,gr0
 
-000104c0 <_GLOBAL_OFFSET_TABLE_>:
+000044c0 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   104cc:      00 00 00 08     add\.p gr0,gr8,gr0
-                       104cc: R_FRV_32 \.text
-   104d0:      00 00 00 00     add\.p gr0,gr0,gr0
-                       104d0: R_FRV_32 \.got
-   104d4:      00 00 00 08     add\.p gr0,gr8,gr0
-                       104d4: R_FRV_32 \.data
+    44cc:      00 00 00 08     add\.p gr0,gr8,gr0
+                       44cc: R_FRV_32  \.text
+    44d0:      00 00 00 00     add\.p gr0,gr0,gr0
+                       44d0: R_FRV_32  \.got
+    44d4:      00 00 00 08     add\.p gr0,gr8,gr0
+                       44d4: R_FRV_32  \.data
index f797b6a..e69de29 100644 (file)
@@ -1,6 +0,0 @@
-#name: FRV uClinux PIC relocs to global symbols with addends, failing pie linking
-#source: fdpic8.s
-#objdump: -DR -j .text -j .data -j .got -j .plt
-#as: -mfdpic
-#ld: -pie
-#error: nonzero addend
index 882f816..20b0ea0 100644 (file)
@@ -2,83 +2,71 @@
 #source: fdpic8.s
 #objdump: -DR -j .text -j .data -j .got -j .plt
 #as: -mfdpic
-#ld: -pie --version-script fdpic8min.ldv
+#ld: -pie
 
 .*:     file format elf.*frv.*
 
 Disassembly of section \.text:
 
-00000498 <F8>:
498:  80 3c 00 02     call 4a0 <GF1\+0x4>
+000005d0 <F8>:
5d0:  80 3c 00 02     call 5d8 <GF0\+0x4>
 
-0000049c <GF1>:
49c:  80 40 f0 10     addi gr15,16,gr0
4a0:  80 fc 00 14     setlos 0x14,gr0
4a4:  80 f4 00 24     setlo 0x24,gr0
4a8:  80 f8 00 00     sethi hi\(0x0\),gr0
4ac:  80 40 f0 0c     addi gr15,12,gr0
4b0:  80 fc 00 1c     setlos 0x1c,gr0
4b4:  80 f4 00 18     setlo 0x18,gr0
4b8:  80 f8 00 00     sethi hi\(0x0\),gr0
4bc:  80 40 ff f8     addi gr15,-8,gr0
4c0:  80 fc ff f0     setlos 0xfffffff0,gr0
4c4:  80 f4 ff c8     setlo 0xffc8,gr0
4c8:  80 f8 ff ff     sethi 0xffff,gr0
4cc:  80 40 ff 48     addi gr15,-184,gr0
4d0:  80 fc ff 48     setlos 0xffffff48,gr0
4d4:  80 f4 ff 48     setlo 0xff48,gr0
4d8:  80 f8 ff ff     sethi 0xffff,gr0
4dc:  80 f4 00 20     setlo 0x20,gr0
4e0:  80 f8 00 00     sethi hi\(0x0\),gr0
+000005d4 <GF0>:
5d4:  80 40 f0 10     addi gr15,16,gr0
5d8:  80 fc 00 14     setlos 0x14,gr0
5dc:  80 f4 00 24     setlo 0x24,gr0
5e0:  80 f8 00 00     sethi hi\(0x0\),gr0
5e4:  80 40 f0 0c     addi gr15,12,gr0
5e8:  80 fc 00 1c     setlos 0x1c,gr0
5ec:  80 f4 00 18     setlo 0x18,gr0
5f0:  80 f8 00 00     sethi hi\(0x0\),gr0
5f4:  80 40 ff f8     addi gr15,-8,gr0
5f8:  80 fc ff f0     setlos 0xfffffff0,gr0
5fc:  80 f4 ff e8     setlo 0xffe8,gr0
600:  80 f8 ff ff     sethi 0xffff,gr0
604:  80 40 ff 68     addi gr15,-152,gr0
608:  80 fc ff 68     setlos 0xffffff68,gr0
60c:  80 f4 ff 68     setlo 0xff68,gr0
610:  80 f8 ff ff     sethi 0xffff,gr0
614:  80 f4 00 20     setlo 0x20,gr0
618:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-000104f8 <D8>:
-   104f8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       104f8: R_FRV_32 \.data
+00004630 <D8>:
+    4630:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4630: R_FRV_32  \.data
 
-000104fc <GD0>:
-   104fc:      00 00 00 10     add\.p gr0,gr16,gr0
-                       104fc: R_FRV_32 \.got
-   10500:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10500: R_FRV_32 \.text
+00004634 <GD0>:
+    4634:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4634: R_FRV_FUNCDESC    \.text
+    4638:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4638: R_FRV_32  \.text
 Disassembly of section \.got:
 
-00010580 <_GLOBAL_OFFSET_TABLE_-0x38>:
-   10580:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10580: R_FRV_FUNCDESC_VALUE     \.text
-   10584:      00 00 00 02     add\.p gr0,fp,gr0
-   10588:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10588: R_FRV_FUNCDESC_VALUE     \.text
-   1058c:      00 00 00 02     add\.p gr0,fp,gr0
-   10590:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10590: R_FRV_FUNCDESC_VALUE     \.text
-   10594:      00 00 00 02     add\.p gr0,fp,gr0
-   10598:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10598: R_FRV_FUNCDESC_VALUE     \.text
-   1059c:      00 00 00 02     add\.p gr0,fp,gr0
-   105a0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105a0: R_FRV_FUNCDESC_VALUE     \.text
-   105a4:      00 00 00 02     add\.p gr0,fp,gr0
-   105a8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105a8: R_FRV_FUNCDESC_VALUE     \.text
-   105ac:      00 00 00 02     add\.p gr0,fp,gr0
-   105b0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105b0: R_FRV_FUNCDESC_VALUE     \.text
-   105b4:      00 00 00 02     add\.p gr0,fp,gr0
+000046b8 <_GLOBAL_OFFSET_TABLE_-0x18>:
+    46b8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       46b8: R_FRV_FUNCDESC_VALUE      \.text
+    46bc:      00 00 00 02     add\.p gr0,fp,gr0
+    46c0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       46c0: R_FRV_FUNCDESC_VALUE      \.text
+    46c4:      00 00 00 02     add\.p gr0,fp,gr0
+    46c8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       46c8: R_FRV_FUNCDESC_VALUE      \.text
+    46cc:      00 00 00 02     add\.p gr0,fp,gr0
 
-000105b8 <_GLOBAL_OFFSET_TABLE_>:
+000046d0 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   105c4:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105c4: R_FRV_32 \.got
-   105c8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105c8: R_FRV_32 \.text
-   105cc:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105cc: R_FRV_32 \.text
-   105d0:      00 00 00 20     add\.p gr0,gr32,gr0
-                       105d0: R_FRV_32 \.got
-   105d4:      00 00 00 18     add\.p gr0,gr24,gr0
-                       105d4: R_FRV_32 \.got
-   105d8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105d8: R_FRV_32 \.data
-   105dc:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105dc: R_FRV_32 \.text
+    46dc:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46dc: R_FRV_FUNCDESC    \.text
+    46e0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       46e0: R_FRV_32  \.text
+    46e4:      00 00 00 08     add\.p gr0,gr8,gr0
+                       46e4: R_FRV_32  \.text
+    46e8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46e8: R_FRV_FUNCDESC    \.text
+    46ec:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46ec: R_FRV_FUNCDESC    \.text
+    46f0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       46f0: R_FRV_32  \.data
+    46f4:      00 00 00 08     add\.p gr0,gr8,gr0
+                       46f4: R_FRV_32  \.text
index aeb3bc4..f0c5ce8 100644 (file)
@@ -32,27 +32,27 @@ Disassembly of section \.text:
  424:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-0001042c <D1>:
-   1042c:      00 00 00 04     add\.p gr0,gr4,gr0
-                       1042c: R_FRV_32 \.data
-
-00010430 <\.D0>:
-   10430:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10430: R_FRV_32 \.got
-   10434:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10434: R_FRV_32 \.text
+0000442c <D1>:
+    442c:      00 00 00 04     add\.p gr0,gr4,gr0
+                       442c: R_FRV_32  \.data
+
+00004430 <\.D0>:
+    4430:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4430: R_FRV_32  \.got
+    4434:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4434: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000104b0 <_GLOBAL_OFFSET_TABLE_-0x8>:
-   104b0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       104b0: R_FRV_FUNCDESC_VALUE     \.text
-   104b4:      00 00 00 00     add\.p gr0,gr0,gr0
+000044b0 <_GLOBAL_OFFSET_TABLE_-0x8>:
+    44b0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       44b0: R_FRV_FUNCDESC_VALUE      \.text
+    44b4:      00 00 00 00     add\.p gr0,gr0,gr0
 
-000104b8 <_GLOBAL_OFFSET_TABLE_>:
+000044b8 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   104c4:      00 00 00 04     add\.p gr0,gr4,gr0
-                       104c4: R_FRV_32 \.text
-   104c8:      00 00 00 00     add\.p gr0,gr0,gr0
-                       104c8: R_FRV_32 \.got
-   104cc:      00 00 00 04     add\.p gr0,gr4,gr0
-                       104cc: R_FRV_32 \.data
+    44c4:      00 00 00 04     add\.p gr0,gr4,gr0
+                       44c4: R_FRV_32  \.text
+    44c8:      00 00 00 00     add\.p gr0,gr0,gr0
+                       44c8: R_FRV_32  \.got
+    44cc:      00 00 00 04     add\.p gr0,gr4,gr0
+                       44cc: R_FRV_32  \.data
index b506788..04b7f98 100644 (file)
@@ -46,36 +46,36 @@ Disassembly of section \.text:
  63c:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010644 <D2>:
-   10644:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10644: R_FRV_32 GD0
+00004644 <D2>:
+    4644:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4644: R_FRV_32  GD0
 
-00010648 <GD0>:
+00004648 <GD0>:
        \.\.\.
-                       10648: R_FRV_FUNCDESC   GFb
-                       1064c: R_FRV_32 GFb
+                       4648: R_FRV_FUNCDESC    GFb
+                       464c: R_FRV_32  GFb
 Disassembly of section \.got:
 
-000106e0 <_GLOBAL_OFFSET_TABLE_-0x20>:
-   106e0:      00 00 05 dc     subxcc\.p gr0,gr28,gr0,icc1
-                       106e0: R_FRV_FUNCDESC_VALUE     GF9
-   106e4:      00 00 00 00     add\.p gr0,gr0,gr0
-   106e8:      00 00 05 d4     subxcc\.p gr0,gr20,gr0,icc1
-                       106e8: R_FRV_FUNCDESC_VALUE     GF8
-   106ec:      00 00 00 00     add\.p gr0,gr0,gr0
-   106f0:      00 00 05 e4     subxcc\.p gr0,gr36,gr0,icc1
-                       106f0: R_FRV_FUNCDESC_VALUE     GF7
-   106f4:      00 00 00 00     add\.p gr0,gr0,gr0
-   106f8:      00 00 05 cc     subxcc\.p gr0,gr12,gr0,icc1
-                       106f8: R_FRV_FUNCDESC_VALUE     GF0
-   106fc:      00 00 00 00     add\.p gr0,gr0,gr0
+000046e0 <_GLOBAL_OFFSET_TABLE_-0x20>:
+    46e0:      00 00 05 dc     subxcc\.p gr0,gr28,gr0,icc1
+                       46e0: R_FRV_FUNCDESC_VALUE      GF9
+    46e4:      00 00 00 00     add\.p gr0,gr0,gr0
+    46e8:      00 00 05 d4     subxcc\.p gr0,gr20,gr0,icc1
+                       46e8: R_FRV_FUNCDESC_VALUE      GF8
+    46ec:      00 00 00 00     add\.p gr0,gr0,gr0
+    46f0:      00 00 05 e4     subxcc\.p gr0,gr36,gr0,icc1
+                       46f0: R_FRV_FUNCDESC_VALUE      GF7
+    46f4:      00 00 00 00     add\.p gr0,gr0,gr0
+    46f8:      00 00 05 cc     subxcc\.p gr0,gr12,gr0,icc1
+                       46f8: R_FRV_FUNCDESC_VALUE      GF0
+    46fc:      00 00 00 00     add\.p gr0,gr0,gr0
 
-00010700 <_GLOBAL_OFFSET_TABLE_>:
+00004700 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-                       1070c: R_FRV_FUNCDESC   GF4
-                       10710: R_FRV_32 GF1
-                       10714: R_FRV_FUNCDESC   GF6
-                       10718: R_FRV_FUNCDESC   GF5
-                       1071c: R_FRV_32 GD4
-                       10720: R_FRV_32 GF3
-                       10724: R_FRV_32 GF2
+                       470c: R_FRV_FUNCDESC    GF4
+                       4710: R_FRV_32  GF1
+                       4714: R_FRV_FUNCDESC    GF6
+                       4718: R_FRV_FUNCDESC    GF5
+                       471c: R_FRV_32  GD4
+                       4720: R_FRV_32  GF3
+                       4724: R_FRV_32  GF2
index 625975b..3c7d03a 100644 (file)
@@ -32,53 +32,53 @@ Disassembly of section \.text:
  474:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-0001047c <D3>:
-   1047c:      00 00 00 04     add\.p gr0,gr4,gr0
-                       1047c: R_FRV_32 \.data
+0000447c <D3>:
+    447c:      00 00 00 04     add\.p gr0,gr4,gr0
+                       447c: R_FRV_32  \.data
 
-00010480 <HD0>:
-   10480:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10480: R_FRV_32 \.got
-   10484:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10484: R_FRV_32 \.text
+00004480 <HD0>:
+    4480:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4480: R_FRV_32  \.got
+    4484:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4484: R_FRV_32  \.text
 Disassembly of section \.got:
 
-00010500 <_GLOBAL_OFFSET_TABLE_-0x38>:
-   10500:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10500: R_FRV_FUNCDESC_VALUE     \.text
-   10504:      00 00 00 00     add\.p gr0,gr0,gr0
-   10508:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10508: R_FRV_FUNCDESC_VALUE     \.text
-   1050c:      00 00 00 00     add\.p gr0,gr0,gr0
-   10510:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10510: R_FRV_FUNCDESC_VALUE     \.text
-   10514:      00 00 00 00     add\.p gr0,gr0,gr0
-   10518:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10518: R_FRV_FUNCDESC_VALUE     \.text
-   1051c:      00 00 00 00     add\.p gr0,gr0,gr0
-   10520:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10520: R_FRV_FUNCDESC_VALUE     \.text
-   10524:      00 00 00 00     add\.p gr0,gr0,gr0
-   10528:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10528: R_FRV_FUNCDESC_VALUE     \.text
-   1052c:      00 00 00 00     add\.p gr0,gr0,gr0
-   10530:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10530: R_FRV_FUNCDESC_VALUE     \.text
-   10534:      00 00 00 00     add\.p gr0,gr0,gr0
+00004500 <_GLOBAL_OFFSET_TABLE_-0x38>:
+    4500:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4500: R_FRV_FUNCDESC_VALUE      \.text
+    4504:      00 00 00 00     add\.p gr0,gr0,gr0
+    4508:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4508: R_FRV_FUNCDESC_VALUE      \.text
+    450c:      00 00 00 00     add\.p gr0,gr0,gr0
+    4510:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4510: R_FRV_FUNCDESC_VALUE      \.text
+    4514:      00 00 00 00     add\.p gr0,gr0,gr0
+    4518:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4518: R_FRV_FUNCDESC_VALUE      \.text
+    451c:      00 00 00 00     add\.p gr0,gr0,gr0
+    4520:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4520: R_FRV_FUNCDESC_VALUE      \.text
+    4524:      00 00 00 00     add\.p gr0,gr0,gr0
+    4528:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4528: R_FRV_FUNCDESC_VALUE      \.text
+    452c:      00 00 00 00     add\.p gr0,gr0,gr0
+    4530:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4530: R_FRV_FUNCDESC_VALUE      \.text
+    4534:      00 00 00 00     add\.p gr0,gr0,gr0
 
-00010538 <_GLOBAL_OFFSET_TABLE_>:
+00004538 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   10544:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10544: R_FRV_32 \.text
-   10548:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10548: R_FRV_32 \.got
-   1054c:      00 00 00 28     add\.p gr0,gr40,gr0
-                       1054c: R_FRV_32 \.got
-   10550:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10550: R_FRV_32 \.text
-   10554:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10554: R_FRV_32 \.text
-   10558:      00 00 00 18     add\.p gr0,gr24,gr0
-                       10558: R_FRV_32 \.got
-   1055c:      00 00 00 04     add\.p gr0,gr4,gr0
-                       1055c: R_FRV_32 \.data
+    4544:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4544: R_FRV_32  \.text
+    4548:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4548: R_FRV_32  \.got
+    454c:      00 00 00 28     add\.p gr0,gr40,gr0
+                       454c: R_FRV_32  \.got
+    4550:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4550: R_FRV_32  \.text
+    4554:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4554: R_FRV_32  \.text
+    4558:      00 00 00 18     add\.p gr0,gr24,gr0
+                       4558: R_FRV_32  \.got
+    455c:      00 00 00 04     add\.p gr0,gr4,gr0
+                       455c: R_FRV_32  \.data
index a441832..8c1098f 100644 (file)
@@ -32,40 +32,41 @@ Disassembly of section \.text:
  64c:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010654 <D4>:
-   10654:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10654: R_FRV_32 \.data
+00004654 <D4>:
+    4654:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4654: R_FRV_32  \.data
 
-00010658 <PD0>:
-   10658:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10658: R_FRV_FUNCDESC   PFb
-   1065c:      00 00 00 04     add\.p gr0,gr4,gr0
-                       1065c: R_FRV_32 \.text
+00004658 <PD0>:
+    4658:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4658: R_FRV_FUNCDESC    \.text
+    465c:      00 00 00 04     add\.p gr0,gr4,gr0
+                       465c: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000106d8 <_GLOBAL_OFFSET_TABLE_-0x18>:
-   106d8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106d8: R_FRV_FUNCDESC_VALUE     \.text
-   106dc:      00 00 00 00     add\.p gr0,gr0,gr0
-   106e0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106e0: R_FRV_FUNCDESC_VALUE     \.text
-   106e4:      00 00 00 00     add\.p gr0,gr0,gr0
-   106e8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       106e8: R_FRV_FUNCDESC_VALUE     \.text
-   106ec:      00 00 00 00     add\.p gr0,gr0,gr0
+000046d8 <_GLOBAL_OFFSET_TABLE_-0x18>:
+    46d8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46d8: R_FRV_FUNCDESC_VALUE      \.text
+    46dc:      00 00 00 00     add\.p gr0,gr0,gr0
+    46e0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46e0: R_FRV_FUNCDESC_VALUE      \.text
+    46e4:      00 00 00 00     add\.p gr0,gr0,gr0
+    46e8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46e8: R_FRV_FUNCDESC_VALUE      \.text
+    46ec:      00 00 00 00     add\.p gr0,gr0,gr0
 
-000106f0 <_GLOBAL_OFFSET_TABLE_>:
+000046f0 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-                       106fc: R_FRV_FUNCDESC   PF4
-   10700:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10700: R_FRV_32 \.text
-   10704:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10704: R_FRV_32 \.data
-   10708:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10708: R_FRV_FUNCDESC   PF6
-   1070c:      00 00 00 04     add\.p gr0,gr4,gr0
-                       1070c: R_FRV_32 \.text
-   10710:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10710: R_FRV_32 \.text
-   10714:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10714: R_FRV_FUNCDESC   PF5
+    46fc:      00 00 00 04     add\.p gr0,gr4,gr0
+                       46fc: R_FRV_FUNCDESC    \.text
+    4700:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4700: R_FRV_32  \.text
+    4704:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4704: R_FRV_32  \.data
+    4708:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4708: R_FRV_FUNCDESC    \.text
+    470c:      00 00 00 04     add\.p gr0,gr4,gr0
+                       470c: R_FRV_32  \.text
+    4710:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4710: R_FRV_32  \.text
+    4714:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4714: R_FRV_FUNCDESC    \.text
index d0767f6..9fcc933 100644 (file)
@@ -40,44 +40,44 @@ Disassembly of section \.text:
  5fc:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010604 <D5>:
-   10604:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10604: R_FRV_32 UD0
-   10608:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10608: R_FRV_FUNCDESC   UFb
-   1060c:      00 00 00 00     add\.p gr0,gr0,gr0
-                       1060c: R_FRV_32 UFb
+00004604 <D5>:
+    4604:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4604: R_FRV_32  UD0
+    4608:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4608: R_FRV_FUNCDESC    UFb
+    460c:      00 00 00 00     add\.p gr0,gr0,gr0
+                       460c: R_FRV_32  UFb
 Disassembly of section \.got:
 
-000106a0 <_GLOBAL_OFFSET_TABLE_-0x20>:
-   106a0:      00 00 05 b4     subx\.p gr0,gr52,gr0,icc1
-                       106a0: R_FRV_FUNCDESC_VALUE     UF9
-   106a4:      00 00 00 00     add\.p gr0,gr0,gr0
-   106a8:      00 00 05 9c     subx\.p gr0,gr28,gr0,icc1
-                       106a8: R_FRV_FUNCDESC_VALUE     UF8
-   106ac:      00 00 00 00     add\.p gr0,gr0,gr0
-   106b0:      00 00 05 ac     subx\.p gr0,gr44,gr0,icc1
-                       106b0: R_FRV_FUNCDESC_VALUE     UF0
-   106b4:      00 00 00 00     add\.p gr0,gr0,gr0
-   106b8:      00 00 05 a4     subx\.p gr0,gr36,gr0,icc1
-                       106b8: R_FRV_FUNCDESC_VALUE     UF7
-   106bc:      00 00 00 00     add\.p gr0,gr0,gr0
+000046a0 <_GLOBAL_OFFSET_TABLE_-0x20>:
+    46a0:      00 00 05 b4     subx\.p gr0,gr52,gr0,icc1
+                       46a0: R_FRV_FUNCDESC_VALUE      UF9
+    46a4:      00 00 00 00     add\.p gr0,gr0,gr0
+    46a8:      00 00 05 9c     subx\.p gr0,gr28,gr0,icc1
+                       46a8: R_FRV_FUNCDESC_VALUE      UF8
+    46ac:      00 00 00 00     add\.p gr0,gr0,gr0
+    46b0:      00 00 05 ac     subx\.p gr0,gr44,gr0,icc1
+                       46b0: R_FRV_FUNCDESC_VALUE      UF0
+    46b4:      00 00 00 00     add\.p gr0,gr0,gr0
+    46b8:      00 00 05 a4     subx\.p gr0,gr36,gr0,icc1
+                       46b8: R_FRV_FUNCDESC_VALUE      UF7
+    46bc:      00 00 00 00     add\.p gr0,gr0,gr0
 
-000106c0 <_GLOBAL_OFFSET_TABLE_>:
-   106c0:      00 00 00 00     add\.p gr0,gr0,gr0
-   106c4:      00 00 00 00     add\.p gr0,gr0,gr0
-   106c8:      00 00 00 00     add\.p gr0,gr0,gr0
-   106cc:      00 00 00 00     add\.p gr0,gr0,gr0
-                       106cc: R_FRV_32 UF1
-   106d0:      00 00 00 00     add\.p gr0,gr0,gr0
-                       106d0: R_FRV_FUNCDESC   UF4
-   106d4:      00 00 00 00     add\.p gr0,gr0,gr0
-                       106d4: R_FRV_32 UD1
-   106d8:      00 00 00 00     add\.p gr0,gr0,gr0
-                       106d8: R_FRV_FUNCDESC   UF6
-   106dc:      00 00 00 00     add\.p gr0,gr0,gr0
-                       106dc: R_FRV_FUNCDESC   UF5
-   106e0:      00 00 00 00     add\.p gr0,gr0,gr0
-                       106e0: R_FRV_32 UF3
-   106e4:      00 00 00 00     add\.p gr0,gr0,gr0
-                       106e4: R_FRV_32 UF2
+000046c0 <_GLOBAL_OFFSET_TABLE_>:
+    46c0:      00 00 00 00     add\.p gr0,gr0,gr0
+    46c4:      00 00 00 00     add\.p gr0,gr0,gr0
+    46c8:      00 00 00 00     add\.p gr0,gr0,gr0
+    46cc:      00 00 00 00     add\.p gr0,gr0,gr0
+                       46cc: R_FRV_32  UF1
+    46d0:      00 00 00 00     add\.p gr0,gr0,gr0
+                       46d0: R_FRV_FUNCDESC    UF4
+    46d4:      00 00 00 00     add\.p gr0,gr0,gr0
+                       46d4: R_FRV_32  UD1
+    46d8:      00 00 00 00     add\.p gr0,gr0,gr0
+                       46d8: R_FRV_FUNCDESC    UF6
+    46dc:      00 00 00 00     add\.p gr0,gr0,gr0
+                       46dc: R_FRV_FUNCDESC    UF5
+    46e0:      00 00 00 00     add\.p gr0,gr0,gr0
+                       46e0: R_FRV_32  UF3
+    46e4:      00 00 00 00     add\.p gr0,gr0,gr0
+                       46e4: R_FRV_32  UF2
index 492fe1c..8b5168c 100644 (file)
@@ -1,6 +1,74 @@
-#name: FRV uClinux PIC relocs to undefined symbols, shared linking
+#name: FRV uClinux PIC relocs to weak undefined symbols, shared linking
 #source: fdpic6.s
 #objdump: -DR -j .text -j .data -j .got -j .plt
 #as: -mfdpic
-#ld: -shared
-#error: different segments
+#ld: -shared --defsym WD1=D6 --version-script fdpic6.ldv
+
+.*:     file format elf.*frv.*
+
+Disassembly of section \.plt:
+
+0000041c <\.plt>:
+ 41c:  00 00 00 08     add\.p gr0,gr8,gr0
+ 420:  c0 1a 00 06     bra 438 <F6-0x10>
+ 424:  00 00 00 00     add\.p gr0,gr0,gr0
+ 428:  c0 1a 00 04     bra 438 <F6-0x10>
+ 42c:  00 00 00 10     add\.p gr0,gr16,gr0
+ 430:  c0 1a 00 02     bra 438 <F6-0x10>
+ 434:  00 00 00 18     add\.p gr0,gr24,gr0
+ 438:  88 08 f1 40     ldd @\(gr15,gr0\),gr4
+ 43c:  80 30 40 00     jmpl @\(gr4,gr0\)
+ 440:  9c cc ff f0     lddi @\(gr15,-16\),gr14
+ 444:  80 30 e0 00     jmpl @\(gr14,gr0\)
+Disassembly of section \.text:
+
+00000448 <F6>:
+ 448:  fe 3f ff fe     call 440 <F6-0x8>
+ 44c:  80 40 f0 0c     addi gr15,12,gr0
+ 450:  80 fc 00 24     setlos 0x24,gr0
+ 454:  80 f4 00 20     setlo 0x20,gr0
+ 458:  80 f8 00 00     sethi hi\(0x0\),gr0
+ 45c:  80 40 f0 10     addi gr15,16,gr0
+ 460:  80 fc 00 18     setlos 0x18,gr0
+ 464:  80 f4 00 1c     setlo 0x1c,gr0
+ 468:  80 f8 00 00     sethi hi\(0x0\),gr0
+ 46c:  80 40 ff f8     addi gr15,-8,gr0
+ 470:  80 fc ff e8     setlos 0xffffffe8,gr0
+ 474:  80 f4 ff e0     setlo 0xffe0,gr0
+ 478:  80 f8 ff ff     sethi 0xffff,gr0
+ 47c:  80 f4 ff 40     setlo 0xff40,gr0
+ 480:  80 f8 ff ff     sethi 0xffff,gr0
+ 484:  80 f4 00 14     setlo 0x14,gr0
+ 488:  80 f8 00 00     sethi hi\(0x0\),gr0
+Disassembly of section \.data:
+
+00004490 <D6>:
+       \.\.\.
+                       4490: R_FRV_32  WD0
+                       4494: R_FRV_FUNCDESC    WFb
+                       4498: R_FRV_32  WFb
+Disassembly of section \.got:
+
+00004530 <_GLOBAL_OFFSET_TABLE_-0x20>:
+    4530:      00 00 04 38     \*unknown\*
+                       4530: R_FRV_FUNCDESC_VALUE      WF9
+    4534:      00 00 00 00     add\.p gr0,gr0,gr0
+    4538:      00 00 04 30     \*unknown\*
+                       4538: R_FRV_FUNCDESC_VALUE      WF8
+    453c:      00 00 00 00     add\.p gr0,gr0,gr0
+    4540:      00 00 04 28     \*unknown\*
+                       4540: R_FRV_FUNCDESC_VALUE      WF0
+    4544:      00 00 00 00     add\.p gr0,gr0,gr0
+    4548:      00 00 04 20     \*unknown\*
+                       4548: R_FRV_FUNCDESC_VALUE      WF7
+    454c:      00 00 00 00     add\.p gr0,gr0,gr0
+
+00004550 <_GLOBAL_OFFSET_TABLE_>:
+       \.\.\.
+                       455c: R_FRV_32  WF1
+                       4560: R_FRV_FUNCDESC    WF4
+                       4564: R_FRV_32  WD2
+                       4568: R_FRV_FUNCDESC    WF5
+                       456c: R_FRV_FUNCDESC    WF6
+                       4570: R_FRV_32  WF3
+                       4574: R_FRV_32  WF2
index 2b95623..80c26d3 100644 (file)
@@ -32,27 +32,27 @@ Disassembly of section \.text:
  424:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-0001042c <D7>:
-   1042c:      00 00 00 08     add\.p gr0,gr8,gr0
-                       1042c: R_FRV_32 \.data
-
-00010430 <\.D0>:
-   10430:      00 00 00 00     add\.p gr0,gr0,gr0
-                       10430: R_FRV_32 \.got
-   10434:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10434: R_FRV_32 \.text
+0000442c <D7>:
+    442c:      00 00 00 08     add\.p gr0,gr8,gr0
+                       442c: R_FRV_32  \.data
+
+00004430 <\.D0>:
+    4430:      00 00 00 00     add\.p gr0,gr0,gr0
+                       4430: R_FRV_32  \.got
+    4434:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4434: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000104b0 <_GLOBAL_OFFSET_TABLE_-0x8>:
-   104b0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       104b0: R_FRV_FUNCDESC_VALUE     \.text
-   104b4:      00 00 00 00     add\.p gr0,gr0,gr0
+000044b0 <_GLOBAL_OFFSET_TABLE_-0x8>:
+    44b0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       44b0: R_FRV_FUNCDESC_VALUE      \.text
+    44b4:      00 00 00 00     add\.p gr0,gr0,gr0
 
-000104b8 <_GLOBAL_OFFSET_TABLE_>:
+000044b8 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   104c4:      00 00 00 08     add\.p gr0,gr8,gr0
-                       104c4: R_FRV_32 \.text
-   104c8:      00 00 00 00     add\.p gr0,gr0,gr0
-                       104c8: R_FRV_32 \.got
-   104cc:      00 00 00 08     add\.p gr0,gr8,gr0
-                       104cc: R_FRV_32 \.data
+    44c4:      00 00 00 08     add\.p gr0,gr8,gr0
+                       44c4: R_FRV_32  \.text
+    44c8:      00 00 00 00     add\.p gr0,gr0,gr0
+                       44c8: R_FRV_32  \.got
+    44cc:      00 00 00 08     add\.p gr0,gr8,gr0
+                       44cc: R_FRV_32  \.data
index fdeea73..26a5925 100644 (file)
@@ -32,53 +32,53 @@ Disassembly of section \.text:
  51c:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010524 <D8>:
-   10524:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10524: R_FRV_32 GD0
+00004524 <D8>:
+    4524:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4524: R_FRV_32  GD0
 
-00010528 <GD0>:
-   10528:      00 00 00 10     add\.p gr0,gr16,gr0
-                       10528: R_FRV_32 \.got
-   1052c:      00 00 00 08     add\.p gr0,gr8,gr0
-                       1052c: R_FRV_32 \.text
+00004528 <GD0>:
+    4528:      00 00 00 10     add\.p gr0,gr16,gr0
+                       4528: R_FRV_32  \.got
+    452c:      00 00 00 08     add\.p gr0,gr8,gr0
+                       452c: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000105a8 <_GLOBAL_OFFSET_TABLE_-0x38>:
-   105a8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105a8: R_FRV_FUNCDESC_VALUE     \.text
-   105ac:      00 00 00 00     add\.p gr0,gr0,gr0
-   105b0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105b0: R_FRV_FUNCDESC_VALUE     \.text
-   105b4:      00 00 00 00     add\.p gr0,gr0,gr0
-   105b8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105b8: R_FRV_FUNCDESC_VALUE     \.text
-   105bc:      00 00 00 00     add\.p gr0,gr0,gr0
-   105c0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105c0: R_FRV_FUNCDESC_VALUE     \.text
-   105c4:      00 00 00 00     add\.p gr0,gr0,gr0
-   105c8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105c8: R_FRV_FUNCDESC_VALUE     \.text
-   105cc:      00 00 00 00     add\.p gr0,gr0,gr0
-   105d0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105d0: R_FRV_FUNCDESC_VALUE     \.text
-   105d4:      00 00 00 00     add\.p gr0,gr0,gr0
-   105d8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105d8: R_FRV_FUNCDESC_VALUE     \.text
-   105dc:      00 00 00 00     add\.p gr0,gr0,gr0
+000045a8 <_GLOBAL_OFFSET_TABLE_-0x38>:
+    45a8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45a8: R_FRV_FUNCDESC_VALUE      \.text
+    45ac:      00 00 00 00     add\.p gr0,gr0,gr0
+    45b0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45b0: R_FRV_FUNCDESC_VALUE      \.text
+    45b4:      00 00 00 00     add\.p gr0,gr0,gr0
+    45b8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45b8: R_FRV_FUNCDESC_VALUE      \.text
+    45bc:      00 00 00 00     add\.p gr0,gr0,gr0
+    45c0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45c0: R_FRV_FUNCDESC_VALUE      \.text
+    45c4:      00 00 00 00     add\.p gr0,gr0,gr0
+    45c8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45c8: R_FRV_FUNCDESC_VALUE      \.text
+    45cc:      00 00 00 00     add\.p gr0,gr0,gr0
+    45d0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45d0: R_FRV_FUNCDESC_VALUE      \.text
+    45d4:      00 00 00 00     add\.p gr0,gr0,gr0
+    45d8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45d8: R_FRV_FUNCDESC_VALUE      \.text
+    45dc:      00 00 00 00     add\.p gr0,gr0,gr0
 
-000105e0 <_GLOBAL_OFFSET_TABLE_>:
+000045e0 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   105ec:      00 00 00 08     add\.p gr0,gr8,gr0
-                       105ec: R_FRV_32 \.got
-   105f0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       105f0: R_FRV_32 GF1
-   105f4:      00 00 00 04     add\.p gr0,gr4,gr0
-                       105f4: R_FRV_32 GF2
-   105f8:      00 00 00 20     add\.p gr0,gr32,gr0
-                       105f8: R_FRV_32 \.got
-   105fc:      00 00 00 18     add\.p gr0,gr24,gr0
-                       105fc: R_FRV_32 \.got
-   10600:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10600: R_FRV_32 GD4
-   10604:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10604: R_FRV_32 GF3
+    45ec:      00 00 00 08     add\.p gr0,gr8,gr0
+                       45ec: R_FRV_32  \.got
+    45f0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       45f0: R_FRV_32  GF1
+    45f4:      00 00 00 04     add\.p gr0,gr4,gr0
+                       45f4: R_FRV_32  GF2
+    45f8:      00 00 00 20     add\.p gr0,gr32,gr0
+                       45f8: R_FRV_32  \.got
+    45fc:      00 00 00 18     add\.p gr0,gr24,gr0
+                       45fc: R_FRV_32  \.got
+    4600:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4600: R_FRV_32  GD4
+    4604:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4604: R_FRV_32  GF3
index 6f7b205..a857a2f 100644 (file)
@@ -32,53 +32,53 @@ Disassembly of section \.text:
  348:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010350 <D2>:
-   10350:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10350: R_FRV_32 \.data
+00004350 <D2>:
+    4350:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4350: R_FRV_32  \.data
 
-00010354 <GD0>:
-   10354:      00 00 00 18     add\.p gr0,gr24,gr0
-                       10354: R_FRV_32 \.got
-   10358:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10358: R_FRV_32 \.text
+00004354 <GD0>:
+    4354:      00 00 00 18     add\.p gr0,gr24,gr0
+                       4354: R_FRV_32  \.got
+    4358:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4358: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000103d8 <_GLOBAL_OFFSET_TABLE_-0x38>:
-   103d8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       103d8: R_FRV_FUNCDESC_VALUE     \.text
-   103dc:      00 00 00 00     add\.p gr0,gr0,gr0
-   103e0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       103e0: R_FRV_FUNCDESC_VALUE     \.text
-   103e4:      00 00 00 00     add\.p gr0,gr0,gr0
-   103e8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       103e8: R_FRV_FUNCDESC_VALUE     \.text
-   103ec:      00 00 00 00     add\.p gr0,gr0,gr0
-   103f0:      00 00 00 04     add\.p gr0,gr4,gr0
-                       103f0: R_FRV_FUNCDESC_VALUE     \.text
-   103f4:      00 00 00 00     add\.p gr0,gr0,gr0
-   103f8:      00 00 00 04     add\.p gr0,gr4,gr0
-                       103f8: R_FRV_FUNCDESC_VALUE     \.text
-   103fc:      00 00 00 00     add\.p gr0,gr0,gr0
-   10400:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10400: R_FRV_FUNCDESC_VALUE     \.text
-   10404:      00 00 00 00     add\.p gr0,gr0,gr0
-   10408:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10408: R_FRV_FUNCDESC_VALUE     \.text
-   1040c:      00 00 00 00     add\.p gr0,gr0,gr0
+000043d8 <_GLOBAL_OFFSET_TABLE_-0x38>:
+    43d8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       43d8: R_FRV_FUNCDESC_VALUE      \.text
+    43dc:      00 00 00 00     add\.p gr0,gr0,gr0
+    43e0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       43e0: R_FRV_FUNCDESC_VALUE      \.text
+    43e4:      00 00 00 00     add\.p gr0,gr0,gr0
+    43e8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       43e8: R_FRV_FUNCDESC_VALUE      \.text
+    43ec:      00 00 00 00     add\.p gr0,gr0,gr0
+    43f0:      00 00 00 04     add\.p gr0,gr4,gr0
+                       43f0: R_FRV_FUNCDESC_VALUE      \.text
+    43f4:      00 00 00 00     add\.p gr0,gr0,gr0
+    43f8:      00 00 00 04     add\.p gr0,gr4,gr0
+                       43f8: R_FRV_FUNCDESC_VALUE      \.text
+    43fc:      00 00 00 00     add\.p gr0,gr0,gr0
+    4400:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4400: R_FRV_FUNCDESC_VALUE      \.text
+    4404:      00 00 00 00     add\.p gr0,gr0,gr0
+    4408:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4408: R_FRV_FUNCDESC_VALUE      \.text
+    440c:      00 00 00 00     add\.p gr0,gr0,gr0
 
-00010410 <_GLOBAL_OFFSET_TABLE_>:
+00004410 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   1041c:      00 00 00 10     add\.p gr0,gr16,gr0
-                       1041c: R_FRV_32 \.got
-   10420:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10420: R_FRV_32 \.text
-   10424:      00 00 00 28     add\.p gr0,gr40,gr0
-                       10424: R_FRV_32 \.got
-   10428:      00 00 00 20     add\.p gr0,gr32,gr0
-                       10428: R_FRV_32 \.got
-   1042c:      00 00 00 04     add\.p gr0,gr4,gr0
-                       1042c: R_FRV_32 \.data
-   10430:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10430: R_FRV_32 \.text
-   10434:      00 00 00 04     add\.p gr0,gr4,gr0
-                       10434: R_FRV_32 \.text
+    441c:      00 00 00 10     add\.p gr0,gr16,gr0
+                       441c: R_FRV_32  \.got
+    4420:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4420: R_FRV_32  \.text
+    4424:      00 00 00 28     add\.p gr0,gr40,gr0
+                       4424: R_FRV_32  \.got
+    4428:      00 00 00 20     add\.p gr0,gr32,gr0
+                       4428: R_FRV_32  \.got
+    442c:      00 00 00 04     add\.p gr0,gr4,gr0
+                       442c: R_FRV_32  \.data
+    4430:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4430: R_FRV_32  \.text
+    4434:      00 00 00 04     add\.p gr0,gr4,gr0
+                       4434: R_FRV_32  \.text
index 7b12051..8b179e3 100644 (file)
@@ -32,53 +32,53 @@ Disassembly of section \.text:
  348:  80 f8 00 00     sethi hi\(0x0\),gr0
 Disassembly of section \.data:
 
-00010350 <D8>:
-   10350:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10350: R_FRV_32 \.data
+00004350 <D8>:
+    4350:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4350: R_FRV_32  \.data
 
-00010354 <GD0>:
-   10354:      00 00 00 10     add\.p gr0,gr16,gr0
-                       10354: R_FRV_32 \.got
-   10358:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10358: R_FRV_32 \.text
+00004354 <GD0>:
+    4354:      00 00 00 10     add\.p gr0,gr16,gr0
+                       4354: R_FRV_32  \.got
+    4358:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4358: R_FRV_32  \.text
 Disassembly of section \.got:
 
-000103d8 <_GLOBAL_OFFSET_TABLE_-0x38>:
-   103d8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       103d8: R_FRV_FUNCDESC_VALUE     \.text
-   103dc:      00 00 00 00     add\.p gr0,gr0,gr0
-   103e0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       103e0: R_FRV_FUNCDESC_VALUE     \.text
-   103e4:      00 00 00 00     add\.p gr0,gr0,gr0
-   103e8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       103e8: R_FRV_FUNCDESC_VALUE     \.text
-   103ec:      00 00 00 00     add\.p gr0,gr0,gr0
-   103f0:      00 00 00 08     add\.p gr0,gr8,gr0
-                       103f0: R_FRV_FUNCDESC_VALUE     \.text
-   103f4:      00 00 00 00     add\.p gr0,gr0,gr0
-   103f8:      00 00 00 08     add\.p gr0,gr8,gr0
-                       103f8: R_FRV_FUNCDESC_VALUE     \.text
-   103fc:      00 00 00 00     add\.p gr0,gr0,gr0
-   10400:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10400: R_FRV_FUNCDESC_VALUE     \.text
-   10404:      00 00 00 00     add\.p gr0,gr0,gr0
-   10408:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10408: R_FRV_FUNCDESC_VALUE     \.text
-   1040c:      00 00 00 00     add\.p gr0,gr0,gr0
+000043d8 <_GLOBAL_OFFSET_TABLE_-0x38>:
+    43d8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       43d8: R_FRV_FUNCDESC_VALUE      \.text
+    43dc:      00 00 00 00     add\.p gr0,gr0,gr0
+    43e0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       43e0: R_FRV_FUNCDESC_VALUE      \.text
+    43e4:      00 00 00 00     add\.p gr0,gr0,gr0
+    43e8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       43e8: R_FRV_FUNCDESC_VALUE      \.text
+    43ec:      00 00 00 00     add\.p gr0,gr0,gr0
+    43f0:      00 00 00 08     add\.p gr0,gr8,gr0
+                       43f0: R_FRV_FUNCDESC_VALUE      \.text
+    43f4:      00 00 00 00     add\.p gr0,gr0,gr0
+    43f8:      00 00 00 08     add\.p gr0,gr8,gr0
+                       43f8: R_FRV_FUNCDESC_VALUE      \.text
+    43fc:      00 00 00 00     add\.p gr0,gr0,gr0
+    4400:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4400: R_FRV_FUNCDESC_VALUE      \.text
+    4404:      00 00 00 00     add\.p gr0,gr0,gr0
+    4408:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4408: R_FRV_FUNCDESC_VALUE      \.text
+    440c:      00 00 00 00     add\.p gr0,gr0,gr0
 
-00010410 <_GLOBAL_OFFSET_TABLE_>:
+00004410 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   1041c:      00 00 00 08     add\.p gr0,gr8,gr0
-                       1041c: R_FRV_32 \.got
-   10420:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10420: R_FRV_32 \.text
-   10424:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10424: R_FRV_32 \.text
-   10428:      00 00 00 20     add\.p gr0,gr32,gr0
-                       10428: R_FRV_32 \.got
-   1042c:      00 00 00 18     add\.p gr0,gr24,gr0
-                       1042c: R_FRV_32 \.got
-   10430:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10430: R_FRV_32 \.data
-   10434:      00 00 00 08     add\.p gr0,gr8,gr0
-                       10434: R_FRV_32 \.text
+    441c:      00 00 00 08     add\.p gr0,gr8,gr0
+                       441c: R_FRV_32  \.got
+    4420:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4420: R_FRV_32  \.text
+    4424:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4424: R_FRV_32  \.text
+    4428:      00 00 00 20     add\.p gr0,gr32,gr0
+                       4428: R_FRV_32  \.got
+    442c:      00 00 00 18     add\.p gr0,gr24,gr0
+                       442c: R_FRV_32  \.got
+    4430:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4430: R_FRV_32  \.data
+    4434:      00 00 00 08     add\.p gr0,gr8,gr0
+                       4434: R_FRV_32  \.text
index 246e24e..dd3a498 100644 (file)
@@ -33,31 +33,31 @@ Disassembly of section \.text:
 Disassembly of section \.rofixup:
 
 000100e0 <__ROFIXUP_LIST__>:
-   100e0:      00 02 01 24     sub\.p gr32,gr36,gr0
-   100e4:      00 02 01 28     sub\.p gr32,gr40,gr0
-   100e8:      00 02 01 10     sub\.p gr32,gr16,gr0
-   100ec:      00 02 01 14     sub\.p gr32,gr20,gr0
-   100f0:      00 02 01 2c     sub\.p gr32,gr44,gr0
-   100f4:      00 02 01 04     sub\.p gr32,gr4,gr0
-   100f8:      00 02 01 08     sub\.p gr32,gr8,gr0
-   100fc:      00 02 01 0c     sub\.p gr32,gr12,gr0
-   10100:      00 02 01 18     sub\.p gr32,gr24,gr0
+   100e0:      00 01 41 24     sub\.p gr20,gr36,gr0
+   100e4:      00 01 41 28     sub\.p gr20,gr40,gr0
+   100e8:      00 01 41 10     sub\.p gr20,gr16,gr0
+   100ec:      00 01 41 14     sub\.p gr20,gr20,gr0
+   100f0:      00 01 41 2c     sub\.p gr20,gr44,gr0
+   100f4:      00 01 41 04     sub\.p gr20,gr4,gr0
+   100f8:      00 01 41 08     sub\.p gr20,gr8,gr0
+   100fc:      00 01 41 0c     sub\.p gr20,gr12,gr0
+   10100:      00 01 41 18     sub\.p gr20,gr24,gr0
 Disassembly of section \.data:
 
-00020104 <D1>:
-   20104:      00 02 01 08     sub\.p gr32,gr8,gr0
+00014104 <D1>:
+   14104:      00 01 41 08     sub\.p gr20,gr8,gr0
 
-00020108 <\.D0>:
-   20108:      00 02 01 10     sub\.p gr32,gr16,gr0
-   2010c:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+00014108 <\.D0>:
+   14108:      00 01 41 10     sub\.p gr20,gr16,gr0
+   1410c:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
 Disassembly of section \.got:
 
-00020110 <_GLOBAL_OFFSET_TABLE_-0x8>:
-   20110:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   20114:      00 02 01 18     sub\.p gr32,gr24,gr0
+00014110 <_GLOBAL_OFFSET_TABLE_-0x8>:
+   14110:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   14114:      00 01 41 18     sub\.p gr20,gr24,gr0
 
-00020118 <_GLOBAL_OFFSET_TABLE_>:
+00014118 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   20124:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   20128:      00 02 01 10     sub\.p gr32,gr16,gr0
-   2012c:      00 02 01 08     sub\.p gr32,gr8,gr0
+   14124:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   14128:      00 01 41 10     sub\.p gr20,gr16,gr0
+   1412c:      00 01 41 08     sub\.p gr20,gr8,gr0
index 1c6b371..26003b3 100644 (file)
@@ -33,63 +33,63 @@ Disassembly of section \.text:
 Disassembly of section \.rofixup:
 
 000100e0 <__ROFIXUP_LIST__>:
-   100e0:      00 02 01 98     subx\.p gr32,gr24,gr0,icc0
-   100e4:      00 02 01 ac     subx\.p gr32,gr44,gr0,icc0
-   100e8:      00 02 01 a8     subx\.p gr32,gr40,gr0,icc0
-   100ec:      00 02 01 94     subx\.p gr32,gr20,gr0,icc0
-   100f0:      00 02 01 60     subcc\.p gr32,gr32,gr0,icc0
-   100f4:      00 02 01 64     subcc\.p gr32,gr36,gr0,icc0
-   100f8:      00 02 01 a0     subx\.p gr32,gr32,gr0,icc0
-   100fc:      00 02 01 70     subcc\.p gr32,gr48,gr0,icc0
-   10100:      00 02 01 74     subcc\.p gr32,gr52,gr0,icc0
-   10104:      00 02 01 9c     subx\.p gr32,gr28,gr0,icc0
-   10108:      00 02 01 78     subcc\.p gr32,gr56,gr0,icc0
-   1010c:      00 02 01 7c     subcc\.p gr32,gr60,gr0,icc0
-   10110:      00 02 01 80     subx\.p gr32,gr0,gr0,icc0
-   10114:      00 02 01 84     subx\.p gr32,gr4,gr0,icc0
-   10118:      00 02 01 58     subcc\.p gr32,gr24,gr0,icc0
-   1011c:      00 02 01 5c     subcc\.p gr32,gr28,gr0,icc0
-   10120:      00 02 01 50     subcc\.p gr32,gr16,gr0,icc0
-   10124:      00 02 01 54     subcc\.p gr32,gr20,gr0,icc0
-   10128:      00 02 01 a4     subx\.p gr32,gr36,gr0,icc0
-   1012c:      00 02 01 44     subcc\.p gr32,gr4,gr0,icc0
-   10130:      00 02 01 68     subcc\.p gr32,gr40,gr0,icc0
-   10134:      00 02 01 6c     subcc\.p gr32,gr44,gr0,icc0
-   10138:      00 02 01 48     subcc\.p gr32,gr8,gr0,icc0
-   1013c:      00 02 01 4c     subcc\.p gr32,gr12,gr0,icc0
-   10140:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
+   100e0:      00 01 41 98     subx\.p gr20,gr24,gr0,icc0
+   100e4:      00 01 41 ac     subx\.p gr20,gr44,gr0,icc0
+   100e8:      00 01 41 a8     subx\.p gr20,gr40,gr0,icc0
+   100ec:      00 01 41 94     subx\.p gr20,gr20,gr0,icc0
+   100f0:      00 01 41 60     subcc\.p gr20,gr32,gr0,icc0
+   100f4:      00 01 41 64     subcc\.p gr20,gr36,gr0,icc0
+   100f8:      00 01 41 a0     subx\.p gr20,gr32,gr0,icc0
+   100fc:      00 01 41 70     subcc\.p gr20,gr48,gr0,icc0
+   10100:      00 01 41 74     subcc\.p gr20,gr52,gr0,icc0
+   10104:      00 01 41 9c     subx\.p gr20,gr28,gr0,icc0
+   10108:      00 01 41 78     subcc\.p gr20,gr56,gr0,icc0
+   1010c:      00 01 41 7c     subcc\.p gr20,gr60,gr0,icc0
+   10110:      00 01 41 80     subx\.p gr20,gr0,gr0,icc0
+   10114:      00 01 41 84     subx\.p gr20,gr4,gr0,icc0
+   10118:      00 01 41 58     subcc\.p gr20,gr24,gr0,icc0
+   1011c:      00 01 41 5c     subcc\.p gr20,gr28,gr0,icc0
+   10120:      00 01 41 50     subcc\.p gr20,gr16,gr0,icc0
+   10124:      00 01 41 54     subcc\.p gr20,gr20,gr0,icc0
+   10128:      00 01 41 a4     subx\.p gr20,gr36,gr0,icc0
+   1012c:      00 01 41 44     subcc\.p gr20,gr4,gr0,icc0
+   10130:      00 01 41 68     subcc\.p gr20,gr40,gr0,icc0
+   10134:      00 01 41 6c     subcc\.p gr20,gr44,gr0,icc0
+   10138:      00 01 41 48     subcc\.p gr20,gr8,gr0,icc0
+   1013c:      00 01 41 4c     subcc\.p gr20,gr12,gr0,icc0
+   10140:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
 Disassembly of section \.data:
 
-00020144 <D2>:
-   20144:      00 02 01 48     subcc\.p gr32,gr8,gr0,icc0
+00014144 <D2>:
+   14144:      00 01 41 48     subcc\.p gr20,gr8,gr0,icc0
 
-00020148 <GD0>:
-   20148:      00 02 01 68     subcc\.p gr32,gr40,gr0,icc0
-   2014c:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+00014148 <GD0>:
+   14148:      00 01 41 68     subcc\.p gr20,gr40,gr0,icc0
+   1414c:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
 Disassembly of section \.got:
 
-00020150 <_GLOBAL_OFFSET_TABLE_-0x38>:
-   20150:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   20154:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20158:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   2015c:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20160:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   20164:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20168:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   2016c:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20170:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   20174:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20178:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   2017c:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20180:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   20184:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
+00014150 <_GLOBAL_OFFSET_TABLE_-0x38>:
+   14150:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   14154:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14158:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   1415c:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14160:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   14164:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14168:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   1416c:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14170:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   14174:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14178:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   1417c:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14180:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   14184:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
 
-00020188 <_GLOBAL_OFFSET_TABLE_>:
+00014188 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   20194:      00 02 01 60     subcc\.p gr32,gr32,gr0,icc0
-   20198:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   2019c:      00 02 01 78     subcc\.p gr32,gr56,gr0,icc0
-   201a0:      00 02 01 70     subcc\.p gr32,gr48,gr0,icc0
-   201a4:      00 02 01 48     subcc\.p gr32,gr8,gr0,icc0
-   201a8:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
-   201ac:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   14194:      00 01 41 60     subcc\.p gr20,gr32,gr0,icc0
+   14198:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   1419c:      00 01 41 78     subcc\.p gr20,gr56,gr0,icc0
+   141a0:      00 01 41 70     subcc\.p gr20,gr48,gr0,icc0
+   141a4:      00 01 41 48     subcc\.p gr20,gr8,gr0,icc0
+   141a8:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
+   141ac:      00 01 00 98     addx\.p gr16,gr24,gr0,icc0
index 5b59947..54a225b 100644 (file)
@@ -1,4 +1,4 @@
-#name: FRV uClinux PIC relocs to undefined symbols, static linking
+#name: FRV uClinux PIC relocs to weak undefined symbols, static linking
 #source: fdpic6.s
 #objdump: -D
 #as: -mfdpic
index b8eba61..0363a67 100644 (file)
@@ -33,31 +33,31 @@ Disassembly of section \.text:
 Disassembly of section \.rofixup:
 
 000100e0 <__ROFIXUP_LIST__>:
-   100e0:      00 02 01 24     sub\.p gr32,gr36,gr0
-   100e4:      00 02 01 28     sub\.p gr32,gr40,gr0
-   100e8:      00 02 01 10     sub\.p gr32,gr16,gr0
-   100ec:      00 02 01 14     sub\.p gr32,gr20,gr0
-   100f0:      00 02 01 2c     sub\.p gr32,gr44,gr0
-   100f4:      00 02 01 04     sub\.p gr32,gr4,gr0
-   100f8:      00 02 01 08     sub\.p gr32,gr8,gr0
-   100fc:      00 02 01 0c     sub\.p gr32,gr12,gr0
-   10100:      00 02 01 18     sub\.p gr32,gr24,gr0
+   100e0:      00 01 41 24     sub\.p gr20,gr36,gr0
+   100e4:      00 01 41 28     sub\.p gr20,gr40,gr0
+   100e8:      00 01 41 10     sub\.p gr20,gr16,gr0
+   100ec:      00 01 41 14     sub\.p gr20,gr20,gr0
+   100f0:      00 01 41 2c     sub\.p gr20,gr44,gr0
+   100f4:      00 01 41 04     sub\.p gr20,gr4,gr0
+   100f8:      00 01 41 08     sub\.p gr20,gr8,gr0
+   100fc:      00 01 41 0c     sub\.p gr20,gr12,gr0
+   10100:      00 01 41 18     sub\.p gr20,gr24,gr0
 Disassembly of section \.data:
 
-00020104 <D7>:
-   20104:      00 02 01 0c     sub\.p gr32,gr12,gr0
+00014104 <D7>:
+   14104:      00 01 41 0c     sub\.p gr20,gr12,gr0
 
-00020108 <\.D0>:
-   20108:      00 02 01 10     sub\.p gr32,gr16,gr0
-   2010c:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+00014108 <\.D0>:
+   14108:      00 01 41 10     sub\.p gr20,gr16,gr0
+   1410c:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
 Disassembly of section \.got:
 
-00020110 <_GLOBAL_OFFSET_TABLE_-0x8>:
-   20110:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   20114:      00 02 01 18     sub\.p gr32,gr24,gr0
+00014110 <_GLOBAL_OFFSET_TABLE_-0x8>:
+   14110:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   14114:      00 01 41 18     sub\.p gr20,gr24,gr0
 
-00020118 <_GLOBAL_OFFSET_TABLE_>:
+00014118 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   20124:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   20128:      00 02 01 10     sub\.p gr32,gr16,gr0
-   2012c:      00 02 01 0c     sub\.p gr32,gr12,gr0
+   14124:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   14128:      00 01 41 10     sub\.p gr20,gr16,gr0
+   1412c:      00 01 41 0c     sub\.p gr20,gr12,gr0
index cbebb17..804c56e 100644 (file)
@@ -33,63 +33,63 @@ Disassembly of section \.text:
 Disassembly of section \.rofixup:
 
 000100e0 <__ROFIXUP_LIST__>:
-   100e0:      00 02 01 98     subx\.p gr32,gr24,gr0,icc0
-   100e4:      00 02 01 9c     subx\.p gr32,gr28,gr0,icc0
-   100e8:      00 02 01 ac     subx\.p gr32,gr44,gr0,icc0
-   100ec:      00 02 01 94     subx\.p gr32,gr20,gr0,icc0
-   100f0:      00 02 01 58     subcc\.p gr32,gr24,gr0,icc0
-   100f4:      00 02 01 5c     subcc\.p gr32,gr28,gr0,icc0
-   100f8:      00 02 01 a4     subx\.p gr32,gr36,gr0,icc0
-   100fc:      00 02 01 68     subcc\.p gr32,gr40,gr0,icc0
-   10100:      00 02 01 6c     subcc\.p gr32,gr44,gr0,icc0
-   10104:      00 02 01 a0     subx\.p gr32,gr32,gr0,icc0
-   10108:      00 02 01 70     subcc\.p gr32,gr48,gr0,icc0
-   1010c:      00 02 01 74     subcc\.p gr32,gr52,gr0,icc0
-   10110:      00 02 01 80     subx\.p gr32,gr0,gr0,icc0
-   10114:      00 02 01 84     subx\.p gr32,gr4,gr0,icc0
-   10118:      00 02 01 78     subcc\.p gr32,gr56,gr0,icc0
-   1011c:      00 02 01 7c     subcc\.p gr32,gr60,gr0,icc0
-   10120:      00 02 01 50     subcc\.p gr32,gr16,gr0,icc0
-   10124:      00 02 01 54     subcc\.p gr32,gr20,gr0,icc0
-   10128:      00 02 01 a8     subx\.p gr32,gr40,gr0,icc0
-   1012c:      00 02 01 44     subcc\.p gr32,gr4,gr0,icc0
-   10130:      00 02 01 60     subcc\.p gr32,gr32,gr0,icc0
-   10134:      00 02 01 64     subcc\.p gr32,gr36,gr0,icc0
-   10138:      00 02 01 48     subcc\.p gr32,gr8,gr0,icc0
-   1013c:      00 02 01 4c     subcc\.p gr32,gr12,gr0,icc0
-   10140:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
+   100e0:      00 01 41 98     subx\.p gr20,gr24,gr0,icc0
+   100e4:      00 01 41 9c     subx\.p gr20,gr28,gr0,icc0
+   100e8:      00 01 41 ac     subx\.p gr20,gr44,gr0,icc0
+   100ec:      00 01 41 94     subx\.p gr20,gr20,gr0,icc0
+   100f0:      00 01 41 58     subcc\.p gr20,gr24,gr0,icc0
+   100f4:      00 01 41 5c     subcc\.p gr20,gr28,gr0,icc0
+   100f8:      00 01 41 a4     subx\.p gr20,gr36,gr0,icc0
+   100fc:      00 01 41 68     subcc\.p gr20,gr40,gr0,icc0
+   10100:      00 01 41 6c     subcc\.p gr20,gr44,gr0,icc0
+   10104:      00 01 41 a0     subx\.p gr20,gr32,gr0,icc0
+   10108:      00 01 41 70     subcc\.p gr20,gr48,gr0,icc0
+   1010c:      00 01 41 74     subcc\.p gr20,gr52,gr0,icc0
+   10110:      00 01 41 80     subx\.p gr20,gr0,gr0,icc0
+   10114:      00 01 41 84     subx\.p gr20,gr4,gr0,icc0
+   10118:      00 01 41 78     subcc\.p gr20,gr56,gr0,icc0
+   1011c:      00 01 41 7c     subcc\.p gr20,gr60,gr0,icc0
+   10120:      00 01 41 50     subcc\.p gr20,gr16,gr0,icc0
+   10124:      00 01 41 54     subcc\.p gr20,gr20,gr0,icc0
+   10128:      00 01 41 a8     subx\.p gr20,gr40,gr0,icc0
+   1012c:      00 01 41 44     subcc\.p gr20,gr4,gr0,icc0
+   10130:      00 01 41 60     subcc\.p gr20,gr32,gr0,icc0
+   10134:      00 01 41 64     subcc\.p gr20,gr36,gr0,icc0
+   10138:      00 01 41 48     subcc\.p gr20,gr8,gr0,icc0
+   1013c:      00 01 41 4c     subcc\.p gr20,gr12,gr0,icc0
+   10140:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
 Disassembly of section \.data:
 
-00020144 <D8>:
-   20144:      00 02 01 4c     subcc\.p gr32,gr12,gr0,icc0
+00014144 <D8>:
+   14144:      00 01 41 4c     subcc\.p gr20,gr12,gr0,icc0
 
-00020148 <GD0>:
-   20148:      00 02 01 60     subcc\.p gr32,gr32,gr0,icc0
-   2014c:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+00014148 <GD0>:
+   14148:      00 01 41 60     subcc\.p gr20,gr32,gr0,icc0
+   1414c:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
 Disassembly of section \.got:
 
-00020150 <_GLOBAL_OFFSET_TABLE_-0x38>:
-   20150:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   20154:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20158:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   2015c:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20160:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   20164:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20168:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   2016c:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20170:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   20174:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20178:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   2017c:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
-   20180:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   20184:      00 02 01 88     subx\.p gr32,gr8,gr0,icc0
+00014150 <_GLOBAL_OFFSET_TABLE_-0x38>:
+   14150:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   14154:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14158:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   1415c:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14160:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   14164:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14168:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   1416c:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14170:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   14174:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14178:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   1417c:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
+   14180:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   14184:      00 01 41 88     subx\.p gr20,gr8,gr0,icc0
 
-00020188 <_GLOBAL_OFFSET_TABLE_>:
+00014188 <_GLOBAL_OFFSET_TABLE_>:
        \.\.\.
-   20194:      00 02 01 58     subcc\.p gr32,gr24,gr0,icc0
-   20198:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   2019c:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
-   201a0:      00 02 01 70     subcc\.p gr32,gr48,gr0,icc0
-   201a4:      00 02 01 68     subcc\.p gr32,gr40,gr0,icc0
-   201a8:      00 02 01 4c     subcc\.p gr32,gr12,gr0,icc0
-   201ac:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   14194:      00 01 41 58     subcc\.p gr20,gr24,gr0,icc0
+   14198:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   1419c:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
+   141a0:      00 01 41 70     subcc\.p gr20,gr48,gr0,icc0
+   141a4:      00 01 41 68     subcc\.p gr20,gr40,gr0,icc0
+   141a8:      00 01 41 4c     subcc\.p gr20,gr12,gr0,icc0
+   141ac:      00 01 00 9c     addx\.p gr16,gr28,gr0,icc0
index dc06d4e..1367cb0 100644 (file)
@@ -42,7 +42,9 @@ run_dump_test "fdpic-pie-5"
 run_dump_test "fdpic-shared-5"
 
 run_dump_test "fdpic-static-6"
+run_dump_test "fdpic-pie-6-fail"
 run_dump_test "fdpic-pie-6"
+run_dump_test "fdpic-shared-6-fail"
 run_dump_test "fdpic-shared-6"
 
 run_dump_test "fdpic-static-7"
@@ -50,7 +52,6 @@ run_dump_test "fdpic-pie-7"
 run_dump_test "fdpic-shared-7"
 
 run_dump_test "fdpic-static-8"
-run_dump_test "fdpic-pie-8-fail"
 run_dump_test "fdpic-pie-8"
 run_dump_test "fdpic-shared-8-fail"
 run_dump_test "fdpic-shared-8"
index 643e508..a3292f2 100644 (file)
@@ -1,3 +1,28 @@
+2004-04-09  Daniel Jacobowitz  <drow@mvista.com>
+
+       Merge from mainline:
+       2004-03-30  Kazuhiro Inaoka  <inaoka.kazuhiro@renesas.com>
+       * m32r-asm.c: Regenerate.
+
+       2004-03-08  Nick Clifton  <nickc@redhat.com>
+       * po/de.po: Updated German translation.
+
+       2004-02-26  Andrew Stubbs  <andrew.stubbs@superh.com>
+       * sh-opc.h: Move fsca and fsrra instructions from sh4a to sh4.
+       Also correct mistake in the comment.
+
+       2004-02-26  Andrew Stubbs <andrew.stubbs@superh.com>
+       * sh-dis.c (print_insn_sh): Add REG_N_D nibble type to
+       ensure that double registers have even numbers.
+       Add REG_N_B01 for nn01 (binary 01) nibble to ensure
+       that reserved instruction 0xfffd does not decode the same
+       as 0xfdfd (ftrv).
+       * sh-opc.h: Add REG_N_D nibble type and use it whereever
+       REG_N refers to a double register.
+       Add REG_N_B01 nibble type and use it instead of REG_NM
+       in ftrv.
+       Adjust the bit patterns in a few comments.
+
 2004-04-08  Alan Modra  <amodra@bigpond.net.au>
 
        Apply from mainline.
index 8c2cc81..87c33f0 100644 (file)
@@ -4,7 +4,7 @@
 THIS FILE IS MACHINE GENERATED WITH CGEN.
 - the resultant file is machine generated, cgen-asm.in isn't
 
-Copyright 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
 
 This file is part of the GNU Binutils and GDB, the GNU debugger.
 
@@ -111,7 +111,10 @@ parse_hi16 (cd, strp, opindex, valuep)
       ++*strp;
       if (errmsg == NULL
          && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
-       value = (value >> 16) + (value & 0x8000 ? 1 : 0);
+        {
+          value = value + (value & 0x8000 ? 0x10000 : 0);
+          value >>= 16;
+        }
       *valuep = value;
       return errmsg;
     }
index 2914776..e802823 100644 (file)
@@ -4,10 +4,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: opcodes 2.12.91\n"
-"POT-Creation-Date: 2002-07-23 15:55-0400\n"
-"PO-Revision-Date: 2002-09-24 07:13+0200\n"
-"Last-Translator: Martin v. Löwis <martin@v.loewis.de>\n"
+"Project-Id-Version: opcodes 2.14rel030712\n"
+"POT-Creation-Date: 2003-07-11 13:56+0930\n"
+"PO-Revision-Date: 2004-02-28 12:30+0100\n"
+"Last-Translator: Roland Illig <roland.illig@gmx.de>\n"
 "Language-Team: German <de@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
@@ -25,56 +25,60 @@ msgstr "Sprunghinweis ist nicht ausgerichtet (unaligned)."
 msgid "Illegal limm reference in last instruction!\n"
 msgstr "Ungültige limm-Referenz in der letzten Anweisung!\n"
 
-#: arm-dis.c:507
+#: arm-dis.c:554
 msgid "<illegal precision>"
-msgstr "<ungültige Präzision>"
+msgstr "<ungültige Genauigkeit>"
 
-#: arm-dis.c:1010
+#: arm-dis.c:1162
 #, c-format
 msgid "Unrecognised register name set: %s\n"
 msgstr "Unbekannte Registernamensmenge: %s\n"
 
-#: arm-dis.c:1017
+#: arm-dis.c:1169
 #, c-format
 msgid "Unrecognised disassembler option: %s\n"
 msgstr "Unbekannte Disassembler-Option: %s\n"
 
-#: arm-dis.c:1191
+#: arm-dis.c:1343
 msgid ""
 "\n"
 "The following ARM specific disassembler options are supported for use with\n"
 "the -M switch:\n"
 msgstr ""
+"\n"
+"Die folgenden ARM-spezifischen Disassembleroptionen werden in Kombination\n"
+"mit dem Schalter Â»-M« unterstützt:\n"
 
-#: avr-dis.c:118 avr-dis.c:128
+#: avr-dis.c:117 avr-dis.c:127
 msgid "undefined"
 msgstr "undefiniert"
 
-#: avr-dis.c:180
+#: avr-dis.c:179
 msgid "Internal disassembler error"
 msgstr "Interner Disassemblerfehler."
 
-#: avr-dis.c:228
+#: avr-dis.c:227
 #, c-format
 msgid "unknown constraint `%c'"
-msgstr ""
+msgstr "Unbekannte Einschränkung Â»%c«"
 
-#: cgen-asm.c:346 fr30-ibld.c:195 frv-ibld.c:195 m32r-ibld.c:195
-#: openrisc-ibld.c:195 xstormy16-ibld.c:195
+#: cgen-asm.c:348 fr30-ibld.c:195 frv-ibld.c:195 ip2k-ibld.c:195
+#: iq2000-ibld.c:195 m32r-ibld.c:195 openrisc-ibld.c:195 xstormy16-ibld.c:195
 #, c-format
 msgid "operand out of range (%ld not between %ld and %ld)"
-msgstr ""
+msgstr "Operand außerhalb des gültigen Bereichs (%ld ist nicht zwischen %ld und %ld)"
 
-#: cgen-asm.c:367
+#: cgen-asm.c:369
 #, c-format
 msgid "operand out of range (%lu not between %lu and %lu)"
-msgstr ""
+msgstr "Operand außerhalb des gültigen Bereichs (%lu ist nicht zwischen %lu und %lu)"
 
 #: d30v-dis.c:312
 #, c-format
 msgid "<unknown register %d>"
 msgstr "<unbekanntes Register %d>"
 
+#  Can't happen.
 #. Can't happen.
 #: dis-buf.c:57
 #, c-format
@@ -84,286 +88,641 @@ msgstr "Unbekannter Fehler %d\n"
 #: dis-buf.c:62
 #, c-format
 msgid "Address 0x%x is out of bounds.\n"
-msgstr ""
+msgstr "Adresse 0x%x ist außerhalb des gültigen Bereichs.\n"
 
-#: fr30-asm.c:323 frv-asm.c:595 m32r-asm.c:325 openrisc-asm.c:244
-#: xstormy16-asm.c:231
+#: fr30-asm.c:323 frv-asm.c:626 ip2k-asm.c:574 iq2000-asm.c:460 m32r-asm.c:325
+#: openrisc-asm.c:261 xstormy16-asm.c:284
 #, c-format
 msgid "Unrecognized field %d while parsing.\n"
-msgstr ""
+msgstr "Unbekanntes Feld %d beim Parsen entdeckt.\n"
 
-#: fr30-asm.c:373 frv-asm.c:645 m32r-asm.c:375 openrisc-asm.c:294
-#: xstormy16-asm.c:281
+#: fr30-asm.c:373 frv-asm.c:676 ip2k-asm.c:624 iq2000-asm.c:510 m32r-asm.c:375
+#: openrisc-asm.c:311 xstormy16-asm.c:334
 msgid "missing mnemonic in syntax string"
-msgstr ""
+msgstr "Fehlender Mnemonic im Syntaxstring"
 
+#  We couldn't parse it.
 #. We couldn't parse it.
-#: fr30-asm.c:509 fr30-asm.c:513 fr30-asm.c:600 fr30-asm.c:702 frv-asm.c:781
-#: frv-asm.c:785 frv-asm.c:872 frv-asm.c:974 m32r-asm.c:511 m32r-asm.c:515
-#: m32r-asm.c:602 m32r-asm.c:704 openrisc-asm.c:430 openrisc-asm.c:434
-#: openrisc-asm.c:521 openrisc-asm.c:623 xstormy16-asm.c:417
-#: xstormy16-asm.c:421 xstormy16-asm.c:508 xstormy16-asm.c:610
+#: fr30-asm.c:509 fr30-asm.c:513 fr30-asm.c:600 fr30-asm.c:702 frv-asm.c:812
+#: frv-asm.c:816 frv-asm.c:903 frv-asm.c:1005 ip2k-asm.c:760 ip2k-asm.c:764
+#: ip2k-asm.c:851 ip2k-asm.c:953 iq2000-asm.c:646 iq2000-asm.c:650
+#: iq2000-asm.c:737 iq2000-asm.c:839 m32r-asm.c:511 m32r-asm.c:515
+#: m32r-asm.c:602 m32r-asm.c:704 openrisc-asm.c:447 openrisc-asm.c:451
+#: openrisc-asm.c:538 openrisc-asm.c:640 xstormy16-asm.c:470
+#: xstormy16-asm.c:474 xstormy16-asm.c:561 xstormy16-asm.c:663
 msgid "unrecognized instruction"
-msgstr ""
+msgstr "Unbekannter Befehl"
 
-#: fr30-asm.c:556 frv-asm.c:828 m32r-asm.c:558 openrisc-asm.c:477
-#: xstormy16-asm.c:464
+#: fr30-asm.c:556 frv-asm.c:859 ip2k-asm.c:807 iq2000-asm.c:693 m32r-asm.c:558
+#: openrisc-asm.c:494 xstormy16-asm.c:517
 #, c-format
 msgid "syntax error (expected char `%c', found `%c')"
 msgstr "Syntaxfehler (erwartetes Zeichen Â»%c«, gefunden Â»%c«)"
 
-#: fr30-asm.c:566 frv-asm.c:838 m32r-asm.c:568 openrisc-asm.c:487
-#: xstormy16-asm.c:474
+#: fr30-asm.c:566 frv-asm.c:869 ip2k-asm.c:817 iq2000-asm.c:703 m32r-asm.c:568
+#: openrisc-asm.c:504 xstormy16-asm.c:527
 #, c-format
 msgid "syntax error (expected char `%c', found end of instruction)"
-msgstr ""
+msgstr "Syntaxfehler (Zeichen Â»%c« erwartet, Befehlsende bekommen)"
 
-#: fr30-asm.c:594 frv-asm.c:866 m32r-asm.c:596 openrisc-asm.c:515
-#: xstormy16-asm.c:502
+#: fr30-asm.c:594 frv-asm.c:897 ip2k-asm.c:845 iq2000-asm.c:731 m32r-asm.c:596
+#: openrisc-asm.c:532 xstormy16-asm.c:555
 msgid "junk at end of line"
-msgstr ""
+msgstr "Müll am Ende der Zeile"
 
-#: fr30-asm.c:701 frv-asm.c:973 m32r-asm.c:703 openrisc-asm.c:622
-#: xstormy16-asm.c:609
+#: fr30-asm.c:701 frv-asm.c:1004 ip2k-asm.c:952 iq2000-asm.c:838
+#: m32r-asm.c:703 openrisc-asm.c:639 xstormy16-asm.c:662
 msgid "unrecognized form of instruction"
-msgstr ""
+msgstr "Unbekannte Befehlsform"
 
-#: fr30-asm.c:713 frv-asm.c:985 m32r-asm.c:715 openrisc-asm.c:634
-#: xstormy16-asm.c:621
+#: fr30-asm.c:713 frv-asm.c:1016 ip2k-asm.c:964 iq2000-asm.c:850
+#: m32r-asm.c:715 openrisc-asm.c:651 xstormy16-asm.c:674
 #, c-format
 msgid "bad instruction `%.50s...'"
-msgstr ""
+msgstr "Falscher Befehl Â»%.50s...«"
 
-#: fr30-asm.c:716 frv-asm.c:988 m32r-asm.c:718 openrisc-asm.c:637
-#: xstormy16-asm.c:624
+#: fr30-asm.c:716 frv-asm.c:1019 ip2k-asm.c:967 iq2000-asm.c:853
+#: m32r-asm.c:718 openrisc-asm.c:654 xstormy16-asm.c:677
 #, c-format
 msgid "bad instruction `%.50s'"
-msgstr ""
+msgstr "Falscher Befehl Â»%.50s«"
 
+#  Default text to print if an instruction isn't recognized.
 #. Default text to print if an instruction isn't recognized.
-#: fr30-dis.c:39 frv-dis.c:39 m32r-dis.c:39 mmix-dis.c:282 openrisc-dis.c:39
-#: xstormy16-dis.c:39
+#: fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41 m32r-dis.c:41
+#: mmix-dis.c:284 openrisc-dis.c:41 xstormy16-dis.c:41
 msgid "*unknown*"
-msgstr ""
+msgstr "*unbekannt*"
 
-#: fr30-dis.c:318 frv-dis.c:360 m32r-dis.c:249 openrisc-dis.c:136
-#: xstormy16-dis.c:169
+#: fr30-dis.c:320 frv-dis.c:371 ip2k-dis.c:329 iq2000-dis.c:192 m32r-dis.c:251
+#: openrisc-dis.c:138 xstormy16-dis.c:171
 #, c-format
 msgid "Unrecognized field %d while printing insn.\n"
-msgstr ""
+msgstr "Unbekanntes Feld %d beim Schreiben des Befehls.\n"
 
-#: fr30-ibld.c:166 frv-ibld.c:166 m32r-ibld.c:166 openrisc-ibld.c:166
-#: xstormy16-ibld.c:166
+#: fr30-ibld.c:166 frv-ibld.c:166 ip2k-ibld.c:166 iq2000-ibld.c:166
+#: m32r-ibld.c:166 openrisc-ibld.c:166 xstormy16-ibld.c:166
 #, c-format
 msgid "operand out of range (%ld not between %ld and %lu)"
-msgstr ""
+msgstr "Operand außerhalb des gültigen Bereichs (%ld ist nicht zwischen %ld und %lu)"
 
-#: fr30-ibld.c:179 frv-ibld.c:179 m32r-ibld.c:179 openrisc-ibld.c:179
-#: xstormy16-ibld.c:179
+#: fr30-ibld.c:179 frv-ibld.c:179 ip2k-ibld.c:179 iq2000-ibld.c:179
+#: m32r-ibld.c:179 openrisc-ibld.c:179 xstormy16-ibld.c:179
 #, c-format
 msgid "operand out of range (%lu not between 0 and %lu)"
-msgstr ""
+msgstr "Operand außerhalb des gültigen Bereichs (%lu ist nicht zwischen 0 und %lu)"
 
-#: fr30-ibld.c:730 frv-ibld.c:820 m32r-ibld.c:659 openrisc-ibld.c:633
-#: xstormy16-ibld.c:678
+#: fr30-ibld.c:730 frv-ibld.c:829 ip2k-ibld.c:607 iq2000-ibld.c:713
+#: m32r-ibld.c:659 openrisc-ibld.c:633 xstormy16-ibld.c:678
 #, c-format
 msgid "Unrecognized field %d while building insn.\n"
-msgstr ""
+msgstr "Unbekanntes Feld %d beim Erzeugen des Befehls.\n"
 
-#: fr30-ibld.c:937 frv-ibld.c:1103 m32r-ibld.c:792 openrisc-ibld.c:735
-#: xstormy16-ibld.c:826
+#: fr30-ibld.c:937 frv-ibld.c:1121 ip2k-ibld.c:684 iq2000-ibld.c:890
+#: m32r-ibld.c:792 openrisc-ibld.c:735 xstormy16-ibld.c:826
 #, c-format
 msgid "Unrecognized field %d while decoding insn.\n"
-msgstr ""
+msgstr "Unbekannted Feld %d beim Decodieren des Befehls.\n"
 
-#: fr30-ibld.c:1086 frv-ibld.c:1348 m32r-ibld.c:902 openrisc-ibld.c:815
-#: xstormy16-ibld.c:939
+#: fr30-ibld.c:1086 frv-ibld.c:1375 ip2k-ibld.c:761 iq2000-ibld.c:1024
+#: m32r-ibld.c:902 openrisc-ibld.c:815 xstormy16-ibld.c:939
 #, c-format
 msgid "Unrecognized field %d while getting int operand.\n"
-msgstr ""
+msgstr "Unbekanntes Feld %d beim Holen des int-Operanden.\n"
 
-#: fr30-ibld.c:1215 frv-ibld.c:1573 m32r-ibld.c:992 openrisc-ibld.c:875
-#: xstormy16-ibld.c:1032
+#: fr30-ibld.c:1215 frv-ibld.c:1609 ip2k-ibld.c:818 iq2000-ibld.c:1138
+#: m32r-ibld.c:992 openrisc-ibld.c:875 xstormy16-ibld.c:1032
 #, c-format
 msgid "Unrecognized field %d while getting vma operand.\n"
-msgstr ""
+msgstr "Unbekanntes Feld %d beim Holen des vma-Operanden.\n"
 
-#: fr30-ibld.c:1349 frv-ibld.c:1807 m32r-ibld.c:1090 openrisc-ibld.c:944
-#: xstormy16-ibld.c:1134
+#: fr30-ibld.c:1349 frv-ibld.c:1852 ip2k-ibld.c:880 iq2000-ibld.c:1261
+#: m32r-ibld.c:1090 openrisc-ibld.c:944 xstormy16-ibld.c:1134
 #, c-format
 msgid "Unrecognized field %d while setting int operand.\n"
-msgstr ""
+msgstr "Unbekanntes Feld %d beim Setzen des int-Operanden.\n"
 
-#: fr30-ibld.c:1471 frv-ibld.c:2029 m32r-ibld.c:1176 openrisc-ibld.c:1001
-#: xstormy16-ibld.c:1224
+#: fr30-ibld.c:1471 frv-ibld.c:2083 ip2k-ibld.c:930 iq2000-ibld.c:1372
+#: m32r-ibld.c:1176 openrisc-ibld.c:1001 xstormy16-ibld.c:1224
 #, c-format
 msgid "Unrecognized field %d while setting vma operand.\n"
-msgstr ""
+msgstr "Unbekanntes Feld %d beim Holen des vma-Operanden.\n"
+
+#: frv-asm.c:365
+msgid "register number must be even"
+msgstr "Die Registernummer muss gerade sein."
 
-#: h8300-dis.c:385
+#: h8300-dis.c:377
 #, c-format
-msgid "Hmmmm %x"
-msgstr ""
+msgid "Hmmmm 0x%x"
+msgstr "Hmmmm 0x%x"
 
-#: h8300-dis.c:396
+#: h8300-dis.c:760
 #, c-format
-msgid "Don't understand %x \n"
-msgstr ""
+msgid "Don't understand 0x%x \n"
+msgstr "Ich verstehe Â»0x%x« nicht.\n"
 
 #: h8500-dis.c:143
 #, c-format
 msgid "can't cope with insert %d\n"
-msgstr ""
+msgstr "Kann nicht mit Â»inserv %d« umgehen.\n"
 
+#  Couldn't understand anything.
 #. Couldn't understand anything.
 #: h8500-dis.c:350
 #, c-format
 msgid "%02x\t\t*unknown*"
-msgstr ""
+msgstr "%02x\t\t*unbekannt*"
 
-#: i386-dis.c:1649
+#: i386-dis.c:1699
 msgid "<internal disassembler error>"
-msgstr ""
+msgstr "<interner Disassemblerfehler>"
+
+#: ia64-gen.c:295
+#, c-format
+msgid "%s: Error: "
+msgstr "%s: Fehler:"
+
+#: ia64-gen.c:308
+#, c-format
+msgid "%s: Warning: "
+msgstr "%s: Warnung:"
+
+#: ia64-gen.c:494 ia64-gen.c:728
+#, c-format
+msgid "multiple note %s not handled\n"
+msgstr "Mehrfache Bemerkung Â»%s« nicht verarbeitet.\n"
+
+#: ia64-gen.c:605
+msgid "can't find ia64-ic.tbl for reading\n"
+msgstr "Kann Â»ia64-ic.tbl« nicht zum Lesen finden\n"
+
+#: ia64-gen.c:810
+#, c-format
+msgid "can't find %s for reading\n"
+msgstr "Kann Â»%s« nicht zum Lesen finden\n"
+
+#: ia64-gen.c:1034
+#, c-format
+msgid ""
+"most recent format '%s'\n"
+"appears more restrictive than '%s'\n"
+msgstr "Das letzte Format Â»%s« scheint strenger zu sein als Â»%s«.\n"
+
+#: ia64-gen.c:1045
+#, c-format
+msgid "overlapping field %s->%s\n"
+msgstr "Ãœberlappendes Feld Â»%s->%s«.\n"
+
+#: ia64-gen.c:1236
+#, c-format
+msgid "overwriting note %d with note %d (IC:%s)\n"
+msgstr "Ãœberschreibe Bemerkung %d mit Bemerkung %d (IC:%s)\n"
+
+#: ia64-gen.c:1435
+#, c-format
+msgid "don't know how to specify %% dependency %s\n"
+msgstr "Keine Ahnung, wie ich die Abhängigkeit Â»%% %s« angeben soll.\n"
+
+#: ia64-gen.c:1457
+#, c-format
+msgid "Don't know how to specify # dependency %s\n"
+msgstr "Keine Ahnung, wie ich die Abhängigkeit Â»# %s« angeben soll.\n"
+
+#: ia64-gen.c:1496
+#, c-format
+msgid "IC:%s [%s] has no terminals or sub-classes\n"
+msgstr "IC:%s [%s] hat weder Terminale noch Unterklassen\n"
+
+#: ia64-gen.c:1499
+#, c-format
+msgid "IC:%s has no terminals or sub-classes\n"
+msgstr "IC:%s hat weder Terminale noch Unterklassen\n"
+
+#: ia64-gen.c:1508
+#, c-format
+msgid "no insns mapped directly to terminal IC %s [%s]"
+msgstr "Kein Befehl ist dem Terminal-IC Â»%s [%s]« direkt zugeordnet"
+
+#: ia64-gen.c:1511
+#, c-format
+msgid "no insns mapped directly to terminal IC %s\n"
+msgstr "Kein Befehl ist dem Terminal-IC Â»%s« direkt zugeordnet.\n"
+
+#: ia64-gen.c:1522
+#, c-format
+msgid "class %s is defined but not used\n"
+msgstr "Die Klasse Â»%s« wurde definiert, aber nicht benutzt.\n"
+
+#: ia64-gen.c:1533
+#, c-format
+msgid "Warning: rsrc %s (%s) has no chks%s\n"
+msgstr "Warnung: Die Ressource Â»%s (%s)« hat keine Â»chks%s«.\n"
+
+#: ia64-gen.c:1537
+#, c-format
+msgid "rsrc %s (%s) has no regs\n"
+msgstr "Die Ressource Â»%s (%s)« hat keine Register\n"
+
+#: ia64-gen.c:2436
+#, c-format
+msgid "IC note %d in opcode %s (IC:%s) conflicts with resource %s note %d\n"
+msgstr "IC Bemerkung %d in Opcode Â»%s (IC:%s)« verträgt sich nicht mit Ressource %s Bemerkung %d.\n"
+
+#: ia64-gen.c:2464
+#, c-format
+msgid "IC note %d for opcode %s (IC:%s) conflicts with resource %s note %d\n"
+msgstr "IC Bemerkung %d für Opcode Â»%s (IC:%s)« verträgt sich nicht mit Ressource %s Bemerkung %d.\n"
+
+#: ia64-gen.c:2478
+#, c-format
+msgid "opcode %s has no class (ops %d %d %d)\n"
+msgstr "Opcode %s hat keine Klasse (Operanden %d %d %d)\n"
+
+#: ia64-gen.c:2789
+#, c-format
+msgid "unable to change directory to \"%s\", errno = %s\n"
+msgstr "Kann nicht in das Verzeichnis Â»%s« wechseln, errno = %s\n"
+
+#  We've been passed a w.  Return with an error message so that
+#  cgen will try the next parsing option.
+#. We've been passed a w.  Return with an error message so that
+#. cgen will try the next parsing option.
+#: ip2k-asm.c:92
+msgid "W keyword invalid in FR operand slot."
+msgstr "Schlüsselwort Â»W« ist im Operandenplatz Â»FR« ungültig."
+
+#  Invalid offset present.
+#. Invalid offset present.
+#: ip2k-asm.c:122
+msgid "offset(IP) is not a valid form"
+msgstr "»offset(IP)« ist keine gültige Form."
+
+#  Found something there in front of (DP) but it's out
+#  of range.
+#. Found something there in front of (DP) but it's out
+#. of range.
+#: ip2k-asm.c:175
+msgid "(DP) offset out of range."
+msgstr "(DP) Offset außerhalb des gültigen Bereichs."
+
+#  Found something there in front of (SP) but it's out
+#  of range.
+#. Found something there in front of (SP) but it's out
+#. of range.
+#: ip2k-asm.c:221
+msgid "(SP) offset out of range."
+msgstr "(SP) Offset außerhalb des gültigen Bereichs."
+
+#: ip2k-asm.c:241
+msgid "illegal use of parentheses"
+msgstr "Unerlaubte Benutzung von Klammern."
+
+#: ip2k-asm.c:248
+msgid "operand out of range (not between 1 and 255)"
+msgstr "Operand außerhalb des gültigen Bereichs (1 bis 255)."
+
+#  Something is very wrong. opindex has to be one of the above.
+#. Something is very wrong. opindex has to be one of the above.
+#: ip2k-asm.c:273
+msgid "parse_addr16: invalid opindex."
+msgstr "parse_addr16: Ungültiger Operatorindex."
+
+#: ip2k-asm.c:353
+msgid "Byte address required. - must be even."
+msgstr "Byteadresse benötigt -- muss gerade sein."
+
+#: ip2k-asm.c:362
+msgid "cgen_parse_address returned a symbol. Literal required."
+msgstr "cgen_parse_address: Gebe Symbol zurück. Sollte eigentlich ein Literal sein."
+
+#: ip2k-asm.c:420
+#, c-format
+msgid "%operator operand is not a symbol"
+msgstr "Der Operand %operator muss ein Symbol sein."
+
+#: ip2k-asm.c:474
+msgid "Attempt to find bit index of 0"
+msgstr "Versuch, ein gesetztes Bit von 0 zu bestimmen"
+
+#: iq2000-asm.c:110 iq2000-asm.c:141
+msgid "immediate value cannot be register"
+msgstr "Ein Direktoperand kann kein Register sein."
+
+#: iq2000-asm.c:120 iq2000-asm.c:151
+msgid "immediate value out of range"
+msgstr "Direktoperand außerhalb des gültigen Bereichs."
+
+#: iq2000-asm.c:180
+msgid "21-bit offset out of range"
+msgstr "21-Bit-Offset außerhalb des gültigen Bereichs"
+
+#: iq2000-asm.c:205 iq2000-asm.c:235 iq2000-asm.c:272 iq2000-asm.c:305
+#: openrisc-asm.c:96 openrisc-asm.c:155
+msgid "missing `)'"
+msgstr "Fehlende Â»)«."
 
 #: m10200-dis.c:199
 #, c-format
 msgid "unknown\t0x%02x"
-msgstr ""
+msgstr "unbekannt\t0x%02x"
 
 #: m10200-dis.c:339
 #, c-format
 msgid "unknown\t0x%04lx"
-msgstr ""
+msgstr "unbekannt\t0x%04lx"
 
-#: m10300-dis.c:685
+#: m10300-dis.c:766
 #, c-format
 msgid "unknown\t0x%04x"
-msgstr ""
+msgstr "unbekannt\t0x%04x"
 
 #: m68k-dis.c:429
 #, c-format
 msgid "<internal error in opcode table: %s %s>\n"
-msgstr ""
+msgstr "<interner Fehler in der Opcode-Tabelle: %s %s>\n"
 
 #: m68k-dis.c:1007
 #, c-format
 msgid "<function code %d>"
-msgstr ""
+msgstr "<Funktionscode %d>"
 
-#: m88k-dis.c:255
+#: m88k-dis.c:746
 #, c-format
 msgid "# <dis error: %08x>"
-msgstr ""
+msgstr "# <Disassemblierungsfehler: %08x>"
+
+#: mips-dis.c:699
+msgid "# internal error, incomplete extension sequence (+)"
+msgstr "# Interner Fehler, unvollständige Erweiterungsfolge (+)"
+
+#: mips-dis.c:742
+#, c-format
+msgid "# internal error, undefined extension sequence (+%c)"
+msgstr "# Interner Fehler, undefinierte Erweiterungsfolge (+%c)"
 
-#: mips-dis.c:337
+#: mips-dis.c:1000
 #, c-format
 msgid "# internal error, undefined modifier(%c)"
-msgstr ""
+msgstr "# Interner Fehler, undefinierter Modifikator (%c)"
 
-#: mips-dis.c:1209
+#: mips-dis.c:1751
 #, c-format
 msgid "# internal disassembler error, unrecognised modifier (%c)"
+msgstr "# Interner Fehler im Disassembler: unerkannter Modifikator (%c)"
+
+#: mips-dis.c:1763
+msgid ""
+"\n"
+"The following MIPS specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+"\n"
+"Die folgenden MIPS-spezifischen Disassembleroptionen werden zusammen\n"
+"mit dem Schalter Â»-M« unterstützt (mehrere Optionen sollten durch\n"
+"Kommata getrennt werden):\n"
+
+#: mips-dis.c:1767
+msgid ""
+"\n"
+"  gpr-names=ABI            Print GPR names according to  specified ABI.\n"
+"                           Default: based on binary being disassembled.\n"
 msgstr ""
+"\n"
+"  gpr-names=ABI            Gib GPR-Namen entsprechend des angegebenen ABI aus.\n"
+"                           Standard: abhängig von der Binärdatei, die\n"
+"                           disassembliert wird.\n"
+
+#: mips-dis.c:1771
+msgid ""
+"\n"
+"  fpr-names=ABI            Print FPR names according to specified ABI.\n"
+"                           Default: numeric.\n"
+msgstr ""
+"\n"
+"  fpr-names=ABI            Gib FPR-Namen entsprechend des angegebenen ABI aus.\n"
+"                           Standard: numerisch.\n"
+
+#: mips-dis.c:1775
+msgid ""
+"\n"
+"  cp0-names=ARCH           Print CP0 register names according to\n"
+"                           specified architecture.\n"
+"                           Default: based on binary being disassembled.\n"
+msgstr ""
+"\n"
+"  cp0-names=ARCH           Gib CP0-Registernamen entsprechend der angegebenen\n"
+"                           Architektur aus.\n"
+"                           Standard: abhängig von der Binärdatei, die\n"
+"                           disassembliert wird.\n"
+
+#: mips-dis.c:1780
+msgid ""
+"\n"
+"  hwr-names=ARCH           Print HWR names according to specified \n"
+"\t\t\t   architecture.\n"
+"                           Default: based on binary being disassembled.\n"
+msgstr ""
+"\n"
+"  hwr-names=ARCH           Gib HWR-Namen entsprechend der angegebenen\n"
+"                           Architektur aus.\n"
+"                           Standard: abhängig von der Binärdatei, die\n"
+"                           verarbeitet wird.\n"
+
+#: mips-dis.c:1785
+msgid ""
+"\n"
+"  reg-names=ABI            Print GPR and FPR names according to\n"
+"                           specified ABI.\n"
+msgstr ""
+"\n"
+"  reg-names=ABI            Gib GPR- und FPR-Namen entsprechend des\n"
+"                           angegebenen ABI aus.\n"
+
+#: mips-dis.c:1789
+msgid ""
+"\n"
+"  reg-names=ARCH           Print CP0 register and HWR names according to\n"
+"                           specified architecture.\n"
+msgstr ""
+"\n"
+"  reg-names=ARCH           Gib CP0-Register und HWR-Namen entsprechend der\n"
+"                           angegebenen Architektur aus.\n"
+
+#: mips-dis.c:1793
+msgid ""
+"\n"
+"  For the options above, the following values are supported for \"ABI\":\n"
+"   "
+msgstr ""
+"\n"
+"  Für die obigen Optionen werden die folgenden Werte für Â»ABI« unterstützt:\n"
+"   "
+
+#: mips-dis.c:1798 mips-dis.c:1806 mips-dis.c:1808
+msgid "\n"
+msgstr "\n"
+
+#: mips-dis.c:1800
+msgid ""
+"\n"
+"  For the options above, The following values are supported for \"ARCH\":\n"
+"   "
+msgstr ""
+"\n"
+"  Für die obigen Optionen werden die folgenden Werte für Â»ARCH« unterstützt:\n"
+"   "
 
 #: mmix-dis.c:34
 #, c-format
 msgid "Bad case %d (%s) in %s:%d\n"
-msgstr ""
+msgstr "Interner Fehler: case %d (%s) in %s:%d\n"
 
 #: mmix-dis.c:44
 #, c-format
 msgid "Internal: Non-debugged code (test-case missing): %s:%d"
-msgstr ""
+msgstr "Intern: Nicht gedebuggter Code (Testfall fehlt): %s:%d"
 
 #: mmix-dis.c:53
 msgid "(unknown)"
-msgstr ""
+msgstr "(unbekannt)"
 
-#: mmix-dis.c:517
+#: mmix-dis.c:519
 #, c-format
 msgid "*unknown operands type: %d*"
-msgstr ""
+msgstr "Unbekannter Operandentyp: %d*"
 
+#  I and Z are output operands and can`t be immediate
+#  * A is an address and we can`t have the address of
+#  * an immediate either. We don't know how much to increase
+#  * aoffsetp by since whatever generated this is broken
+#  * anyway!
 #. I and Z are output operands and can`t be immediate
 #. * A is an address and we can`t have the address of
 #. * an immediate either. We don't know how much to increase
 #. * aoffsetp by since whatever generated this is broken
 #. * anyway!
 #.
-#: ns32k-dis.c:628
+#: ns32k-dis.c:631
 msgid "$<undefined>"
-msgstr ""
+msgstr "$<undefiniert>"
 
-#: ppc-opc.c:777 ppc-opc.c:810
+#: ppc-opc.c:781 ppc-opc.c:809
 msgid "invalid conditional option"
-msgstr ""
+msgstr "Ungültige bedingte Option"
 
-#: ppc-opc.c:812
+#: ppc-opc.c:811
 msgid "attempt to set y bit when using + or - modifier"
-msgstr ""
+msgstr "Versuch, das y-Bit zusammen mit dem Modifikator Â»+« oder Â»-« zu setzen."
+
+#: ppc-opc.c:840
+msgid "offset not a multiple of 16"
+msgstr "Offset muss ein Vielfaches von 16 sein"
+
+#: ppc-opc.c:860
+msgid "offset not a multiple of 2"
+msgstr "Offset muss ein Vielfaches von 2 sein"
 
-#: ppc-opc.c:844 ppc-opc.c:896
+#: ppc-opc.c:862
+msgid "offset greater than 62"
+msgstr "Offset darf nicht größer als 62 sein"
+
+#: ppc-opc.c:881 ppc-opc.c:927 ppc-opc.c:975
 msgid "offset not a multiple of 4"
-msgstr ""
+msgstr "Offset muss ein Vielfaches von 4 sein"
+
+#: ppc-opc.c:883
+msgid "offset greater than 124"
+msgstr "Offset darf nicht größer als 124 sein"
 
-#: ppc-opc.c:869
+#: ppc-opc.c:902
+msgid "offset not a multiple of 8"
+msgstr "Offset muss ein Vielfaches von 8 sein"
+
+#: ppc-opc.c:904
+msgid "offset greater than 248"
+msgstr "Offset darf nicht größer als 248 sein"
+
+#: ppc-opc.c:950
 msgid "offset not between -2048 and 2047"
-msgstr ""
+msgstr "Offset muss im Bereich von -2048 bis 2047 liegen"
 
-#: ppc-opc.c:894
+#: ppc-opc.c:973
 msgid "offset not between -8192 and 8191"
-msgstr ""
+msgstr "Offset muss im Bereich von -8192 bis 8191 liegen"
+
+#: ppc-opc.c:1011
+msgid "ignoring invalid mfcr mask"
+msgstr "Ignoriere ungültige mfcr-Maske."
 
-#: ppc-opc.c:922
+#: ppc-opc.c:1059
 msgid "ignoring least significant bits in branch offset"
-msgstr ""
+msgstr "Ignoriere niedrigste Bits im Verzweigungsoffset"
 
-#: ppc-opc.c:956 ppc-opc.c:993
+#: ppc-opc.c:1090 ppc-opc.c:1125
 msgid "illegal bitmask"
-msgstr ""
+msgstr "Ungültige Bitmaske"
 
-#: ppc-opc.c:1066
+#: ppc-opc.c:1192
 msgid "value out of range"
-msgstr ""
+msgstr "Wert außerhalb des gültigen Bereichs"
 
-#: ppc-opc.c:1142
+#: ppc-opc.c:1262
 msgid "index register in load range"
-msgstr ""
+msgstr "Indexregister im Ladebereich (load range)"
 
-#: ppc-opc.c:1158
+#: ppc-opc.c:1279
+msgid "source and target register operands must be different"
+msgstr "Die Operanden für das Quell- und Zielregister müssen verschieden sein"
+
+#: ppc-opc.c:1294
 msgid "invalid register operand when updating"
-msgstr ""
+msgstr "Ungültiger Registeroperand beim Aktualisieren"
+
+#: ppc-opc.c:1335
+msgid "target register operand must be even"
+msgstr "Der Zielregisteroperand muss gerade sein"
 
-#. Mark as non-valid instruction
-#: sparc-dis.c:750
+#: ppc-opc.c:1350
+msgid "source register operand must be even"
+msgstr "Der Quellregisteroperand muss gerade sein"
+
+#  Mark as non-valid instruction.
+#. Mark as non-valid instruction.
+#: sparc-dis.c:760
 msgid "unknown"
-msgstr ""
+msgstr "unbekannt"
 
-#: sparc-dis.c:825
+#: sparc-dis.c:835
 #, c-format
 msgid "Internal error:  bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
-msgstr ""
+msgstr "Interner Fehler: Ungültiger SPARC-Opcode: \"%s\", %#.8lx, %#.8lx\n"
 
-#: sparc-dis.c:836
+#: sparc-dis.c:846
 #, c-format
 msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
-msgstr ""
+msgstr "Interner Fehler: Ungültiger SPARC-Opcode: \"%s\", %#.8lx, %#.8lx\n"
 
-#: sparc-dis.c:885
+#: sparc-dis.c:895
 #, c-format
 msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
-msgstr ""
+msgstr "Interner Fehler: Ungültiger SPARC-Opcode: \"%s\" == \"%s\"\n"
 
-#: v850-dis.c:224
+#: v850-dis.c:221
 #, c-format
 msgid "unknown operand shift: %x\n"
-msgstr ""
+msgstr "Unbekannte Operandenverschiebung: %x\n"
 
-#: v850-dis.c:236
+#: v850-dis.c:233
 #, c-format
 msgid "unknown pop reg: %d\n"
-msgstr ""
+msgstr "Unbekanntes pop-Register: %d\n"
 
+#  The functions used to insert and extract complicated operands.
+#  Note: There is a conspiracy between these functions and
+#  v850_insert_operand() in gas/config/tc-v850.c.  Error messages
+#  containing the string 'out of range' will be ignored unless a
+#  specific command line option is given to GAS.
 #. The functions used to insert and extract complicated operands.
 #. Note: There is a conspiracy between these functions and
 #. v850_insert_operand() in gas/config/tc-v850.c.  Error messages
@@ -371,72 +730,84 @@ msgstr ""
 #. specific command line option is given to GAS.
 #: v850-opc.c:68
 msgid "displacement value is not in range and is not aligned"
-msgstr ""
+msgstr "Der Abstandswert ist außerhalb des gültigen Bereichs und nicht ausgerichtet"
 
 #: v850-opc.c:69
 msgid "displacement value is out of range"
-msgstr ""
+msgstr "Der Abstandswert ist außerhalb des fültigen Bereichs."
 
 #: v850-opc.c:70
 msgid "displacement value is not aligned"
-msgstr ""
+msgstr "Der Abstandswert ist nicht ausgerichtet."
 
 #: v850-opc.c:72
 msgid "immediate value is out of range"
-msgstr ""
+msgstr "Direktwert außerhalb des gültigen Bereichs"
 
 #: v850-opc.c:83
 msgid "branch value not in range and to odd offset"
-msgstr ""
+msgstr "Verzweigungswert außerhalb des gültigen Bereichs und zu einem ungeraden Offset."
 
 #: v850-opc.c:85 v850-opc.c:117
 msgid "branch value out of range"
-msgstr ""
+msgstr "Verzweigungswert außerhalb des gültigen Bereichs."
 
 #: v850-opc.c:88 v850-opc.c:120
 msgid "branch to odd offset"
-msgstr ""
+msgstr "Verzweigung auf ungeraden Offset"
 
 #: v850-opc.c:115
 msgid "branch value not in range and to an odd offset"
-msgstr ""
+msgstr "Verzweigungswert außerhalb des gültigen Bereichs und zu einem ungeraden Offset."
 
 #: v850-opc.c:346
 msgid "invalid register for stack adjustment"
-msgstr ""
+msgstr "Ungültiges Register für Stackanpassung."
 
 #: v850-opc.c:370
 msgid "immediate value not in range and not even"
-msgstr ""
+msgstr "Direktwert außerhalb des gültigen Bereichs und nicht gerade"
 
 #: v850-opc.c:375
 msgid "immediate value must be even"
 msgstr "Der Direktoperand muss gerade sein."
 
-#: xstormy16-asm.c:74
+#: xstormy16-asm.c:76
 msgid "Bad register in preincrement"
-msgstr ""
+msgstr "Ungültiges Register beim Pre-Increment"
 
-#: xstormy16-asm.c:79
+#: xstormy16-asm.c:81
 msgid "Bad register in postincrement"
-msgstr ""
+msgstr "Ungültiges Register beim Post-Increment"
 
-#: xstormy16-asm.c:81
+#: xstormy16-asm.c:83
 msgid "Bad register name"
 msgstr "Falscher Registername."
 
-#: xstormy16-asm.c:85
+#: xstormy16-asm.c:87
 msgid "Label conflicts with register name"
-msgstr ""
+msgstr "Sprungmarke verträgt sich nicht mit dem Registername"
 
-#: xstormy16-asm.c:89
+#: xstormy16-asm.c:91
 msgid "Label conflicts with `Rx'"
-msgstr ""
+msgstr "Sprungmarke verträgt sich nicht mit Â»Rx«"
 
-#: xstormy16-asm.c:91
+#: xstormy16-asm.c:93
 msgid "Bad immediate expression"
-msgstr ""
+msgstr "Ungültiger Direktausdruck"
+
+#: xstormy16-asm.c:115
+msgid "No relocation for small immediate"
+msgstr "Keine Verlagerung für kleine Direktwerte"
 
-#: xstormy16-asm.c:120
+#: xstormy16-asm.c:125
 msgid "Small operand was not an immediate number"
-msgstr ""
+msgstr "Kleiner Operand war keine Direktzahl."
+
+#: xstormy16-asm.c:164
+msgid "Operand is not a symbol"
+msgstr "Operand muss ein Symbol sein"
+
+#: xstormy16-asm.c:172
+msgid "Syntax error: No trailing ')'"
+msgstr "Syntaxfehler: Kein abschließendes Â»)«"
index 70fdffb..2512f96 100644 (file)
@@ -577,12 +577,21 @@ print_insn_sh (memaddr, info)
            case IMM1_8BY4:
              imm = ((nibs[2] << 4) | nibs[3]) << 2;
              goto ok;
+           case REG_N_D:
+             if ((nibs[n] & 1) != 0)
+               goto fail;
+             /* fall through */
            case REG_N:
              rn = nibs[n];
              break;
            case REG_M:
              rm = nibs[n];
              break;
+           case REG_N_B01:
+             if ((nibs[n] & 0x3) != 1 /* binary 01 */)
+               goto fail;
+             rn = (nibs[n] & 0xc) >> 2;
+             break;
            case REG_NM:
              rn = (nibs[n] & 0xc) >> 2;
              rm = (nibs[n] & 0x3);
index 4b0b0a8..0ef1fab 100644 (file)
@@ -37,6 +37,8 @@ typedef enum
     HEX_XX00,
     HEX_00YY,
     REG_N,
+    REG_N_D,     /* nnn0 */
+    REG_N_B01,   /* nn01 */
     REG_M,
     SDT_REG_N,
     REG_NM,
@@ -842,7 +844,7 @@ const sh_opcode_info sh_table[] =
 {"pswap", {DSP_REG_Y,DSP_REG_N},{PPI,PPIC,HEX_B,HEX_D,HEX_4}, arch_sh4al_dsp_up},
 
 /* 1111nnnn01011101 fabs <F_REG_N>     */{"fabs",{F_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh2e_up},
-/* 1111nnnn01011101 fabs <D_REG_N>     */{"fabs",{D_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh4_up},
+/* 1111nnn001011101 fabs <D_REG_N>     */{"fabs",{D_REG_N},{HEX_F,REG_N,HEX_5,HEX_D}, arch_sh4_up},
 
 /* 1111nnnnmmmm0000 fadd <F_REG_M>,<F_REG_N>*/{"fadd",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh2e_up},
 /* 1111nnn0mmm00000 fadd <D_REG_M>,<D_REG_N>*/{"fadd",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_0}, arch_sh4_up},
@@ -853,9 +855,9 @@ const sh_opcode_info sh_table[] =
 /* 1111nnnnmmmm0101 fcmp/gt <F_REG_M>,<F_REG_N>*/{"fcmp/gt",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh2e_up},
 /* 1111nnn0mmm00101 fcmp/gt <D_REG_M>,<D_REG_N>*/{"fcmp/gt",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_5}, arch_sh4_up},
 
-/* 1111nnn010111101 fcnvds <D_REG_N>,FPUL*/{"fcnvds",{D_REG_N,FPUL_M},{HEX_F,REG_N,HEX_B,HEX_D}, arch_sh4_up},
+/* 1111nnn010111101 fcnvds <D_REG_N>,FPUL*/{"fcnvds",{D_REG_N,FPUL_M},{HEX_F,REG_N_D,HEX_B,HEX_D}, arch_sh4_up},
 
-/* 1111nnn010101101 fcnvsd FPUL,<D_REG_N>*/{"fcnvsd",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_A,HEX_D}, arch_sh4_up},
+/* 1111nnn010101101 fcnvsd FPUL,<D_REG_N>*/{"fcnvsd",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_A,HEX_D}, arch_sh4_up},
 
 /* 1111nnnnmmmm0011 fdiv <F_REG_M>,<F_REG_N>*/{"fdiv",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh2e_up},
 /* 1111nnn0mmm00011 fdiv <D_REG_M>,<D_REG_N>*/{"fdiv",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_3}, arch_sh4_up},
@@ -869,42 +871,42 @@ const sh_opcode_info sh_table[] =
 /* 1111nnnn00011101 flds <F_REG_N>,FPUL*/{"flds",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_1,HEX_D}, arch_sh2e_up},
 
 /* 1111nnnn00101101 float FPUL,<F_REG_N>*/{"float",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh2e_up},
-/* 1111nnnn00101101 float FPUL,<D_REG_N>*/{"float",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh4_up},
+/* 1111nnn000101101 float FPUL,<D_REG_N>*/{"float",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_2,HEX_D}, arch_sh4_up},
 
 /* 1111nnnnmmmm1110 fmac FR0,<F_REG_M>,<F_REG_N>*/{"fmac",{F_FR0,F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_E}, arch_sh2e_up},
 
 /* 1111nnnnmmmm1100 fmov <F_REG_M>,<F_REG_N>*/{"fmov",{F_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh2e_up},
-/* 1111nnnnmmmm1100 fmov <DX_REG_M>,<DX_REG_N>*/{"fmov",{DX_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh4_up},
+/* 1111nnn1mmmm1100 fmov <DX_REG_M>,<DX_REG_N>*/{"fmov",{DX_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_C}, arch_sh4_up},
 
 /* 1111nnnnmmmm1000 fmov @<REG_M>,<F_REG_N>*/{"fmov",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up},
-/* 1111nnnnmmmm1000 fmov @<REG_M>,<DX_REG_N>*/{"fmov",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh4_up},
+/* 1111nnn1mmmm1000 fmov @<REG_M>,<DX_REG_N>*/{"fmov",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh4_up},
 
 /* 1111nnnnmmmm1010 fmov <F_REG_M>,@<REG_N>*/{"fmov",{F_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh2e_up},
-/* 1111nnnnmmmm1010 fmov <DX_REG_M>,@<REG_N>*/{"fmov",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh4_up},
+/* 1111nnnnmmm11010 fmov <DX_REG_M>,@<REG_N>*/{"fmov",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh4_up},
 
 /* 1111nnnnmmmm1001 fmov @<REG_M>+,<F_REG_N>*/{"fmov",{A_INC_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh2e_up},
-/* 1111nnnnmmmm1001 fmov @<REG_M>+,<DX_REG_N>*/{"fmov",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh4_up},
+/* 1111nnn1mmmm1001 fmov @<REG_M>+,<DX_REG_N>*/{"fmov",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh4_up},
 
 /* 1111nnnnmmmm1011 fmov <F_REG_M>,@-<REG_N>*/{"fmov",{F_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh2e_up},
-/* 1111nnnnmmmm1011 fmov <DX_REG_M>,@-<REG_N>*/{"fmov",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh4_up},
+/* 1111nnnnmmm11011 fmov <DX_REG_M>,@-<REG_N>*/{"fmov",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh4_up},
 
 /* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<F_REG_N>*/{"fmov",{A_IND_R0_REG_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh2e_up},
-/* 1111nnnnmmmm0110 fmov @(R0,<REG_M>),<DX_REG_N>*/{"fmov",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh4_up},
+/* 1111nnn1mmmm0110 fmov @(R0,<REG_M>),<DX_REG_N>*/{"fmov",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh4_up},
 
 /* 1111nnnnmmmm0111 fmov <F_REG_M>,@(R0,<REG_N>)*/{"fmov",{F_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh2e_up},
-/* 1111nnnnmmmm0111 fmov <DX_REG_M>,@(R0,<REG_N>)*/{"fmov",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh4_up},
+/* 1111nnnnmmm10111 fmov <DX_REG_M>,@(R0,<REG_N>)*/{"fmov",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh4_up},
 
-/* 1111nnnnmmmm1000 fmov.d @<REG_M>,<DX_REG_N>*/{"fmov.d",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh4_up},
+/* 1111nnn1mmmm1000 fmov.d @<REG_M>,<DX_REG_N>*/{"fmov.d",{A_IND_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh4_up},
 
-/* 1111nnnnmmmm1010 fmov.d <DX_REG_M>,@<REG_N>*/{"fmov.d",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh4_up},
+/* 1111nnnnmmm11010 fmov.d <DX_REG_M>,@<REG_N>*/{"fmov.d",{DX_REG_M,A_IND_N},{HEX_F,REG_N,REG_M,HEX_A}, arch_sh4_up},
 
-/* 1111nnnnmmmm1001 fmov.d @<REG_M>+,<DX_REG_N>*/{"fmov.d",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh4_up},
+/* 1111nnn1mmmm1001 fmov.d @<REG_M>+,<DX_REG_N>*/{"fmov.d",{A_INC_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_9}, arch_sh4_up},
 
-/* 1111nnnnmmmm1011 fmov.d <DX_REG_M>,@-<REG_N>*/{"fmov.d",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh4_up},
+/* 1111nnnnmmm11011 fmov.d <DX_REG_M>,@-<REG_N>*/{"fmov.d",{DX_REG_M,A_DEC_N},{HEX_F,REG_N,REG_M,HEX_B}, arch_sh4_up},
 
-/* 1111nnnnmmmm0110 fmov.d @(R0,<REG_M>),<DX_REG_N>*/{"fmov.d",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh4_up},
+/* 1111nnn1mmmm0110 fmov.d @(R0,<REG_M>),<DX_REG_N>*/{"fmov.d",{A_IND_R0_REG_M,DX_REG_N},{HEX_F,REG_N,REG_M,HEX_6}, arch_sh4_up},
 
-/* 1111nnnnmmmm0111 fmov.d <DX_REG_M>,@(R0,<REG_N>)*/{"fmov.d",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh4_up},
+/* 1111nnnnmmm10111 fmov.d <DX_REG_M>,@(R0,<REG_N>)*/{"fmov.d",{DX_REG_M,A_IND_R0_REG_N},{HEX_F,REG_N,REG_M,HEX_7}, arch_sh4_up},
 
 /* 1111nnnnmmmm1000 fmov.s @<REG_M>,<F_REG_N>*/{"fmov.s",{A_IND_M,F_REG_N},{HEX_F,REG_N,REG_M,HEX_8}, arch_sh2e_up},
 
@@ -922,20 +924,20 @@ const sh_opcode_info sh_table[] =
 /* 1111nnn0mmm00010 fmul <D_REG_M>,<D_REG_N>*/{"fmul",{D_REG_M,D_REG_N},{HEX_F,REG_N,REG_M,HEX_2}, arch_sh4_up},
 
 /* 1111nnnn01001101 fneg <F_REG_N>     */{"fneg",{F_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh2e_up},
-/* 1111nnnn01001101 fneg <D_REG_N>     */{"fneg",{D_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh4_up},
+/* 1111nnn001001101 fneg <D_REG_N>     */{"fneg",{D_REG_N},{HEX_F,REG_N,HEX_4,HEX_D}, arch_sh4_up},
 
 /* 1111011111111101 fpchg               */{"fpchg",{0},{HEX_F,HEX_7,HEX_F,HEX_D}, arch_sh4a_up},
 
 /* 1111101111111101 frchg               */{"frchg",{0},{HEX_F,HEX_B,HEX_F,HEX_D}, arch_sh4_up},
 
-/* 1111nnn011111101 fsca FPUL,<F_REG_N> */{"fsca",{FPUL_M,D_REG_N},{HEX_F,REG_N,HEX_F,HEX_D}, arch_sh4a_up},
+/* 1111nnn011111101 fsca FPUL,<D_REG_N> */{"fsca",{FPUL_M,D_REG_N},{HEX_F,REG_N_D,HEX_F,HEX_D}, arch_sh4_up},
 
 /* 1111001111111101 fschg               */{"fschg",{0},{HEX_F,HEX_3,HEX_F,HEX_D}, arch_sh4_up},
 
 /* 1111nnnn01101101 fsqrt <F_REG_N>    */{"fsqrt",{F_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh3e_up},
-/* 1111nnnn01101101 fsqrt <D_REG_N>    */{"fsqrt",{D_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh4_up},
+/* 1111nnn001101101 fsqrt <D_REG_N>    */{"fsqrt",{D_REG_N},{HEX_F,REG_N,HEX_6,HEX_D}, arch_sh4_up},
 
-/* 1111nnnn01111101 fsrra <F_REG_N>    */{"fsrra",{F_REG_N},{HEX_F,REG_N,HEX_7,HEX_D}, arch_sh4a_up},
+/* 1111nnnn01111101 fsrra <F_REG_N>    */{"fsrra",{F_REG_N},{HEX_F,REG_N,HEX_7,HEX_D}, arch_sh4_up},
 
 /* 1111nnnn00001101 fsts FPUL,<F_REG_N>*/{"fsts",{FPUL_M,F_REG_N},{HEX_F,REG_N,HEX_0,HEX_D}, arch_sh2e_up},
 
@@ -945,7 +947,7 @@ const sh_opcode_info sh_table[] =
 /* 1111nnnn00111101 ftrc <F_REG_N>,FPUL*/{"ftrc",{F_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh2e_up},
 /* 1111nnnn00111101 ftrc <D_REG_N>,FPUL*/{"ftrc",{D_REG_N,FPUL_M},{HEX_F,REG_N,HEX_3,HEX_D}, arch_sh4_up},
 
-/* 1111nn0111111101 ftrv XMTRX_M4,<V_REG_n>*/{"ftrv",{XMTRX_M4,V_REG_N},{HEX_F,REG_NM,HEX_F,HEX_D}, arch_sh4_up},
+/* 1111nn0111111101 ftrv XMTRX_M4,<V_REG_n>*/{"ftrv",{XMTRX_M4,V_REG_N},{HEX_F,REG_N_B01,HEX_F,HEX_D}, arch_sh4_up},
 
 { 0, {0}, {0}, 0 } 
 };
index 403ce14..4fec631 100644 (file)
@@ -208,11 +208,14 @@ do-proto-toplev: $(DEVO_SUPPORT) $(SUPPORT_FILES) texinfo/texinfo.tex
        -rm -f $(PACKAGE)-$(VER)
        ln -s proto-toplev $(PACKAGE)-$(VER)
 
+CVS_NAMES= \( -name CVS -o -name '.cvsignore' \)
+
 .PHONY: do-tar
 do-tar:
        echo "==> Making $(PACKAGE)-$(VER).tar"
        -rm -f $(PACKAGE)-$(VER).tar
-       find $(PACKAGE)-$(VER) -follow -name CVS -prune -o -type f -print \
+       find $(PACKAGE)-$(VER) -follow $(CVS_NAMES) -prune \
+                       -o -type f -print \
                | tar cTfh - $(PACKAGE)-$(VER).tar
 
 .PHONY: do-bz2
@@ -224,7 +227,8 @@ do-bz2:
 .PHONY: do-md5sum
 do-md5sum:
        echo "==> Adding md5 checksum to top-level directory"
-       cd proto-toplev && find * -follow -name CVS -prune -o -type f -print \
+       cd proto-toplev && find * -follow $(CVS_NAMES) -prune \
+                       -o -type f -print \
                | xargs $(MD5PROG) > ../md5.sum
        mv md5.sum proto-toplev
 
index 555a077..6f322ea 100644 (file)
@@ -3,10 +3,11 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2003-02-03.16}
+\def\texinfoversion{2004-02-19.09}
 %
 % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+% Foundation, Inc.
 %
 % This texinfo.tex file is free software; you can redistribute it and/or
 % modify it under the terms of the GNU General Public License as
 % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 % Boston, MA 02111-1307, USA.
 %
-% In other words, you are welcome to use, share and improve this program.
-% You are forbidden to forbid anyone else to use, share and improve
-% what you give them.   Help stamp out software-hoarding!
-%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction.  (This has been our intent since Texinfo was invented.)
+% 
 % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:
-%   ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex
-%     (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
 %   ftp://tug.org/tex/texinfo.tex
-%     (and all CTAN mirrors, see http://www.ctan.org),
-%   and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-% 
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-% 
-% The texinfo.tex in any given Texinfo distribution could well be out
+%     (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
 % of date, so if that's what you're using, please check.
-% 
+%
 % Send bug reports to bug-texinfo@gnu.org.  Please include including a
 % complete document in each bug report with which we can reproduce the
 % problem.  Patches are, of course, greatly appreciated.
 % The extra TeX runs get the cross-reference information correct.
 % Sometimes one run after texindex suffices, and sometimes you need more
 % than two; texi2dvi does it as many times as necessary.
-% 
+%
 % It is possible to adapt texinfo.tex for other languages, to some
 % extent.  You can get the existing language-specific files from the
 % full Texinfo distribution.
+% 
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
 
 \message{Loading texinfo [version \texinfoversion]:}
 
 \message{Basics,}
 \chardef\other=12
 
-% We never want plain's outer \+ definition in Texinfo.
+% We never want plain's \outer definition of \+ in Texinfo.
 % For @tex, we can use \tabalign.
 \let\+ = \relax
 
-% Save some parts of plain tex whose names we will redefine.
+% Save some plain tex macros whose names we will redefine.
 \let\ptexb=\b
 \let\ptexbullet=\bullet
 \let\ptexc=\c
 \let\ptexend=\end
 \let\ptexequiv=\equiv
 \let\ptexexclam=\!
+\let\ptexfootnote=\footnote
 \let\ptexgtr=>
 \let\ptexhat=^
 \let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexnoindent=\noindent
+\let\ptexinsert=\insert
 \let\ptexlbrace=\{
 \let\ptexless=<
 \let\ptexplus=+
 \let\ptexrbrace=\}
+\let\ptexslash=\/
 \let\ptexstar=\*
 \let\ptext=\t
 
 % starts a new line in the output.
 \newlinechar = `^^J
 
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+  \let\linenumber = \empty % Pre-3.0.
+\else
+  \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
 % Set up fixed words for English if not already set.
 \ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
 \ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
 \ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
 \ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
 \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
 \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
-\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
 
 % In some macros, we cannot use the `\? notation---the left quote is
 % in some cases the escape char.
 \chardef\colonChar = `\:
 \chardef\commaChar = `\,
 \chardef\dotChar   = `\.
-\chardef\equalChar = `\=
 \chardef\exclamChar= `\!
 \chardef\questChar = `\?
 \chardef\semiChar  = `\;
-\chardef\spaceChar = `\ %
 \chardef\underChar = `\_
 
+\chardef\spaceChar = `\ %
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode\spaceChar=\spacecat}
+
 % Ignore a token.
 %
 \def\gobble#1{}
 
-% True if #1 is the empty string, i.e., called like `\ifempty{}'.
-%
-\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}%
-\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}%
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
 
 % Hyphenation fixes.
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
-\hyphenation{white-space}
+\hyphenation{
+  Flor-i-da Ghost-script Ghost-view Mac-OS ap-pen-dix bit-map bit-maps
+  data-base data-bases eshell fall-ing half-way long-est man-u-script
+  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+  par-a-digms rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+  stand-alone strong-est time-stamp time-stamps which-ever white-space
+  wide-spread wrap-around
+}
 
 % Margin to add to right of even pages, to left of odd pages.
 \newdimen\bindingoffset
 \newdimen\normaloffset
 \newdimen\pagewidth \newdimen\pageheight
 
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @| inserts a changebar to the left of the current line.  It should
+% surround any changed text.  This approach does *not* work if the
+% change spans more than two lines of output.  To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+  % \vadjust can only be used in horizontal mode.
+  \leavevmode
+  %
+  % Append this vertical mode material after the current line in the output.
+  \vadjust{%
+    % We want to insert a rule with the height and depth of the current
+    % leading; that is exactly what \strutbox is supposed to record.
+    \vskip-\baselineskip
+    %
+    % \vadjust-items are inserted at the left edge of the type.  So
+    % the \llap here moves out into the left-hand margin.
+    \llap{%
+      %
+      % For a thicker or thinner bar, change the `1pt'.
+      \vrule height\baselineskip width1pt
+      %
+      % This is the space between the bar and the text.
+      \hskip 12pt
+    }%
+  }%
+}
+
 % Sometimes it is convenient to have everything in the transcript file
 % and nothing on the terminal.  We don't just call \tracingall here,
 % since that produces some useless output on the terminal.  We also make
     \tracingassigns1
   \fi
   \tracingcommands3  % 3 gives us more in etex
-  \errorcontextlines\maxdimen
+  \errorcontextlines16
 }%
 
 % add check for \lastpenalty to plain's definitions.  If the last thing
 % we did was a \nobreak, we don't want to insert more space.
-% 
+%
 \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
   \removelastskip\penalty-50\smallskip\fi\fi}
 \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
                    % the page break happens to be in the middle of an example.
     \shipout\vbox{%
       % Do this early so pdf references go to the beginning of the page.
-      \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
+      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
       %
       \ifcropmarks \vbox to \outervsize\bgroup
         \hsize = \outerhsize
 % the input line (except we remove a trailing comment).  #1 should be a
 % macro which expects an ordinary undelimited TeX argument.
 %
-\def\parsearg#1{%
-  \let\next = #1%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+  \def\next{#2}%
   \begingroup
     \obeylines
-    \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse.  Otherwise, we're done.
-\def\parseargx{%
-  % \obeyedspace is defined far below, after the definition of \sepspaces.
-  \ifx\obeyedspace\temp
-    \expandafter\parseargdiscardspace
-  \else
-    \expandafter\parseargline
-  \fi
+    \spaceisspace
+    #1%
+    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
 }
 
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
 {\obeylines %
   \gdef\parseargline#1^^M{%
     \endgroup % End of the group started in \parsearg.
-    %
-    % First remove any @c comment, then any @comment.
-    % Result of each macro is put in \toks0.
-    \argremovec #1\c\relax %
-    \expandafter\argremovecomment \the\toks0 \comment\relax %
-    %
-    % Call the caller's macro, saved as \next in \parsearg.
-    \expandafter\next\expandafter{\the\toks0}%
+    \argremovecomment #1\comment\ArgTerm%
   }%
 }
 
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us.  The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
 
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
 %    @end itemize  @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'.  Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands.  (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.)  But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
-  \begingroup
-    \ignoreactivespaces
-    \edef\temp{#1}%
-    \global\toks0 = \expandafter{\temp}%
-  \endgroup
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+  \def\temp{#3}%
+  \ifx\temp\empty
+    % We cannot use \next here, as it holds the macro to run;
+    % thus we reuse \temp.
+    \let\temp\finishparsearg
+  \else
+    \let\temp\argcheckspaces
+  \fi
+  % Put the space token in:
+  \temp#1 #3\ArgTerm
 }
 
-% Change the active space to expand to nothing.
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \next.
+% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
 %
-\begingroup
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
+
+% \parseargdef\foo{...}
+%      is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick.  --kasal, 16nov03
+
+\def\parseargdef#1{%
+  \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+  \def#2{\parsearg#1}%
+  \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
   \obeyspaces
-  \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
+  \gdef\obeyedspace{ }
+
+  % Make each space character in the input produce a normal interword
+  % space in the output.  Don't allow a line break at this space, as this
+  % is used only in environments like @example, where each line of input
+  % should produce a line of output anyway.
+  %
+  \gdef\sepspaces{\obeyspaces\let =\tie}
+
+  % If an index command is used in an @example environment, any spaces
+  % therein should become regular spaces in the raw index file, not the
+  % expansion of \tie (\leavevmode \penalty \@M \ ).
+  \gdef\unsepspaces{\let =\space}
+}
 
 
 \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
 
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment; press RETURN to continue}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
+% Define the framework for environments in texinfo.tex.  It's used like this:
+% 
+%   \envdef\foo{...}
+%   \def\Efoo{...}
+%   
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo.  \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches.  The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+% 
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as enviroments; they don't open a group.  (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
 
-% @begin foo  is the same as @foo, for now.
-\newhelp\EMsimple{Press RETURN to continue.}
 
-\outer\def\begin{\parsearg\beginxxx}
+% At runtime, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
 
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
 
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
-  \removeactivespaces{#1}%
-  \edef\endthing{\the\toks0}%
-  %
-  \expandafter\ifx\csname E\endthing\endcsname\relax
-    \expandafter\ifx\csname \endthing\endcsname\relax
-      % There's no \foo, i.e., no ``environment'' foo.
-      \errhelp = \EMsimple
-      \errmessage{Undefined command `@end \endthing'}%
-    \else
-      \unmatchedenderror\endthing
-    \fi
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+  \def\temp{#1}%
+  \ifx\thisenv\temp
   \else
-    % Everything's ok; the right environment has been started.
-    \csname E\endthing\endcsname
+    \badenverr
   \fi
 }
 
-% There is an environment #1, but it hasn't been started.  Give an error.
-%
-\def\unmatchedenderror#1{%
+% Evironment mismatch, #1 expected:
+\def\badenverr{%
   \errhelp = \EMsimple
-  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
+  \errmessage{This command can appear only \inenvironment\temp,
+    not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+  \ifx#1\empty
+    out of any environment%
+  \else
+    in environment \expandafter\string#1%
+  \fi
 }
 
-% Define the control sequence \E#1 to give an unmatched @end error.
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
 %
-\def\defineunmatchedend#1{%
-  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
+\parseargdef\end{%
+  \if 1\csname iscond.#1\endcsname
+  \else
+    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+    \expandafter\checkenv\csname#1\endcsname
+    \csname E#1\endcsname
+    \endgroup
+  \fi
 }
 
+\newhelp\EMsimple{Press RETURN to continue.}
+
 
 %% Simple single-character @ commands
 
   !gdef!rbraceatcmd[@}]%
 !endgroup
 
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
 % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
 % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
 \let\, = \c
 \let\ubaraccent = \b
 \let\udotaccent = \d
 
-% Other special characters: @questiondown @exclamdown
+% Other special characters: @questiondown @exclamdown @ordf @ordm
 % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
 \def\questiondown{?`}
 \def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
 
 % Dotless i and dotless j, used for accents.
 \def\imacro{i}
   \fi\fi
 }
 
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence.  (Idea found in latex.)
+% 
+\edef\TeX{\TeX \spacefactor=3000 }
+
+% @LaTeX{} logo.  Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+% 
+\def\LaTeX{%
+  L\kern-.36em
+  {\setbox0=\hbox{T}%
+   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
+  \kern-.15em
+  \TeX
+}
+
 % Be sure we're in horizontal mode when doing a tie, since we make space
 % equivalent to this in @example-like environments. Otherwise, a space
 % at the beginning of a line will start with \penalty -- and
 % @* forces a line break.
 \def\*{\hfil\break\hbox{}\ignorespaces}
 
+% @/ allows a line break.
+\let\/=\allowbreak
+
 % @. is an end-of-sentence period.
 \def\.{.\spacefactor=3000 }
 
 % explicit \vfill so that the extra space is at the bottom.  The
 % threshold for doing this is if the group is more than \vfilllimit
 % percent of a page (\vfilllimit can be changed inside of @tex).
-% 
+%
 \newbox\groupbox
 \def\vfilllimit{0.7}
 %
-\def\group{\begingroup
-  \ifnum\catcode13=\active \else
+\envdef\group{%
+  \ifnum\catcode`\^^M=\active \else
     \errhelp = \groupinvalidhelp
     \errmessage{@group invalid in context where filling is enabled}%
   \fi
-  %
-  % The \vtop we start below produces a box with normal height and large
-  % depth; thus, TeX puts \baselineskip glue before it, and (when the
-  % next line of text is done) \lineskip glue after it.  (See p.82 of
-  % the TeXbook.)  Thus, space below is not quite equal to space
-  % above.  But it's pretty close.
-  \def\Egroup{%
-    \egroup           % End the \vtop.
-    % \dimen0 is the vertical size of the group's box.
-    \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
-    % \dimen2 is how much space is left on the page (more or less).
-    \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
-    % if the group doesn't fit on the current page, and it's a big big
-    % group, force a page break.
-    \ifdim \dimen0 > \dimen2
-      \ifdim \pagetotal < \vfilllimit\pageheight
-        \page
-      \fi
-    \fi
-    \copy\groupbox
-    \endgroup         % End the \group.
-  }%
+  \startsavinginserts
   %
   \setbox\groupbox = \vtop\bgroup
-    % We have to put a strut on the last line in case the @group is in
-    % the midst of an example, rather than completely enclosing it.
-    % Otherwise, the interline space between the last line of the group
-    % and the first line afterwards is too small.  But we can't put the
-    % strut in \Egroup, since there it would be on a line by itself.
-    % Hence this just inserts a strut at the beginning of each line.
-    \everypar = {\strut}%
-    %
-    % Since we have a strut on every line, we don't need any of TeX's
-    % normal interline spacing.
-    \offinterlineskip
-    %
-    % OK, but now we have to do something about blank
-    % lines in the input in @example-like environments, which normally
-    % just turn into \lisppar, which will insert no space now that we've
-    % turned off the interline space.  Simplest is to make them be an
-    % empty paragraph.
-    \ifx\par\lisppar
-      \edef\par{\leavevmode \par}%
-      %
-      % Reset ^^M's definition to new definition of \par.
-      \obeylines
-    \fi
-    %
     % Do @comment since we are called inside an environment such as
     % @example, where each end-of-line in the input causes an
     % end-of-line in the output.  We don't want the end-of-line after
     \comment
 }
 %
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it.  Thus, space below is not quite equal to space
+% above.  But it's pretty close.
+\def\Egroup{%
+    % To get correct interline space between the last line of the group
+    % and the first line afterwards, we have to propagate \prevdepth.
+    \endgraf % Not \par, as it may have been set to \lisppar.
+    \global\dimen1 = \prevdepth
+  \egroup           % End the \vtop.
+  % \dimen0 is the vertical size of the group's box.
+  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
+  % \dimen2 is how much space is left on the page (more or less).
+  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
+  % if the group doesn't fit on the current page, and it's a big big
+  % group, force a page break.
+  \ifdim \dimen0 > \dimen2
+    \ifdim \pagetotal < \vfilllimit\pageheight
+      \page
+    \fi
+  \fi
+  \box\groupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+%
 % TeX puts in an \escapechar (i.e., `@') at the beginning of the help
 % message, so this ends up printing `@group can only ...'.
 %
@@ -642,10 +730,8 @@ where each line of input produces a line of output.}
 
 \newdimen\mil  \mil=0.001in
 
-\def\need{\parsearg\needx}
-
 % Old definition--didn't work.
-%\def\needx #1{\par %
+%\parseargdef\need{\par %
 %% This method tries to make TeX break the page naturally
 %% if the depth of the box does not fit.
 %{\baselineskip=0pt%
@@ -653,7 +739,7 @@ where each line of input produces a line of output.}
 %\prevdepth=-1000pt
 %}}
 
-\def\needx#1{%
+\parseargdef\need{%
   % Ensure vertical mode, so we don't make a big box in the middle of a
   % paragraph.
   \par
@@ -692,37 +778,11 @@ where each line of input produces a line of output.}
   \fi
 }
 
-% @br   forces paragraph break
+% @br   forces paragraph break (and is undocumented).
 
 \let\br = \par
 
-% @dots{} output an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
-  \leavevmode
-  \hbox to 1.5em{%
-    \hskip 0pt plus 0.25fil minus 0.25fil
-    .\hss.\hss.%
-    \hskip 0pt plus 0.5fil minus 0.5fil
-  }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
-  \leavevmode
-  \hbox to 2em{%
-    \hskip 0pt plus 0.25fil minus 0.25fil
-    .\hss.\hss.\hss.%
-    \hskip 0pt plus 0.5fil minus 0.5fil
-  }%
-  \spacefactor=3000
-}
-
-
-% @page    forces the start of a new page
+% @page forces the start of a new page.
 %
 \def\page{\par\vfill\supereject}
 
@@ -734,13 +794,11 @@ where each line of input produces a line of output.}
 \newskip\exdentamount
 
 % This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
 
 % This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+  \leftline{\hskip\leftskip{\rm#1}}}}
 
 % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
 % paragraph.  For more general purposes, use the \margin insertion
@@ -771,10 +829,10 @@ where each line of input produces a line of output.}
 % @inmargin{TEXT [, RIGHT-TEXT]}
 % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
 % else use TEXT for both).
-% 
+%
 \def\inmargin#1{\parseinmargin #1,,\finish}
 \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
-  \setbox0 = \hbox{\ignorespaces #2}% 
+  \setbox0 = \hbox{\ignorespaces #2}%
   \ifdim\wd0 > 0pt
     \def\lefttext{#1}%  have both texts
     \def\righttext{#2}%
@@ -792,8 +850,19 @@ where each line of input produces a line of output.}
 }
 
 % @include file    insert text of that file as input.
-% Allow normal characters that  we make active in the argument (a file name).
-\def\include{\begingroup
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+  \pushthisfilestack
+  \def\thisfile{#1}%
+  {%
+    \makevalueexpandable
+    \def\temp{\input #1 }%
+    \expandafter
+  }\temp
+  \popthisfilestack
+}
+\def\filenamecatcodes{%
   \catcode`\\=\other
   \catcode`~=\other
   \catcode`^=\other
@@ -802,33 +871,50 @@ where each line of input produces a line of output.}
   \catcode`<=\other
   \catcode`>=\other
   \catcode`+=\other
-  \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
-  % Read the included file in a group so nested @include's work.
-  \def\thisfile{#1}%
-  \let\value=\expandablevalue
-  \input\thisfile
-\endgroup}
+  \catcode`-=\other
+}
+
+\def\pushthisfilestack{%
+  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+  \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+  the stack of filenames is empty.}}
 
 \def\thisfile{}
 
 % @center line
 % outputs that line, centered.
 %
-\def\center{\parsearg\docenter}
-\def\docenter#1{{%
-  \ifhmode \hfil\break \fi
-  \advance\hsize by -\leftskip
-  \advance\hsize by -\rightskip
-  \line{\hfil \ignorespaces#1\unskip \hfil}%
-  \ifhmode \break \fi
-}}
+\parseargdef\center{%
+  \ifhmode
+    \let\next\centerH
+  \else
+    \let\next\centerV
+  \fi
+  \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+  {%
+    \hfil\break
+    \advance\hsize by -\leftskip
+    \advance\hsize by -\rightskip
+    \line{#1}%
+    \break
+  }%
+}
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
 
 % @sp n   outputs n lines of vertical space
 
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
+\parseargdef\sp{\vskip #1\baselineskip}
 
 % @comment ...line which is ignored...
 % @c is the same as @comment
@@ -843,13 +929,13 @@ where each line of input produces a line of output.}
 
 % @paragraphindent NCHARS
 % We'll use ems for NCHARS, close enough.
-% We cannot implement @paragraphindent asis, though.
-% 
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
 \def\asisword{asis} % no translation, these are keywords
 \def\noneword{none}
 %
-\def\paragraphindent{\parsearg\doparagraphindent}
-\def\doparagraphindent#1{%
+\parseargdef\paragraphindent{%
   \def\temp{#1}%
   \ifx\temp\asisword
   \else
@@ -866,8 +952,7 @@ where each line of input produces a line of output.}
 % We'll use ems for NCHARS like @paragraphindent.
 % It seems @exampleindent asis isn't necessary, but
 % I preserve it to make it similar to @paragraphindent.
-\def\exampleindent{\parsearg\doexampleindent}
-\def\doexampleindent#1{%
+\parseargdef\exampleindent{%
   \def\temp{#1}%
   \ifx\temp\asisword
   \else
@@ -879,48 +964,97 @@ where each line of input produces a line of output.}
   \fi
 }
 
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading.  If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\noneword
+    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+  \else\ifx\temp\insertword
+    \let\suppressfirstparagraphindent = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @firstparagraphindent option `\temp'}%
+  \fi\fi
+}
+
+% Here is how we actually suppress indentation.  Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+  \gdef\indent{%
+    \restorefirstparagraphindent
+    \indent
+  }%
+  \gdef\noindent{%
+    \restorefirstparagraphindent
+    \noindent
+  }%
+  \global\everypar = {%
+    \kern -\parindent
+    \restorefirstparagraphindent
+  }%
+}
+
+\gdef\restorefirstparagraphindent{%
+  \global \let \indent = \ptexindent
+  \global \let \noindent = \ptexnoindent
+  \global \everypar = {}%
+}
+
+
 % @asis just yields its argument.  Used with @table, for example.
 %
 \def\asis#1{#1}
 
 % @math outputs its argument in math mode.
-% We don't use $'s directly in the definition of \math because we need
-% to set catcodes according to plain TeX first, to allow for subscripts,
-% superscripts, special math chars, etc.
-% 
-\let\implicitmath = $%$ font-lock fix
 %
 % One complication: _ usually means subscripts, but it could also mean
 % an actual _ character, as in @math{@var{some_variable} + 1}.  So make
-% _ within @math be active (mathcode "8000), and distinguish by seeing
-% if the current family is \slfam, which is what @var uses.
-% 
-{\catcode\underChar = \active
-\gdef\mathunderscore{%
-  \catcode\underChar=\active
-  \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-}}
-%
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+  \catcode\underChar = \active
+  \gdef\mathunderscore{%
+    \catcode\underChar=\active
+    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+  }
+}
 % Another complication: we want \\ (and @\) to output a \ character.
 % FYI, plain.tex uses \\ as a temporary control sequence (why?), but
 % this is not advertised and we don't care.  Texinfo does not
 % otherwise define @\.
-% 
+%
 % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
 \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
 %
 \def\math{%
   \tex
-  \mathcode`\_="8000 \mathunderscore
+  \mathunderscore
   \let\\ = \mathbackslash
   \mathactive
-  \implicitmath\finishmath}
-\def\finishmath#1{#1\implicitmath\Etex}
+  $\finishmath
+}
+\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
 
 % Some active characters (such as <) are spaced differently in math.
-% We have to reset their definitions in case the @math was an
-% argument to a command which set the catcodes (such as @item or @section).
-% 
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
 {
   \catcode`^ = \active
   \catcode`< = \active
@@ -935,8 +1069,33 @@ where each line of input produces a line of output.}
 }
 
 % @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{%
+  \leavevmode
+  \hbox to 1.5em{%
+    \hskip 0pt plus 0.25fil
+    .\hfil.\hfil.%
+    \hskip 0pt plus 0.5fil
+  }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+  \dots
+  \spacefactor=3000
+}
+
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+% 
+\let\comma = ,
 
 % @refill is a no-op.
 \let\refill=\relax
@@ -952,20 +1111,20 @@ where each line of input produces a line of output.}
 % So open here the files we need to have open while reading the input.
 % This makes it possible to make a .fmt file for texinfo.
 \def\setfilename{%
+   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
    \iflinks
-     \readauxfile
+     \tryauxfile
+     % Open the new aux file.  TeX will close it automatically at exit.
+     \immediate\openout\auxfile=\jobname.aux
    \fi % \openindices needs to do some work in any case.
    \openindices
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+   \let\setfilename=\comment % Ignore extra @setfilename cmds.
    %
    % If texinfo.cnf is present on the system, read it.
    % Useful for site-wide @afourpaper, etc.
-   % Just to be on the safe side, close the input stream before the \input.
    \openin 1 texinfo.cnf
-   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-   \closein1
-   \temp
+   \ifeof 1 \else \input texinfo.cnf \fi
+   \closein 1
    %
    \comment % Ignore the actual filename.
 }
@@ -1012,6 +1171,7 @@ where each line of input produces a line of output.}
   \pdftrue
   \pdfoutput = 1
   \input pdfcolor
+  \pdfcatalog{/PageMode /UseOutlines}%
   \def\dopdfimage#1#2#3{%
     \def\imagewidth{#2}%
     \def\imageheight{#3}%
@@ -1032,7 +1192,13 @@ where each line of input produces a line of output.}
     \ifnum\pdftexversion < 14 \else
       \pdfrefximage \pdflastximage
     \fi}
-  \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
+  \def\pdfmkdest#1{{%
+    % We have to set dummies so commands such as @code in a section title
+    % aren't expanded.
+    \atdummies
+    \normalturnoffactive
+    \pdfdest name{#1} xyz%
+  }}
   \def\pdfmkpgn#1{#1}
   \let\linkcolor = \Blue  % was Cyan, but that seems light?
   \def\endlink{\Black\pdfendlink}
@@ -1041,48 +1207,94 @@ where each line of input produces a line of output.}
   \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
     \else \csname#1\endcsname \fi}
   \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
-    \advance\tempnum by1
+    \advance\tempnum by 1
     \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-  \def\pdfmakeoutlines{{%
-    \openin 1 \jobname.toc
-    \ifeof 1\else\begingroup
-      \closein 1 
-      % Thanh's hack / proper braces in bookmarks  
+  %
+  % #1 is the section text.  #2 is the pdf expression for the number
+  % of subentries (or empty, for subsubsections).  #3 is the node
+  % text, which might be empty if this toc entry had no
+  % corresponding node.  #4 is the page number.
+  % 
+  \def\dopdfoutline#1#2#3#4{%
+    % Generate a link to the node text if that exists; else, use the
+    % page number.  We could generate a destination for the section
+    % text in the case where a section has no node, but it doesn't
+    % seem worthwhile, since most documents are normally structured.
+    \def\pdfoutlinedest{#3}%
+    \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi
+    %
+    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}%
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      % Thanh's hack / proper braces in bookmarks
       \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
       \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
       %
-      \def\chapentry ##1##2##3{}
-      \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
-      \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
-      \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
-      \let\appendixentry = \chapentry
-      \let\unnumbchapentry = \chapentry
-      \let\unnumbsecentry = \secentry
-      \let\unnumbsubsecentry = \subsecentry
-      \let\unnumbsubsubsecentry = \subsubsecentry
+      % Read toc silently, to get counts of subentries for \pdfoutline.
+      \def\numchapentry##1##2##3##4{%
+       \def\thischapnum{##2}%
+       \let\thissecnum\empty
+       \let\thissubsecnum\empty
+      }%
+      \def\numsecentry##1##2##3##4{%
+       \advancenumber{chap\thischapnum}%
+       \def\thissecnum{##2}%
+       \let\thissubsecnum\empty
+      }%
+      \def\numsubsecentry##1##2##3##4{%
+       \advancenumber{sec\thissecnum}%
+       \def\thissubsecnum{##2}%
+      }%
+      \def\numsubsubsecentry##1##2##3##4{%
+       \advancenumber{subsec\thissubsecnum}%
+      }%
+      \let\thischapnum\empty
+      \let\thissecnum\empty
+      \let\thissubsecnum\empty
+      %
+      % use \def rather than \let here because we redefine \chapentry et
+      % al. a second time, below.
+      \def\appentry{\numchapentry}%
+      \def\appsecentry{\numsecentry}%
+      \def\appsubsecentry{\numsubsecentry}%
+      \def\appsubsubsecentry{\numsubsubsecentry}%
+      \def\unnchapentry{\numchapentry}%
+      \def\unnsecentry{\numsecentry}%
+      \def\unnsubsecentry{\numsubsecentry}%
+      \def\unnsubsubsecentry{\numsubsubsecentry}%
       \input \jobname.toc
-      \def\chapentry ##1##2##3{%
-        \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
-      \def\secentry ##1##2##3##4{%
-        \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
-      \def\subsecentry ##1##2##3##4##5{%
-        \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
-      \def\subsubsecentry ##1##2##3##4##5##6{%
-        \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
-      \let\appendixentry = \chapentry
-      \let\unnumbchapentry = \chapentry
-      \let\unnumbsecentry = \secentry
-      \let\unnumbsubsecentry = \subsecentry
-      \let\unnumbsubsubsecentry = \subsubsecentry
       %
-      % Make special characters normal for writing to the pdf file.
+      % Read toc second time, this time actually producing the outlines.
+      % The `-' means take the \expnumber as the absolute number of
+      % subentries, which we calculated on our first read of the .toc above.
+      % 
+      % We use the node names as the destinations.
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{% count is always zero
+        \dopdfoutline{##1}{}{##3}{##4}}%
+      %
+      % PDF outlines are displayed using system fonts, instead of
+      % document fonts.  Therefore we cannot use special characters,
+      % since the encoding is unknown.  For example, the eogonek from
+      % Latin 2 (0xea) gets translated to a | character.  Info from
+      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
       % 
+      % xx to do this right, we have to translate 8-bit characters to
+      % their "best" equivalent, based on the @documentencoding.  Right
+      % now, I guess we'll just let the pdf reader have its way.
       \indexnofonts
-      \let\tt=\relax
       \turnoffactive
       \input \jobname.toc
-    \endgroup\fi
-  }}
+    \endgroup
+  }
+  %
   \def\makelinks #1,{%
     \def\params{#1}\def\E{END}%
     \ifx\params\E
@@ -1091,7 +1303,7 @@ where each line of input produces a line of output.}
       \let\nextmakelinks=\makelinks
       \ifnum\lnkcount>0,\fi
       \picknum{#1}%
-      \startlink attr{/Border [0 0 0]} 
+      \startlink attr{/Border [0 0 0]}
         goto name{\pdfmkpgn{\the\pgn}}%
       \linkcolor #1%
       \advance\lnkcount by 1%
@@ -1113,7 +1325,6 @@ where each line of input produces a line of output.}
   \def\ppn#1{\pgn=#1\gobble}
   \def\ppnn{\pgn=\first}
   \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
-  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
   \def\skipspaces#1{\def\PP{#1}\def\D{|}%
     \ifx\PP\D\let\nextsp\relax
     \else\let\nextsp\skipspaces
@@ -1131,22 +1342,21 @@ where each line of input produces a line of output.}
   \def\pdfurl#1{%
     \begingroup
       \normalturnoffactive\def\@{@}%
-      \let\value=\expandablevalue
+      \makevalueexpandable
       \leavevmode\Red
       \startlink attr{/Border [0 0 0]}%
         user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
-        % #1
     \endgroup}
   \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
   \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
   \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
   \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
   \def\maketoks{%
-    \expandafter\poptoks\the\toksA|ENDTOKS|
+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
     \ifx\first0\adn0
     \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
     \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
     \else
       \ifnum0=\countA\else\makelink\fi
       \ifx\first.\let\next=\done\else
@@ -1166,16 +1376,34 @@ where each line of input produces a line of output.}
 
 
 \message{fonts,}
-% Font-change commands.
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+% 
+\def\setfontstyle#1{%
+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+  \csname ten#1\endcsname  % change the current font
+}
+
+% Select #1 fonts with the current style.
+% 
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
 
 % Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
+% So we set up a \sf.
 \newfam\sffam
-\def\sf{\fam=\sffam \tensf}
+\def\sf{\fam=\sffam \setfontstyle{sf}}
 \let\li = \sf % Sometimes we call it \li, not \sf.
 
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
 
 % Default leading.
 \newdimen\textleading  \textleading = 13.2pt
@@ -1226,6 +1454,7 @@ where each line of input produces a line of output.}
 \def\scshape{csc}
 \def\scbshape{csc}
 
+% Text fonts (11.2pt, magstep1).
 \newcount\mainmagstep
 \ifx\bigger\relax
   % not really supported.
@@ -1237,10 +1466,6 @@ where each line of input produces a line of output.}
   \setfont\textrm\rmshape{10}{\mainmagstep}
   \setfont\texttt\ttshape{10}{\mainmagstep}
 \fi
-% Instead of cmb10, you may want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10
-% (in Bob's opinion).
 \setfont\textbf\bfshape{10}{\mainmagstep}
 \setfont\textit\itshape{10}{\mainmagstep}
 \setfont\textsl\slshape{10}{\mainmagstep}
@@ -1250,10 +1475,11 @@ where each line of input produces a line of output.}
 \font\texti=cmmi10 scaled \mainmagstep
 \font\textsy=cmsy10 scaled \mainmagstep
 
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}
 \setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+\setfont\defttsl\ttslshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
 
 % Fonts for indices, footnotes, small examples (9pt).
 \setfont\smallrm\rmshape{9}{1000}
@@ -1279,7 +1505,7 @@ where each line of input produces a line of output.}
 \font\smalleri=cmmi8
 \font\smallersy=cmsy8
 
-% Fonts for title page:
+% Fonts for title page (20.4pt):
 \setfont\titlerm\rmbshape{12}{\magstep3}
 \setfont\titleit\itbshape{10}{\magstep4}
 \setfont\titlesl\slbshape{10}{\magstep4}
@@ -1325,11 +1551,21 @@ where each line of input produces a line of output.}
 \setfont\ssecttsl\ttslshape{10}{1315}
 \setfont\ssecsf\sfbshape{12}{\magstephalf}
 \let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
+\setfont\ssecsc\scbshape{10}{1315}
 \font\sseci=cmmi12 scaled \magstephalf
 \font\ssecsy=cmsy10 scaled 1315
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
+
+% Reduced fonts for @acro in text (10pt).
+\setfont\reducedrm\rmshape{10}{1000}
+\setfont\reducedtt\ttshape{10}{1000}
+\setfont\reducedbf\bfshape{10}{1000}
+\setfont\reducedit\itshape{10}{1000}
+\setfont\reducedsl\slshape{10}{1000}
+\setfont\reducedsf\sfshape{10}{1000}
+\setfont\reducedsc\scshape{10}{1000}
+\setfont\reducedttsl\ttslshape{10}{1000}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
 
 % In order for the font changes to affect most math symbols and letters,
 % we have to define the \textfont of the standard families.  Since
@@ -1344,50 +1580,72 @@ where each line of input produces a line of output.}
 }
 
 % The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example.  By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
+% of just \STYLE.  We do this because \STYLE needs to also set the
+% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+% 
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower).  These relative commands are used in
+% the LaTeX logo and acronyms.
+% 
+% This all needs generalizing, badly.
+% 
 \def\textfonts{%
   \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
   \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+  \let\tenttsl=\textttsl
+  \def\lsize{reduced}\def\lllsize{smaller}%
   \resetmathfonts \setleading{\textleading}}
 \def\titlefonts{%
   \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
   \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
   \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
   \let\tenttsl=\titlettsl
+  \def\lsize{chap}\def\lllsize{subsec}%
   \resetmathfonts \setleading{25pt}}
 \def\titlefont#1{{\titlefonts\rm #1}}
 \def\chapfonts{%
   \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
   \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
   \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+  \def\lsize{sec}\def\lllsize{text}%
   \resetmathfonts \setleading{19pt}}
 \def\secfonts{%
   \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
   \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+  \let\tenttsl=\secttsl
+  \def\lsize{subsec}\def\lllsize{reduced}%
   \resetmathfonts \setleading{16pt}}
 \def\subsecfonts{%
   \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
   \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+  \let\tenttsl=\ssecttsl
+  \def\lsize{text}\def\lllsize{small}%
   \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+  \let\tenttsl=\reducedttsl
+  \def\lsize{small}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
 \def\smallfonts{%
   \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
   \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
   \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
   \let\tenttsl=\smallttsl
+  \def\lsize{smaller}\def\lllsize{smaller}%
   \resetmathfonts \setleading{10.5pt}}
 \def\smallerfonts{%
   \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
   \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
   \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
   \let\tenttsl=\smallerttsl
+  \def\lsize{smaller}\def\lllsize{smaller}%
   \resetmathfonts \setleading{9.5pt}}
 
 % Set the fonts to use with the @small... environments.
@@ -1396,22 +1654,21 @@ where each line of input produces a line of output.}
 % About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
 % can fit this many characters:
 %   8.5x11=86   smallbook=72  a4=90  a5=69
-% If we use \smallerfonts (8pt), then we can fit this many characters:
+% If we use \scriptfonts (8pt), then we can fit this many characters:
 %   8.5x11=90+  smallbook=80  a4=90+  a5=77
 % For me, subjectively, the few extra characters that fit aren't worth
 % the additional smallness of 8pt.  So I'm making the default 9pt.
-% 
+%
 % By the way, for comparison, here's what fits with @example (10pt):
 %   8.5x11=71  smallbook=60  a4=75  a5=58
-% 
-% I wish we used A4 paper on this side of the Atlantic.
-% 
+%
+% I wish the USA used A4 paper.
 % --karl, 24jan03.
 
 
 % Set up the default fonts, so we can use them for creating boxes.
 %
-\textfonts
+\textfonts \rm
 
 % Define these so they can be easily changed for other fonts.
 \def\angleleft{$\langle$}
@@ -1422,7 +1679,7 @@ where each line of input produces a line of output.}
 
 % Fonts for short table of contents.
 \setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
+\setfont\shortcontbf\bfshape{10}{\magstep1}  % no cmb12
 \setfont\shortcontsl\slshape{12}{1000}
 \setfont\shortconttt\ttshape{12}{1000}
 
@@ -1431,15 +1688,23 @@ where each line of input produces a line of output.}
 
 % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
 % unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+                    \ptexslash\fi\fi\fi}
 \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
 \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
 
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally use \sl.  We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+
 \let\i=\smartitalic
 \let\var=\smartslanted
 \let\dfn=\smartslanted
 \let\emph=\smartitalic
-\let\cite=\smartslanted
 
 \def\b#1{{\bf #1}}
 \let\strong=\b
@@ -1454,7 +1719,7 @@ where each line of input produces a line of output.}
 % Set sfcode to normal for the chars that usually have another value.
 % Can't use plain's \frenchspacing because it uses the `\x notation, and
 % sometimes \x has an active definition that messes things up.
-% 
+%
 \catcode`@=11
   \def\frenchspacing{%
     \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
@@ -1466,7 +1731,6 @@ where each line of input produces a line of output.}
   {\tt \rawbackslash \frenchspacing #1}%
   \null
 }
-\let\ttfont=\t
 \def\samp#1{`\tclose{#1}'\null}
 \setfont\keyrm\rmshape{8}{1000}
 \font\keysy=cmsy9
@@ -1507,7 +1771,7 @@ where each line of input produces a line of output.}
   \null
 }
 
-% We *must* turn on hyphenation at `-' and `_' in \code.
+% We *must* turn on hyphenation at `-' and `_' in @code.
 % Otherwise, it is too hard to avoid overfull hboxes
 % in the Emacs manual, the Library manual, etc.
 
@@ -1525,10 +1789,6 @@ where each line of input produces a line of output.}
     \catcode`\_=\active \let_\codeunder
     \codex
   }
-  %
-  % If we end up with any active - characters when handling the index,
-  % just treat them as a normal -.
-  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
 }
 
 \def\realdash{-}
@@ -1552,8 +1812,7 @@ where each line of input produces a line of output.}
 % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
 %   `example' (@kbd uses ttsl only inside of @example and friends),
 %   or `code' (@kbd uses normal tty font always).
-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
-\def\kbdinputstylexxx#1{%
+\parseargdef\kbdinputstyle{%
   \def\arg{#1}%
   \ifx\arg\worddistinct
     \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
@@ -1563,7 +1822,7 @@ where each line of input produces a line of output.}
     \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
   \else
     \errhelp = \EMsimple
-    \errmessage{Unknown @kbdinputstyle `\arg'}%
+    \errmessage{Unknown @kbdinputstyle option `\arg'}%
   \fi\fi\fi
 }
 \def\worddistinct{distinct}
@@ -1614,7 +1873,7 @@ where each line of input produces a line of output.}
 
 % rms does not like angle brackets --karl, 17may97.
 % So now @email is just like @uref, unless we are pdf.
-% 
+%
 %\def\email#1{\angleleft{\tt #1}\angleright}
 \ifpdf
   \def\email#1{\doemail#1,,\finish}
@@ -1653,12 +1912,29 @@ where each line of input produces a line of output.}
 \def\sc#1{{\smallcaps#1}}       % smallcaps font
 \def\ii#1{{\it #1}}             % italic font
 
-% @acronym downcases the argument and prints in smallcaps.
-\def\acronym#1{{\smallcaps \lowercase{#1}}}
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+  {\selectfonts\lsize #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
 
-% @pounds{} is a sterling sign.
+% @pounds{} is a sterling sign, which is in the CM italic font.
+% 
 \def\pounds{{\it\$}}
 
+% @registeredsymbol - R in a circle.  The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+               \hfil\crcr\Orb}}%
+    }$%
+}
+
 
 \message{page headings,}
 
@@ -1677,87 +1953,103 @@ where each line of input produces a line of output.}
 \newif\ifsetshortcontentsaftertitlepage
  \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
 
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
         \endgroup\page\hbox{}\page}
 
-\def\titlepage{\begingroup \parindent=0pt \textfonts
-   \let\subtitlerm=\tenrm
-   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
-   %
-   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
-                   \let\tt=\authortt}%
-   %
-   % Leave some space at the very top of the page.
-   \vglue\titlepagetopglue
-   %
-   % Now you can print the title using @title.
-   \def\title{\parsearg\titlezzz}%
-   \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
-                    % print a rule at the page bottom also.
-                    \finishedtitlepagefalse
-                    \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
-   % No rule at page bottom unless we print one at the top with @title.
-   \finishedtitlepagetrue
-   %
-   % Now you can put text using @subtitle.
-   \def\subtitle{\parsearg\subtitlezzz}%
-   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
-   %
-   % @author should come last, but may come many times.
-   \def\author{\parsearg\authorzzz}%
-   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
-      {\authorfont \leftline{##1}}}%
-   %
-   % Most title ``pages'' are actually two pages long, with space
-   % at the top of the second.  We don't want the ragged left on the second.
-   \let\oldpage = \page
-   \def\page{%
+\envdef\titlepage{%
+  % Open one extra group, as we want to close it in the middle of \Etitlepage.
+  \begingroup
+    \parindent=0pt \textfonts
+    % Leave some space at the very top of the page.
+    \vglue\titlepagetopglue
+    % No rule at page bottom unless we print one at the top with @title.
+    \finishedtitlepagetrue
+    %
+    % Most title ``pages'' are actually two pages long, with space
+    % at the top of the second.  We don't want the ragged left on the second.
+    \let\oldpage = \page
+    \def\page{%
       \iffinishedtitlepage\else
-         \finishtitlepage
+        \finishtitlepage
       \fi
-      \oldpage
       \let\page = \oldpage
-      \hbox{}}%
-%   \def\page{\oldpage \hbox{}}
+      \page
+      \null
+    }%
 }
 
 \def\Etitlepage{%
-   \iffinishedtitlepage\else
-      \finishtitlepage
-   \fi
-   % It is important to do the page break before ending the group,
-   % because the headline and footline are only empty inside the group.
-   % If we use the new definition of \page, we always get a blank page
-   % after the title page, which we certainly don't want.
-   \oldpage
-   \endgroup
-   %
-   % Need this before the \...aftertitlepage checks so that if they are
-   % in effect the toc pages will come out with page numbers.
-   \HEADINGSon
-   %
-   % If they want short, they certainly want long too.
-   \ifsetshortcontentsaftertitlepage
-     \shortcontents
-     \contents
-     \global\let\shortcontents = \relax
-     \global\let\contents = \relax
-   \fi
-   %
-   \ifsetcontentsaftertitlepage
-     \contents
-     \global\let\contents = \relax
-     \global\let\shortcontents = \relax
-   \fi
+    \iffinishedtitlepage\else
+       \finishtitlepage
+    \fi
+    % It is important to do the page break before ending the group,
+    % because the headline and footline are only empty inside the group.
+    % If we use the new definition of \page, we always get a blank page
+    % after the title page, which we certainly don't want.
+    \oldpage
+  \endgroup
+  %
+  % Need this before the \...aftertitlepage checks so that if they are
+  % in effect the toc pages will come out with page numbers.
+  \HEADINGSon
+  %
+  % If they want short, they certainly want long too.
+  \ifsetshortcontentsaftertitlepage
+    \shortcontents
+    \contents
+    \global\let\shortcontents = \relax
+    \global\let\contents = \relax
+  \fi
+  %
+  \ifsetcontentsaftertitlepage
+    \contents
+    \global\let\contents = \relax
+    \global\let\shortcontents = \relax
+  \fi
 }
 
 \def\finishtitlepage{%
-   \vskip4pt \hrule height 2pt width \hsize
-   \vskip\titlepagebottomglue
-   \finishedtitlepagetrue
+  \vskip4pt \hrule height 2pt width \hsize
+  \vskip\titlepagebottomglue
+  \finishedtitlepagetrue
+}
+
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+               \let\tt=\authortt}
+
+\parseargdef\title{%
+  \checkenv\titlepage
+  \leftline{\titlefonts\rm #1}
+  % print a rule at the page bottom also.
+  \finishedtitlepagefalse
+  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+  \checkenv\titlepage
+  {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+% 
+\parseargdef\author{%
+  \def\temp{\quotation}%
+  \ifx\thisenv\temp
+    \def\quotationauthor{#1}% printed in \Equotation.
+  \else
+    \checkenv\titlepage
+    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+    {\authorfont \leftline{#1}}%
+  \fi
 }
 
+
 %%% Set up page headings and footings.
 
 \let\thispage=\folio
@@ -1767,7 +2059,7 @@ where each line of input produces a line of output.}
 \newtoks\evenfootline    % footline on even pages
 \newtoks\oddfootline     % footline on odd pages
 
-% Now make Tex use those variables
+% Now make TeX use those variables
 \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
                             \else \the\evenheadline \fi}}
 \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
@@ -1781,32 +2073,27 @@ where each line of input produces a line of output.}
 % @evenfooting @thisfile||
 % @oddfooting ||@thisfile
 
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
 
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
 \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
 \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
 
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
 \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
   \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
   %
   % Leave some space for the footline.  Hopefully ok to assume
@@ -1815,9 +2102,8 @@ where each line of input produces a line of output.}
   \global\advance\vsize by -\baselineskip
 }
 
-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-%
-}% unbind the catcode of @.
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
 
 % @headings double      turns headings on for double-sided printing.
 % @headings single      turns headings on for single-sided printing.
@@ -1831,7 +2117,7 @@ where each line of input produces a line of output.}
 
 \def\headings #1 {\csname HEADINGS#1\endcsname}
 
-\def\HEADINGSoff{
+\def\HEADINGSoff{%
 \global\evenheadline={\hfil} \global\evenfootline={\hfil}
 \global\oddheadline={\hfil} \global\oddfootline={\hfil}}
 \HEADINGSoff
@@ -1840,7 +2126,7 @@ where each line of input produces a line of output.}
 % chapter name on inside top of right hand pages, document
 % title on inside top of left hand pages, and page numbers on outside top
 % edge of all pages.
-\def\HEADINGSdouble{
+\def\HEADINGSdouble{%
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
@@ -1852,7 +2138,7 @@ where each line of input produces a line of output.}
 
 % For single-sided printing, chapter title goes across top left of page,
 % page number on top right.
-\def\HEADINGSsingle{
+\def\HEADINGSsingle{%
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
@@ -1899,12 +2185,11 @@ where each line of input produces a line of output.}
 % @settitle line...  specifies the title of the document, for headings.
 % It generates no output of its own.
 \def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
+\def\settitle{\parsearg{\gdef\thistitle}}
 
 
 \message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+% Tables -- @table, @ftable, @vtable, @item(x).
 
 % default indentation of table text
 \newdimen\tableindent \tableindent=.8in
@@ -1916,7 +2201,7 @@ where each line of input produces a line of output.}
 % used internally for \itemindent minus \itemmargin
 \newdimen\itemmax
 
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
 % these defs.
 % They also define \itemindex
 % to index the item name in whatever manner is desired (perhaps none).
@@ -1928,22 +2213,10 @@ where each line of input produces a line of output.}
 \def\internalBitem{\smallbreak \parsearg\itemzzz}
 \def\internalBitemx{\itemxpar \parsearg\itemzzz}
 
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
-                 \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
-                 \itemzzz {#1}}
-
 \def\itemzzz #1{\begingroup %
   \advance\hsize by -\rightskip
   \advance\hsize by -\tableindent
-  \setbox0=\hbox{\itemfont{#1}}%
+  \setbox0=\hbox{\itemindicate{#1}}%
   \itemindex{#1}%
   \nobreak % This prevents a break before @itemx.
   %
@@ -1997,92 +2270,95 @@ where each line of input produces a line of output.}
   \fi
 }
 
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-% Contains a kludge to get @end[description] to work.
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
 
 % @table, @ftable, @vtable.
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1        \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1        \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1        \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
+\envdef\table{%
+  \let\itemindex\gobble
+  \tablex
+}
+\envdef\ftable{%
+  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+  \tablex
+}
+\envdef\vtable{%
+  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+  \tablex
 }
+\def\tablex#1{%
+  \def\itemindicate{#1}%
+  \parsearg\tabley
+}
+\def\tabley#1{%
+  {%
+    \makevalueexpandable
+    \edef\temp{\noexpand\tablez #1\space\space\space}%
+    \expandafter
+  }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+  \aboveenvbreak
+  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+  \ifnum 0#2>0 \tableindent=#2\mil \fi
+  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+  \itemmax=\tableindent
+  \advance \itemmax by -\itemmargin
+  \advance \leftskip by \tableindent
+  \exdentamount=\tableindent
+  \parindent = 0pt
+  \parskip = \smallskipamount
+  \ifdim \parskip=0pt \parskip=2pt \fi
+  \let\item = \internalBitem
+  \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
 
 % This is the counter used by @enumerate, which is really @itemize
 
 \newcount \itemno
 
-\def\itemize{\parsearg\itemizezzz}
+\envdef\itemize{\parsearg\doitemize}
 
-\def\itemizezzz #1{%
-  \begingroup % ended by the @end itemize
-  \itemizey {#1}{\Eitemize}
+\def\doitemize#1{%
+  \aboveenvbreak
+  \itemmax=\itemindent
+  \advance\itemmax by -\itemmargin
+  \advance\leftskip by \itemindent
+  \exdentamount=\itemindent
+  \parindent=0pt
+  \parskip=\smallskipamount
+  \ifdim\parskip=0pt \parskip=2pt \fi
+  \def\itemcontents{#1}%
+  % @itemize with no arg is equivalent to @itemize @bullet.
+  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+  \let\item=\itemizeitem
 }
 
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\exdentamount=\itemindent
-\parindent = 0pt %
-\parskip = \smallskipamount %
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\afterenvbreak\endgroup}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+  \advance\itemno by 1  % for enumerations
+  {\let\par=\endgraf \smallbreak}% reasonable place to break
+  {%
+   % If the document has an @itemize directly after a section title, a
+   % \nobreak will be last on the list, and \sectionheading will have
+   % done a \vskip-\parskip.  In that case, we don't want to zero
+   % parskip, or the item text will crash with the heading.  On the
+   % other hand, when there is normal text preceding the item (as there
+   % usually is), we do want to zero parskip, or there would be too much
+   % space.  In that case, we won't have a \nobreak before.  At least
+   % that's the theory.
+   \ifnum\lastpenalty<10000 \parskip=0in \fi
+   \noindent
+   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+   \vadjust{\penalty 1200}}% not good to break after first line of item.
+  \flushcr
+}
 
 % \splitoff TOKENS\endmark defines \first to be the first token in
 % TOKENS, and \rest to be the remainder.
@@ -2093,11 +2369,8 @@ where each line of input produces a line of output.}
 % or number, to specify the first label in the enumerated list.  No
 % argument is the same as `1'.
 %
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
+\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
 \def\enumeratey #1 #2\endenumeratey{%
-  \begingroup % ended by the @end enumerate
-  %
   % If we were given no argument, pretend we were given `1'.
   \def\thearg{#1}%
   \ifx\thearg\empty \def\thearg{1}\fi
@@ -2168,13 +2441,13 @@ where each line of input produces a line of output.}
   }%
 }
 
-% Call itemizey, adding a period to the first argument and supplying the
+% Call \doitemize, adding a period to the first argument and supplying the
 % common last two arguments.  Also subtract one from the initial value in
 % \itemno, since @item increments \itemno.
 %
 \def\startenumeration#1{%
   \advance\itemno by -1
-  \itemizey{#1.}\Eenumerate\flushcr
+  \doitemize{#1.}\flushcr
 }
 
 % @alphaenumerate and @capsenumerate are abbreviations for giving an arg
@@ -2185,16 +2458,6 @@ where each line of input produces a line of output.}
 \def\Ealphaenumerate{\Eenumerate}
 \def\Ecapsenumerate{\Eenumerate}
 
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{In hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
 
 % @multitable macros
 % Amy Hendrickson, 8/18/94, 3/6/96
@@ -2221,24 +2484,14 @@ where each line of input produces a line of output.}
 %   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
 %   @item ...
 %   using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-%     @multitable {Column 1 template} {Column 2 template} {Column 3
-%      template}
-% Not:
-%     @multitable {Column 1 template} {Column 2 template}
-%      {Column 3 template}
 
 % Each new table line starts with @item, each subsequent new column
 % starts with @tab. Empty columns may be produced by supplying @tab's
 % with nothing between them for as many times as empty columns are needed,
 % ie, @tab@tab@tab will produce two empty columns.
 
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
 
 % Sample multitable:
 
@@ -2282,13 +2535,12 @@ where each line of input produces a line of output.}
 \def\xcolumnfractions{\columnfractions}
 \newif\ifsetpercent
 
-% #1 is the part of the @columnfraction before the decimal point, which
-% is presumably either 0 or the empty string (but we don't check, we
-% just throw it away).  #2 is the decimal part, which we use as the
-% percent of \hsize for this column.
-\def\pickupwholefraction#1.#2 {%
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1.  We just use it, whatever it is.
+% 
+\def\pickupwholefraction#1 {%
   \global\advance\colcount by 1
-  \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
+  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
   \setuptable
 }
 
@@ -2321,18 +2573,30 @@ where each line of input produces a line of output.}
   \go
 }
 
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry.  Note that \everycr resets \everytab.
+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
+%
+% A \tab used to include \hskip1sp.  But then the space in a template
+% line is not enough.  That is bad.  So let's go back to just `&' until
+% we encounter the problem it was intended to solve again.
+%                                      --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
 % @multitable ... @end multitable definitions:
 %
-\def\multitable{\parsearg\dotable}
-\def\dotable#1{\bgroup
+\newtoks\everytab  % insert after every tab.
+%
+\envdef\multitable{%
   \vskip\parskip
-  \let\item=\crcrwithfootnotes
-  % A \tab used to include \hskip1sp.  But then the space in a template
-  % line is not enough.  That is bad.  So let's go back to just & until
-  % we encounter the problem it was intended to solve again.  --karl,
-  % nathan@acm.org, 20apr99.
-  \let\tab=&%
-  \let\startfootins=\startsavedfootnote
+  \startsavinginserts
+  %
+  % @item within a multitable starts a normal row.
+  \let\item\crcr
+  %
   \tolerance=9500
   \hbadness=9500
   \setmultitablespacing
@@ -2340,70 +2604,80 @@ where each line of input produces a line of output.}
   \parindent=\multitableparindent
   \overfullrule=0pt
   \global\colcount=0
-  \def\Emultitable{%
-    \global\setpercentfalse
-    \crcrwithfootnotes\crcr
-    \egroup\egroup
+  %
+  \everycr = {%
+    \noalign{%
+      \global\everytab={}%
+      \global\colcount=0 % Reset the column counter.
+      % Check for saved footnotes, etc.
+      \checkinserts
+      % Keeps underfull box messages off when table breaks over pages.
+      %\filbreak
+       % Maybe so, but it also creates really weird page breaks when the
+       % table breaks over pages. Wouldn't \vfil be better?  Wait until the
+       % problem manifests itself, so it can be fixed for real --karl.
+    }%
   }%
   %
+  \parsearg\domultitable
+}
+\def\domultitable#1{%
   % To parse everything between @multitable and @item:
   \setuptable#1 \endsetuptable
   %
-  % \everycr will reset column counter, \colcount, at the end of
-  % each line. Every column entry will cause \colcount to advance by one.
-  % The table preamble
-  % looks at the current \colcount to find the correct column width.
-  \everycr{\noalign{%
-  %
-  % \filbreak%% keeps underfull box messages off when table breaks over pages.
-  % Maybe so, but it also creates really weird page breaks when the table
-  % breaks over pages. Wouldn't \vfil be better?  Wait until the problem
-  % manifests itself, so it can be fixed for real --karl.
-    \global\colcount=0\relax}}%
-  %
   % This preamble sets up a generic column definition, which will
   % be used as many times as user calls for columns.
   % \vtop will set a single line and will also let text wrap and
   % continue for many paragraphs if desired.
-  \halign\bgroup&\global\advance\colcount by 1\relax
-    \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
-  %
-  % In order to keep entries from bumping into each other
-  % we will add a \leftskip of \multitablecolspace to all columns after
-  % the first one.
-  %
-  % If a template has been used, we will add \multitablecolspace
-  % to the width of each template entry.
-  %
-  % If the user has set preamble in terms of percent of \hsize we will
-  % use that dimension as the width of the column, and the \leftskip
-  % will keep entries from bumping into each other.  Table will start at
-  % left margin and final column will justify at right margin.
-  %
-  % Make sure we don't inherit \rightskip from the outer environment.
-  \rightskip=0pt
-  \ifnum\colcount=1
-    % The first column will be indented with the surrounding text.
-    \advance\hsize by\leftskip
-  \else
-    \ifsetpercent \else
-      % If user has not set preamble in terms of percent of \hsize
-      % we will advance \hsize by \multitablecolspace.
-      \advance\hsize by \multitablecolspace
-    \fi
-   % In either case we will make \leftskip=\multitablecolspace:
-  \leftskip=\multitablecolspace
-  \fi
-  % Ignoring space at the beginning and end avoids an occasional spurious
-  % blank line, when TeX decides to break the line at the space before the
-  % box from the multistrut, so the strut ends up on a line by itself.
-  % For example:
-  % @multitable @columnfractions .11 .89
-  % @item @code{#}
-  % @tab Legal holiday which is valid in major parts of the whole country.
-  % Is automatically provided with highlighting sequences respectively marking
-  % characters.
-  \noindent\ignorespaces##\unskip\multistrut}\cr
+  \halign\bgroup &%
+    \global\advance\colcount by 1
+    \multistrut
+    \vtop{%
+      % Use the current \colcount to find the correct column width:
+      \hsize=\expandafter\csname col\the\colcount\endcsname
+      %
+      % In order to keep entries from bumping into each other
+      % we will add a \leftskip of \multitablecolspace to all columns after
+      % the first one.
+      %
+      % If a template has been used, we will add \multitablecolspace
+      % to the width of each template entry.
+      %
+      % If the user has set preamble in terms of percent of \hsize we will
+      % use that dimension as the width of the column, and the \leftskip
+      % will keep entries from bumping into each other.  Table will start at
+      % left margin and final column will justify at right margin.
+      %
+      % Make sure we don't inherit \rightskip from the outer environment.
+      \rightskip=0pt
+      \ifnum\colcount=1
+       % The first column will be indented with the surrounding text.
+       \advance\hsize by\leftskip
+      \else
+       \ifsetpercent \else
+         % If user has not set preamble in terms of percent of \hsize
+         % we will advance \hsize by \multitablecolspace.
+         \advance\hsize by \multitablecolspace
+       \fi
+       % In either case we will make \leftskip=\multitablecolspace:
+      \leftskip=\multitablecolspace
+      \fi
+      % Ignoring space at the beginning and end avoids an occasional spurious
+      % blank line, when TeX decides to break the line at the space before the
+      % box from the multistrut, so the strut ends up on a line by itself.
+      % For example:
+      % @multitable @columnfractions .11 .89
+      % @item @code{#}
+      % @tab Legal holiday which is valid in major parts of the whole country.
+      % Is automatically provided with highlighting sequences respectively
+      % marking characters.
+      \noindent\ignorespaces##\unskip\multistrut
+    }\cr
+}
+\def\Emultitable{%
+  \crcr
+  \egroup % end the \halign
+  \global\setpercentfalse
 }
 
 \def\setmultitablespacing{% test to see if user has set \multitablelinespace.
@@ -2433,163 +2707,33 @@ width0pt\relax} \fi
                                       %% than skip between lines in the table.
 \fi}
 
-% In case a @footnote appears inside an alignment, save the footnote
-% text to a box and make the \insert when a row of the table is
-% finished.  Otherwise, the insertion is lost, it never migrates to the
-% main vertical list.  --kasal, 22jan03.
-%
-\newbox\savedfootnotes
-%
-% \dotable \let's \startfootins to this, so that \dofootnote will call
-% it instead of starting the insertion right away.
-\def\startsavedfootnote{%
-  \global\setbox\savedfootnotes = \vbox\bgroup
-    \unvbox\savedfootnotes
-}
-\def\crcrwithfootnotes{%
-  \crcr
-  \ifvoid\savedfootnotes \else
-    \noalign{\insert\footins{\box\savedfootnotes}}%
-  \fi
-}
 
 \message{conditionals,}
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
-  \let\chapter=\relax
-  \let\unnumbered=\relax
-  \let\top=\relax
-  \let\unnumberedsec=\relax
-  \let\unnumberedsection=\relax
-  \let\unnumberedsubsec=\relax
-  \let\unnumberedsubsection=\relax
-  \let\unnumberedsubsubsec=\relax
-  \let\unnumberedsubsubsection=\relax
-  \let\section=\relax
-  \let\subsec=\relax
-  \let\subsubsec=\relax
-  \let\subsection=\relax
-  \let\subsubsection=\relax
-  \let\appendix=\relax
-  \let\appendixsec=\relax
-  \let\appendixsection=\relax
-  \let\appendixsubsec=\relax
-  \let\appendixsubsection=\relax
-  \let\appendixsubsubsec=\relax
-  \let\appendixsubsubsection=\relax
-  \let\contents=\relax
-  \let\smallbook=\relax
-  \let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-% We use \empty instead of \relax for the @def... commands, so that \end
-% doesn't throw an error.  For instance:
-% @ignore
-% @deffn ...
-% @end deffn
-% @end ignore
-% 
-% The @end deffn is going to get expanded, because we're trying to allow
-% nested conditionals.  But we don't want to expand the actual @deffn,
-% since it might be syntactically correct and intended to be ignored.
-% Since \end checks for \relax, using \empty does not cause an error.
-% 
-\def\ignoremorecommands{%
-  \let\defcodeindex = \relax
-  \let\defcv = \empty
-  \let\defcvx = \empty
-  \let\Edefcv = \empty
-  \let\deffn = \empty
-  \let\deffnx = \empty
-  \let\Edeffn = \empty
-  \let\defindex = \relax
-  \let\defivar = \empty
-  \let\defivarx = \empty
-  \let\Edefivar = \empty
-  \let\defmac = \empty
-  \let\defmacx = \empty
-  \let\Edefmac = \empty
-  \let\defmethod = \empty
-  \let\defmethodx = \empty
-  \let\Edefmethod = \empty
-  \let\defop = \empty
-  \let\defopx = \empty
-  \let\Edefop = \empty
-  \let\defopt = \empty
-  \let\defoptx = \empty
-  \let\Edefopt = \empty
-  \let\defspec = \empty
-  \let\defspecx = \empty
-  \let\Edefspec = \empty
-  \let\deftp = \empty
-  \let\deftpx = \empty
-  \let\Edeftp = \empty
-  \let\deftypefn = \empty
-  \let\deftypefnx = \empty
-  \let\Edeftypefn = \empty
-  \let\deftypefun = \empty
-  \let\deftypefunx = \empty
-  \let\Edeftypefun = \empty
-  \let\deftypeivar = \empty
-  \let\deftypeivarx = \empty
-  \let\Edeftypeivar = \empty
-  \let\deftypemethod = \empty
-  \let\deftypemethodx = \empty
-  \let\Edeftypemethod = \empty
-  \let\deftypeop = \empty
-  \let\deftypeopx = \empty
-  \let\Edeftypeop = \empty
-  \let\deftypevar = \empty
-  \let\deftypevarx = \empty
-  \let\Edeftypevar = \empty
-  \let\deftypevr = \empty
-  \let\deftypevrx = \empty
-  \let\Edeftypevr = \empty
-  \let\defun = \empty
-  \let\defunx = \empty
-  \let\Edefun = \empty
-  \let\defvar = \empty
-  \let\defvarx = \empty
-  \let\Edefvar = \empty
-  \let\defvr = \empty
-  \let\defvrx = \empty
-  \let\Edefvr = \empty
-  \let\clear = \relax
-  \let\down = \relax
-  \let\evenfooting = \relax
-  \let\evenheading = \relax
-  \let\everyfooting = \relax
-  \let\everyheading = \relax
-  \let\headings = \relax
-  \let\include = \relax
-  \let\item = \relax
-  \let\lowersections = \relax
-  \let\oddfooting = \relax
-  \let\oddheading = \relax
-  \let\printindex = \relax
-  \let\pxref = \relax
-  \let\raisesections = \relax
-  \let\ref = \relax
-  \let\set = \relax
-  \let\setchapternewpage = \relax
-  \let\setchapterstyle = \relax
-  \let\settitle = \relax
-  \let\up = \relax
-  \let\verbatiminclude = \relax
-  \let\xref = \relax
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed.  They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested.  But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+  \expandafter\let\csname #1\endcsname = \relax
+  \expandafter\let\csname iscond.#1\endcsname = 1
 }
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
 
 % Ignore @ignore, @ifhtml, @ifinfo, and the like.
 %
 \def\direntry{\doignore{direntry}}
-\def\documentdescriptionword{documentdescription}
 \def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
 \def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
 \def\ifhtml{\doignore{ifhtml}}
 \def\ifinfo{\doignore{ifinfo}}
 \def\ifnottex{\doignore{ifnottex}}
@@ -2599,198 +2743,133 @@ width0pt\relax} \fi
 \def\menu{\doignore{menu}}
 \def\xml{\doignore{xml}}
 
-% @dircategory CATEGORY  -- specify a category of the dir file
-% which this file should belong to.  Ignore this in TeX.
-\let\dircategory = \comment
-
-% Ignore text until a line `@end #1'.
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
 %
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
 \def\doignore#1{\begingroup
-  % Don't complain about control sequences we have declared \outer.
-  \ignoresections
-  %
-  % Define a command to swallow text until we reach `@end #1'.
-  % This @ is a catcode 12 token (that is the normal catcode of @ in
-  % this texinfo.tex file).  We change the catcode of @ below to match.
-  \long\def\doignoretext##1@end #1{\enddoignore}%
+  % Scan in ``verbatim'' mode:
+  \catcode`\@ = \other
+  \catcode`\{ = \other
+  \catcode`\} = \other
   %
   % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \catcode\spaceChar = 10
-  %
-  % Ignore braces, too, so mismatched braces don't cause trouble.
-  \catcode`\{ = 9
-  \catcode`\} = 9
-  %
-  % We must not have @c interpreted as a control sequence.
-  \catcode`\@ = 12
+  \spaceisspace
   %
-  \def\ignoreword{#1}%
-  \ifx\ignoreword\documentdescriptionword
-    % The c kludge breaks documentdescription, since
-    % `documentdescription' contains a `c'.  Means not everything will
-    % be ignored inside @documentdescription, but oh well...
-  \else
-    % Make the letter c a comment character so that the rest of the line
-    % will be ignored. This way, the document can have (for example)
-    %   @c @end ifinfo
-    % and the @end ifinfo will be properly ignored.
-    % (We've just changed @ to catcode 12.)
-    \catcode`\c = 14
-  \fi
+  % Count number of #1's that we've seen.
+  \doignorecount = 0
   %
-  % And now expand the command defined above.
-  \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
-  \ifwarnedobs\relax\else
-  % We need to warn folks that they may have trouble with TeX 3.0.
-  % This uses \immediate\write16 rather than \message to get newlines.
-    \immediate\write16{}
-    \immediate\write16{WARNING: for users of Unix TeX 3.0!}
-    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-    \immediate\write16{If you are running another version of TeX, relax.}
-    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-    \immediate\write16{  Then upgrade your TeX installation if you can.}
-    \immediate\write16{  (See ftp://ftp.gnu.org/non-gnu/TeX.README.)}
-    \immediate\write16{If you are stuck with version 3.0, run the}
-    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
-    \immediate\write16{  to use a workaround.}
-    \immediate\write16{}
-    \global\warnedobstrue
-    \fi
+  % Swallow text until we reach the matching `@end #1'.
+  \dodoignore {#1}%
 }
 
-% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
-  \obstexwarn
-  % We must actually expand the ignored text to look for the @end
-  % command, so that nested ignore constructs work.  Thus, we put the
-  % text into a \vbox and then do nothing with the result.  To minimize
-  % the chance of memory overflow, we follow the approach outlined on
-  % page 401 of the TeXbook.
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+  \obeylines %
   %
-  \setbox0 = \vbox\bgroup
-    % Don't complain about control sequences we have declared \outer.
-    \ignoresections
-    %
-    % Define `@end #1' to end the box, which will in turn undefine the
-    % @end command again.
-    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-    %
-    % We are going to be parsing Texinfo commands.  Most cause no
-    % trouble when they are used incorrectly, but some commands do
-    % complicated argument parsing or otherwise get confused, so we
-    % undefine them.
+  \gdef\dodoignore#1{%
+    % #1 contains the string `ifinfo'.
     %
-    % We can't do anything about stray @-signs, unfortunately;
-    % they'll produce `undefined control sequence' errors.
-    \ignoremorecommands
+    % Define a command to find the next `@end #1', which must be on a line
+    % by itself.
+    \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}%
+    % And this command to find another #1 command, at the beginning of a
+    % line.  (Otherwise, we would consider a line `@c @ifset', for
+    % example, to count as an @ifset for nesting.)
+    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
     %
-    % Set the current font to be \nullfont, a TeX primitive, and define
-    % all the font commands to also use \nullfont.  We don't use
-    % dummy.tfm, as suggested in the TeXbook, because some sites
-    % might not have that installed.  Therefore, math mode will still
-    % produce output, but that should be an extremely small amount of
-    % stuff compared to the main input.
-    %
-    \nullfont
-    \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
-    \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
-    \let\tensf=\nullfont
-    % Similarly for index fonts.
-    \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
-    \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
-    \let\smallsf=\nullfont
-    % Similarly for smallexample fonts.
-    \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
-    \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
-    \let\smallersf=\nullfont
-    %
-    % Don't complain when characters are missing from the fonts.
-    \tracinglostchars = 0
-    %
-    % Don't bother to do space factor calculations.
-    \frenchspacing
-    %
-    % Don't report underfull hboxes.
-    \hbadness = 10000
-    %
-    % Do minimal line-breaking.
-    \pretolerance = 10000
-    %
-    % Do not execute instructions in @tex.
-    \def\tex{\doignore{tex}}%
-    % Do not execute macro definitions.
-    % `c' is a comment character, so the word `macro' will get cut off.
-    \def\macro{\doignore{ma}}%
+    % And now expand that command.
+    \obeylines %
+    \doignoretext ^^M%
+  }%
 }
 
+\def\doignoreyyy#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty                      % Nothing found.
+    \let\next\doignoretextzzz
+  \else                                        % Found a nested condition, ...
+    \advance\doignorecount by 1
+    \let\next\doignoretextyyy          % ..., look for another.
+    % If we're here, #1 ends with ^^M\ifinfo (for example).
+  \fi
+  \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+% 
+\def\doignoretextzzz#1{%
+  \ifnum\doignorecount = 0     % We have just found the outermost @end.
+    \let\next\enddoignore
+  \else                                % Still inside a nested condition.
+    \advance\doignorecount by -1
+    \let\next\doignoretext      % Look for the next @end.
+  \fi
+  \next
+}
+
+% Finish off ignored text.
+\def\enddoignore{\endgroup\ignorespaces}
+
+
 % @set VAR sets the variable VAR to an empty value.
 % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
 %
 % Since we want to separate VAR from REST-OF-LINE (which might be
 % empty), we can't just use \parsearg; we have to insert a space of our
 % own to delimit the rest of the line, and then take it out again if we
-% didn't need it.  Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
 %
-\def\set{\begingroup\catcode` =10
-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-  \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
+\parseargdef\set{\setyyy#1 \endsetyyy}
 \def\setyyy#1 #2\endsetyyy{%
-  \def\temp{#2}%
-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-  \fi
-  \endgroup
+  {%
+    \makevalueexpandable
+    \def\temp{#2}%
+    \edef\next{\gdef\makecsname{SET#1}}%
+    \ifx\temp\empty
+      \next{}%
+    \else
+      \setzzz#2\endsetzzz
+    \fi
+  }%
 }
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
 
 % @clear VAR clears (i.e., unsets) the variable VAR.
 %
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
+\parseargdef\clear{%
+  {%
+    \makevalueexpandable
+    \global\expandafter\let\csname SET#1\endcsname=\relax
+  }%
+}
 
 % @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
 {
-  \catcode`\_ = \active
+  \catcode`\- = \active \catcode`\_ = \active
   %
-  % We might end up with active _ or - characters in the argument if
-  % we're called from @code, as @code{@value{foo-bar_}}.  So \let any
-  % such active characters to their normal equivalents.
-  \gdef\value{\begingroup
+  \gdef\makevalueexpandable{%
+    \let\value = \expandablevalue
+    % We don't want these characters active, ...
     \catcode`\-=\other \catcode`\_=\other
-    \indexbreaks \let_\normalunderscore
-    \valuexxx}
+    % ..., but we might end up with active ones in the argument if
+    % we're called from @code, as @code{@value{foo-bar_}}, though.
+    % So \let them to their normal equivalents.
+    \let-\realdash \let_\normalunderscore
+  }
 }
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
 
 % We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we \let\value to this in \indexdummies).  Ones
-% whose names contain - or _ still won't work, but we can't do anything
-% about that.  The command has to be fully expandable (if the variable
-% is set), since the result winds up in the index file.  This means that
-% if the variable's value contains other Texinfo commands, it's almost
-% certain it will fail (although perhaps we could fix that with
-% sufficient work to do a one-level expansion on the result, instead of
-% complete).
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file.  This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
 %
 \def\expandablevalue#1{%
   \expandafter\ifx\csname SET#1\endcsname\relax
@@ -2804,55 +2883,36 @@ width0pt\relax} \fi
 % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
 % with @set.
 %
-\def\ifset{\parsearg\doifset}
-\def\doifset#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \let\next=\ifsetfail
-  \else
-    \let\next=\ifsetsucceed
-  \fi
-  \next
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+  {%
+    \makevalueexpandable
+    \let\next=\empty
+    \expandafter\ifx\csname SET#2\endcsname\relax
+      #1% If not set, redefine \next.
+    \fi
+    \expandafter
+  }\next
 }
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
+\def\ifsetfail{\doignore{ifset}}
 
 % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
 % defined with @set, or has been undefined with @clear.
 %
-\def\ifclear{\parsearg\doifclear}
-\def\doifclear#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \let\next=\ifclearsucceed
-  \else
-    \let\next=\ifclearfail
-  \fi
-  \next
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
-% read the text following, through the first @end iftex (etc.).  Make
-% `@end iftex' (etc.) valid only after an @iftex.
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
 %
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-\defineunmatchedend{ifnotplaintext}
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
 
-% True conditional.  Since \set globally defines its variables, we can
-% just start and end a group (to keep the @end definition undefined at
-% the outer level).
-%
-\def\conditionalsucceed#1{\begingroup
-  \expandafter\def\csname E#1\endcsname{\endgroup}%
-}
+% @dircategory CATEGORY  -- specify a category of the dir file
+% which this file should belong to.  Ignore this in TeX.
+\let\dircategory=\comment
 
 % @defininfoenclose.
 \let\definfoenclose=\comment
@@ -2903,10 +2963,10 @@ width0pt\relax} \fi
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
-% 
+%
 % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.
-% 
+%
 \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
 \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
 
@@ -2948,13 +3008,13 @@ width0pt\relax} \fi
 % Take care of Texinfo commands that can appear in an index entry.
 % Since there are some commands we want to expand, and others we don't,
 % we have to laboriously prevent expansion for those that we don't.
-% 
+%
 \def\indexdummies{%
   \def\@{@}% change to @@ when we switch to @ as escape char in index files.
   \def\ {\realbackslash\space }%
   % Need these in case \tex is in effect and \{ is a \delimiter again.
   % But can't use \lbracecmd and \rbracecmd because texindex assumes
-  % braces and backslashes are used only as delimiters.  
+  % braces and backslashes are used only as delimiters.
   \let\{ = \mylbrace
   \let\} = \myrbrace
   %
@@ -2963,14 +3023,14 @@ width0pt\relax} \fi
   % words, not control letters, because the \space would be incorrect
   % for control characters, but is needed to separate the control word
   % from whatever follows.
-  % 
+  %
   % For control letters, we have \definedummyletter, which omits the
   % space.
-  % 
+  %
   % These can be used both for control words that take an argument and
   % those that do not.  If it is followed by {arg} in the input, then
   % that will dutifully get written to the index (or wherever).
-  % 
+  %
   \def\definedummyword##1{%
     \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
   }%
@@ -2983,9 +3043,9 @@ width0pt\relax} \fi
 }
 
 % For the aux file, @ is the escape character.  So we want to redefine
-% everything using @ instead of \realbackslash.  When everything uses 
+% everything using @ instead of \realbackslash.  When everything uses
 % @, this will be simpler.
-% 
+%
 \def\atdummies{%
   \def\@{@@}%
   \def\ {@ }%
@@ -3006,31 +3066,16 @@ width0pt\relax} \fi
 
 % Called from \indexdummies and \atdummies.  \definedummyword and
 % \definedummyletter must be defined first.
-% 
+%
 \def\commondummies{%
   %
   \normalturnoffactive
   %
-  % Control letters and accents.
+  \commondummiesnofonts
+  %
   \definedummyletter{_}%
-  \definedummyletter{,}%
-  \definedummyletter{"}%
-  \definedummyletter{`}%
-  \definedummyletter{'}%
-  \definedummyletter{^}%
-  \definedummyletter{~}%
-  \definedummyletter{=}%
-  \definedummyword{u}%
-  \definedummyword{v}%
-  \definedummyword{H}%
-  \definedummyword{dotaccent}%
-  \definedummyword{ringaccent}%
-  \definedummyword{tieaccent}%
-  \definedummyword{ubaraccent}%
-  \definedummyword{udotaccent}%
-  \definedummyword{dotless}%
-  %
-  % Other non-English letters.
+  %
+  % Non-English letters.
   \definedummyword{AA}%
   \definedummyword{AE}%
   \definedummyword{L}%
@@ -3042,6 +3087,10 @@ width0pt\relax} \fi
   \definedummyword{oe}%
   \definedummyword{o}%
   \definedummyword{ss}%
+  \definedummyword{exclamdown}%
+  \definedummyword{questiondown}%
+  \definedummyword{ordf}%
+  \definedummyword{ordm}%
   %
   % Although these internal commands shouldn't show up, sometimes they do.
   \definedummyword{bf}%
@@ -3053,37 +3102,13 @@ width0pt\relax} \fi
   \definedummyword{tclose}%
   \definedummyword{tt}%
   %
-  % Texinfo font commands.
-  \definedummyword{b}%
-  \definedummyword{i}%
-  \definedummyword{r}%
-  \definedummyword{sc}%
-  \definedummyword{t}%
-  %
+  \definedummyword{LaTeX}%
   \definedummyword{TeX}%
-  \definedummyword{acronym}%
-  \definedummyword{cite}%
-  \definedummyword{code}%
-  \definedummyword{command}%
-  \definedummyword{dfn}%
-  \definedummyword{dots}%
-  \definedummyword{emph}%
-  \definedummyword{env}%
-  \definedummyword{file}%
-  \definedummyword{kbd}%
-  \definedummyword{key}%
-  \definedummyword{math}%
-  \definedummyword{option}%
-  \definedummyword{samp}%
-  \definedummyword{strong}%
-  \definedummyword{uref}%
-  \definedummyword{url}%
-  \definedummyword{var}%
-  \definedummyword{w}%
   %
   % Assorted special characters.
   \definedummyword{bullet}%
   \definedummyword{copyright}%
+  \definedummyword{registeredsymbol}%
   \definedummyword{dots}%
   \definedummyword{enddots}%
   \definedummyword{equiv}%
@@ -3095,10 +3120,9 @@ width0pt\relax} \fi
   \definedummyword{print}%
   \definedummyword{result}%
   %
-  % Handle some cases of @value -- where the variable name does not
-  % contain - or _, and the value does not contain any
+  % Handle some cases of @value -- where it does not contain any
   % (non-fully-expandable) commands.
-  \let\value = \expandablevalue
+  \makevalueexpandable
   %
   % Normal spaces, not active ones.
   \unsepspaces
@@ -3107,45 +3131,91 @@ width0pt\relax} \fi
   \turnoffmacros
 }
 
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
-
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+% Better have this without active chars.
+{
+  \catcode`\~=\other
+  \gdef\commondummiesnofonts{%
+    % Control letters and accents.
+    \definedummyletter{!}%
+    \definedummyletter{"}%
+    \definedummyletter{'}%
+    \definedummyletter{*}%
+    \definedummyletter{,}%
+    \definedummyletter{.}%
+    \definedummyletter{/}%
+    \definedummyletter{:}%
+    \definedummyletter{=}%
+    \definedummyletter{?}%
+    \definedummyletter{^}%
+    \definedummyletter{`}%
+    \definedummyletter{~}%
+    \definedummyword{u}%
+    \definedummyword{v}%
+    \definedummyword{H}%
+    \definedummyword{dotaccent}%
+    \definedummyword{ringaccent}%
+    \definedummyword{tieaccent}%
+    \definedummyword{ubaraccent}%
+    \definedummyword{udotaccent}%
+    \definedummyword{dotless}%
+    %
+    % Texinfo font commands.
+    \definedummyword{b}%
+    \definedummyword{i}%
+    \definedummyword{r}%
+    \definedummyword{sc}%
+    \definedummyword{t}%
+    %
+    % Commands that take arguments.
+    \definedummyword{acronym}%
+    \definedummyword{cite}%
+    \definedummyword{code}%
+    \definedummyword{command}%
+    \definedummyword{dfn}%
+    \definedummyword{emph}%
+    \definedummyword{env}%
+    \definedummyword{file}%
+    \definedummyword{kbd}%
+    \definedummyword{key}%
+    \definedummyword{math}%
+    \definedummyword{option}%
+    \definedummyword{samp}%
+    \definedummyword{strong}%
+    \definedummyword{tie}%
+    \definedummyword{uref}%
+    \definedummyword{url}%
+    \definedummyword{var}%
+    \definedummyword{verb}%
+    \definedummyword{w}%
+  }
+}
 
 % \indexnofonts is used when outputting the strings to sort the index
 % by, and when constructing control sequence names.  It eliminates all
 % control sequences and just writes whatever the best ASCII sort string
 % would be for a given command (usually its argument).
 %
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
-%
 \def\indexnofonts{%
+  \def\definedummyword##1{%
+    \expandafter\let\csname ##1\endcsname\asis
+  }%
+  \let\definedummyletter=\definedummyword
+  %
+  \commondummiesnofonts
+  %
+  % Don't no-op \tt, since it isn't a user-level command
+  % and is used in the definitions of the active chars like <, >, |, etc.
+  % Likewise with the other plain tex font commands.
+  %\let\tt=\asis
+  %
   \def\ { }%
   \def\@{@}%
   % how to handle braces?
   \def\_{\normalunderscore}%
   %
-  \let\,=\asis
-  \let\"=\asis
-  \let\`=\asis
-  \let\'=\asis
-  \let\^=\asis
-  \let\~=\asis
-  \let\==\asis
-  \let\u=\asis
-  \let\v=\asis
-  \let\H=\asis
-  \let\dotaccent=\asis
-  \let\ringaccent=\asis
-  \let\tieaccent=\asis
-  \let\ubaraccent=\asis
-  \let\udotaccent=\asis
-  \let\dotless=\asis
-  %
-  % Other non-English letters.
+  % Non-English letters.
   \def\AA{AA}%
   \def\AE{AE}%
   \def\L{L}%
@@ -3159,138 +3229,172 @@ width0pt\relax} \fi
   \def\ss{ss}%
   \def\exclamdown{!}%
   \def\questiondown{?}%
+  \def\ordf{a}%
+  \def\ordm{o}%
   %
-  % Don't no-op \tt, since it isn't a user-level command
-  % and is used in the definitions of the active chars like <, >, |, etc.
-  % Likewise with the other plain tex font commands.
-  %\let\tt=\asis
+  \def\LaTeX{LaTeX}%
+  \def\TeX{TeX}%
   %
-  % Texinfo font commands.
-  \let\b=\asis
-  \let\i=\asis
-  \let\r=\asis
-  \let\sc=\asis
-  \let\t=\asis
-  %
-  \let\TeX=\indexdummytex
-  \let\acronym=\asis
-  \let\cite=\asis
-  \let\code=\asis
-  \let\command=\asis
-  \let\dfn=\asis
-  \let\dots=\indexdummydots
-  \let\emph=\asis
-  \let\env=\asis
-  \let\file=\asis
-  \let\kbd=\asis
-  \let\key=\asis
-  \let\math=\asis
-  \let\option=\asis
-  \let\samp=\asis
-  \let\strong=\asis
-  \let\uref=\asis
-  \let\url=\asis
-  \let\var=\asis
-  \let\w=\asis
+  % Assorted special characters.
+  % (The following {} will end up in the sort string, but that's ok.)
+  \def\bullet{bullet}%
+  \def\copyright{copyright}%
+  \def\registeredsymbol{R}%
+  \def\dots{...}%
+  \def\enddots{...}%
+  \def\equiv{==}%
+  \def\error{error}%
+  \def\expansion{==>}%
+  \def\minus{-}%
+  \def\pounds{pounds}%
+  \def\point{.}%
+  \def\print{-|}%
+  \def\result{=>}%
 }
 
 \let\indexbackslash=0  %overridden during \printindex.
 \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
-% For \ifx comparisons.
-\def\emptymacro{\empty}
-
 % Most index entries go through here, but \dosubind is the general case.
-%
-\def\doind#1#2{\dosubind{#1}{#2}\empty}
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
 
 % Workhorse for all \fooindexes.
 % #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% \empty if called from \doind, as we usually are.  The main exception
-% is with defuns, which call us directly.
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
 %
 \def\dosubind#1#2#3{%
-  % Put the index entry in the margin if desired.
-  \ifx\SETmarginindex\relax\else
-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-  \fi
+  \iflinks
   {%
-    \count255=\lastpenalty
-    {%
-      \indexdummies % Must do this here, since \bf, etc expand at this stage
-      \escapechar=`\\
-      {%
-        \let\folio = 0% We will expand all macros now EXCEPT \folio.
-        \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-        % so it will be output as is; and it will print as backslash.
-        %
-        % The main index entry text.
-        \toks0 = {#2}%
-        %
-        % If third arg is present, precede it with space in sort key.
-        \def\thirdarg{#3}%
-        \ifx\thirdarg\emptymacro \else
-           % If the third (subentry) arg is present, add it to the index
-           % line to write.
-          \toks0 = \expandafter{\the\toks0 \space #3}%
-        \fi
-        %
-        % Process the index entry with all font commands turned off, to
-        % get the string to sort by.
-        {\indexnofonts
-         \edef\temp{\the\toks0}% need full expansion
-         \xdef\indexsorttmp{\temp}%
-        }%
-        %
-        % Set up the complete index entry, with both the sort key and
-        % the original text, including any font commands.  We write
-        % three arguments to \entry to the .?? file (four in the
-        % subentry case), texindex reduces to two when writing the .??s
-        % sorted result.
-        \edef\temp{%
-          \write\csname#1indfile\endcsname{%
-            \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
-        }%
-        %
-        % If a skip is the last thing on the list now, preserve it
-        % by backing up by \lastskip, doing the \write, then inserting
-        % the skip again.  Otherwise, the whatsit generated by the
-        % \write will make \lastskip zero.  The result is that sequences
-        % like this:
-        % @end defun
-        % @tindex whatever
-        % @defun ...
-        % will have extra space inserted, because the \medbreak in the
-        % start of the @defun won't see the skip inserted by the @end of
-        % the previous defun.
-        %
-        % But don't do any of this if we're not in vertical mode.  We
-        % don't want to do a \vskip and prematurely end a paragraph.
-        %
-        % Avoid page breaks due to these extra skips, too.
-        %
-        \iflinks
-          \ifvmode
-            \skip0 = \lastskip
-            \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi
-          \fi
-          %
-          \temp % do the write
-          %
-          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
-        \fi
-      }%
-    }%
-    \penalty\count255
+    % Store the main index entry text (including the third arg).
+    \toks0 = {#2}%
+    % If third arg is present, precede it with a space.
+    \def\thirdarg{#3}%
+    \ifx\thirdarg\empty \else
+      \toks0 = \expandafter{\the\toks0 \space #3}%
+    \fi
+    %
+    \edef\writeto{\csname#1indfile\endcsname}%
+    %
+    \ifvmode
+      \dosubindsanitize
+    \else
+      \dosubindwrite
+    \fi
   }%
+  \fi
 }
 
-% The index entry written in the file actually looks like
-%  \entry {sortstring}{page}{topic}
-% or
-%  \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+  % Put the index entry in the margin if desired.
+  \ifx\SETmarginindex\relax\else
+    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+  \fi
+  %
+  % Remember, we are within a group.
+  \indexdummies % Must do this here, since \bf, etc expand at this stage
+  \escapechar=`\\
+  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+      % so it will be output as is; and it will print as backslash.
+  %
+  % Process the index entry with all font commands turned off, to
+  % get the string to sort by.
+  {\indexnofonts
+   \edef\temp{\the\toks0}% need full expansion
+   \xdef\indexsorttmp{\temp}%
+  }%
+  %
+  % Set up the complete index entry, with both the sort key and
+  % the original text, including any font commands.  We write
+  % three arguments to \entry to the .?? file (four in the
+  % subentry case), texindex reduces to two when writing the .??s
+  % sorted result.
+  \edef\temp{%
+    \write\writeto{%
+      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+  }%
+  \temp
+}
+
+% Take care of unwanted page breaks:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again.  Otherwise, the whatsit generated by the
+% \write will make \lastskip zero.  The result is that sequences
+% like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode.  We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip.  \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip.  The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+% ..., ready, GO:
+%
+\def\dosubindsanitize{%
+  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+  \skip0 = \lastskip
+  \edef\lastskipmacro{\the\lastskip}%
+  \count255 = \lastpenalty
+  %
+  % If \lastskip is nonzero, that means the last item was a
+  % skip.  And since a skip is discardable, that means this
+  % -\skip0 glue we're inserting is preceded by a
+  % non-discardable item, therefore it is not a potential
+  % breakpoint, therefore no \nobreak needed.
+  \ifx\lastskipmacro\zeroskipmacro
+  \else
+    \vskip-\skip0
+  \fi
+  %
+  \dosubindwrite
+  %
+  \ifx\lastskipmacro\zeroskipmacro
+    % if \lastskip was zero, perhaps the last item was a
+    % penalty, and perhaps it was >=10000, e.g., a \nobreak.
+    % In that case, we want to re-insert the penalty; since we
+    % just inserted a non-discardable item, any following glue
+    % (such as a \parskip) would be a breakpoint.  For example:
+    %   @deffn deffn-whatever
+    %   @vindex index-whatever
+    %   Description.
+    % would allow a break between the index-whatever whatsit
+    % and the "Description." paragraph.
+    \ifnum\count255>9999 \nobreak \fi
+  \else
+    % On the other hand, if we had a nonzero \lastskip,
+    % this make-up glue would be preceded by a non-discardable item
+    % (the whatsit from the \write), so we must insert a \nobreak.
+    \nobreak\vskip\skip0
+  \fi
+}
+
+% The index entry written in the file actually looks like
+%  \entry {sortstring}{page}{topic}
+% or
+%  \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
 %  \initial {c}
 %     before the first topic whose initial is c
 %  \entry {topic}{pagelist}
@@ -3320,13 +3424,12 @@ width0pt\relax} \fi
 % @printindex causes a particular index (the ??s file) to get printed.
 % It does not print any chapter heading (usually an @unnumbered).
 %
-\def\printindex{\parsearg\doprintindex}
-\def\doprintindex#1{\begingroup
+\parseargdef\printindex{\begingroup
   \dobreak \chapheadingskip{10000}%
   %
   \smallfonts \rm
   \tolerance = 9500
-  \indexbreaks
+  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
   %
   % See if the index file exists and is nonempty.
   % Change catcode of @ here so that if the index file contains
@@ -3353,7 +3456,7 @@ width0pt\relax} \fi
       % Index files are almost Texinfo source, but we use \ as the escape
       % character.  It would be better to use @, but that's too big a change
       % to make right now.
-      \def\indexbackslash{\rawbackslashxx}%
+      \def\indexbackslash{\backslashcurfont}%
       \catcode`\\ = 0
       \escapechar = `\\
       \begindoublecolumns
@@ -3391,74 +3494,95 @@ width0pt\relax} \fi
   \nobreak
 }}
 
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin.  It is used for index and table of contents
-% entries.  The paragraph is indented by \leftskip.
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin.  It is used for index
+% and table of contents entries.  The paragraph is indented by \leftskip.
 %
-\def\entry#1#2{\begingroup
-  %
-  % Start a new paragraph if necessary, so our assignments below can't
-  % affect previous text.
-  \par
-  %
-  % Do not fill out the last line with white space.
-  \parfillskip = 0in
-  %
-  % No extra space above this paragraph.
-  \parskip = 0in
-  %
-  % Do not prefer a separate line ending with a hyphen to fewer lines.
-  \finalhyphendemerits = 0
-  %
-  % \hangindent is only relevant when the entry text and page number
-  % don't both fit on one line.  In that case, bob suggests starting the
-  % dots pretty far over on the line.  Unfortunately, a large
-  % indentation looks wrong when the entry text itself is broken across
-  % lines.  So we use a small indentation and put up with long leaders.
-  %
-  % \hangafter is reset to 1 (which is the value we want) at the start
-  % of each paragraph, so we need not do anything with that.
-  \hangindent = 2em
-  %
-  % When the entry text needs to be broken, just fill out the first line
-  % with blank space.
-  \rightskip = 0pt plus1fil
-  %
-  % A bit of stretch before each entry for the benefit of balancing columns.
-  \vskip 0pt plus1pt
-  %
-  % Start a ``paragraph'' for the index entry so the line breaking
-  % parameters we've set above will have an effect.
-  \noindent
-  %
-  % Insert the text of the index entry.  TeX will do line-breaking on it.
-  #1%
-  % The following is kludged to not output a line of dots in the index if
-  % there are no page numbers.  The next person who breaks this will be
-  % cursed by a Unix daemon.
-  \def\tempa{{\rm }}%
-  \def\tempb{#2}%
-  \edef\tempc{\tempa}%
-  \edef\tempd{\tempb}%
-  \ifx\tempc\tempd\ \else%
+% A straightforward implementation would start like this:
+%      \def\entry#1#2{...
+% But this frozes the catcodes in the argument, and can cause problems to
+% @code, which sets - active.  This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+% 
+% The right solution is to prevent \entry from swallowing the whole text.
+%                                 --kasal, 21nov03
+\def\entry{%
+  \begingroup
+    %
+    % Start a new paragraph if necessary, so our assignments below can't
+    % affect previous text.
+    \par
+    %
+    % Do not fill out the last line with white space.
+    \parfillskip = 0in
+    %
+    % No extra space above this paragraph.
+    \parskip = 0in
+    %
+    % Do not prefer a separate line ending with a hyphen to fewer lines.
+    \finalhyphendemerits = 0
+    %
+    % \hangindent is only relevant when the entry text and page number
+    % don't both fit on one line.  In that case, bob suggests starting the
+    % dots pretty far over on the line.  Unfortunately, a large
+    % indentation looks wrong when the entry text itself is broken across
+    % lines.  So we use a small indentation and put up with long leaders.
+    %
+    % \hangafter is reset to 1 (which is the value we want) at the start
+    % of each paragraph, so we need not do anything with that.
+    \hangindent = 2em
     %
-    % If we must, put the page number on a line of its own, and fill out
-    % this line with blank space.  (The \hfil is overwhelmed with the
-    % fill leaders glue in \indexdotfill if the page number does fit.)
-    \hfil\penalty50
-    \null\nobreak\indexdotfill % Have leaders before the page number.
+    % When the entry text needs to be broken, just fill out the first line
+    % with blank space.
+    \rightskip = 0pt plus1fil
     %
-    % The `\ ' here is removed by the implicit \unskip that TeX does as
-    % part of (the primitive) \par.  Without it, a spurious underfull
-    % \hbox ensues.
-    \ifpdf
-      \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+    % A bit of stretch before each entry for the benefit of balancing
+    % columns.
+    \vskip 0pt plus1pt
+    %
+    % Swallow the left brace of the text (first parameter):
+    \afterassignment\doentry
+    \let\temp =
+}
+\def\doentry{%
+    \bgroup % Instead of the swallowed brace.
+      \noindent
+      \aftergroup\finishentry
+      % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+    % #1 is the page number.
+    %
+    % The following is kludged to not output a line of dots in the index if
+    % there are no page numbers.  The next person who breaks this will be
+    % cursed by a Unix daemon.
+    \def\tempa{{\rm }}%
+    \def\tempb{#1}%
+    \edef\tempc{\tempa}%
+    \edef\tempd{\tempb}%
+    \ifx\tempc\tempd
+      \ %
     \else
-      \ #2% The page number ends the paragraph.
+      %
+      % If we must, put the page number on a line of its own, and fill out
+      % this line with blank space.  (The \hfil is overwhelmed with the
+      % fill leaders glue in \indexdotfill if the page number does fit.)
+      \hfil\penalty50
+      \null\nobreak\indexdotfill % Have leaders before the page number.
+      %
+      % The `\ ' here is removed by the implicit \unskip that TeX does as
+      % part of (the primitive) \par.  Without it, a spurious underfull
+      % \hbox ensues.
+      \ifpdf
+       \pdfgettoks#1.%
+       \ \the\toksA
+      \else
+       \ #1%
+      \fi
     \fi
-  \fi%
-  \par
-\endgroup}
+    \par
+  \endgroup
+}
 
 % Like \dotfill except takes at least 1 em.
 \def\indexdotfill{\cleaders
@@ -3569,7 +3693,7 @@ width0pt\relax} \fi
   \wd0=\hsize \wd2=\hsize
   \hbox to\pagewidth{\box0\hfil\box2}%
 }
-% 
+%
 % All done with double columns.
 \def\enddoublecolumns{%
   \output = {%
@@ -3627,6 +3751,12 @@ width0pt\relax} \fi
 \message{sectioning,}
 % Chapters, sections, etc.
 
+% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number".  We avoid collisions with chapter
+% numbers by starting them at 10000.  (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
 \newcount\chapno
 \newcount\secno        \secno=0
 \newcount\subsecno     \subsecno=0
@@ -3634,9 +3764,12 @@ width0pt\relax} \fi
 
 % This counter is funny since it counts through charcodes of letters A, B, ...
 \newcount\appendixno  \appendixno = `\@
+%
 % \def\appendixletter{\char\the\appendixno}
-% We do the following for the sake of pdftex, which needs the actual
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
 % letter in the expansion, not just typeset.
+% 
 \def\appendixletter{%
   \ifnum\appendixno=`A A%
   \else\ifnum\appendixno=`B B%
@@ -3674,11 +3807,12 @@ width0pt\relax} \fi
 
 % Each @chapter defines this as the name of the chapter.
 % page headings and footings can use it.  @section does likewise.
+% However, they are not reliable, because we don't use marks.
 \def\thischapter{}
 \def\thissection{}
 
 \newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
 
 % @raisesections: treat @section as chapter, @subsection as section, etc.
 \def\raisesections{\global\advance\secbase by -1}
@@ -3693,113 +3827,105 @@ width0pt\relax} \fi
 % #2 is text for heading
 \def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
 \ifcase\absseclevel
-  \chapterzzz{#2}
-\or
-  \seczzz{#2}
-\or
-  \numberedsubseczzz{#2}
-\or
-  \numberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \chapterzzz{#2}
+      \chapterzzz{#2}%
+  \or \seczzz{#2}%
+  \or \numberedsubseczzz{#2}%
+  \or \numberedsubsubseczzz{#2}%
   \else
-    \numberedsubsubseczzz{#2}
+    \ifnum \absseclevel<0 \chapterzzz{#2}%
+    \else \numberedsubsubseczzz{#2}%
+    \fi
   \fi
-\fi
+  \suppressfirstparagraphindent
 }
 
 % like \numhead, but chooses appendix heading levels
 \def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
 \ifcase\absseclevel
-  \appendixzzz{#2}
-\or
-  \appendixsectionzzz{#2}
-\or
-  \appendixsubseczzz{#2}
-\or
-  \appendixsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \appendixzzz{#2}
+      \appendixzzz{#2}%
+  \or \appendixsectionzzz{#2}%
+  \or \appendixsubseczzz{#2}%
+  \or \appendixsubsubseczzz{#2}%
   \else
-    \appendixsubsubseczzz{#2}
+    \ifnum \absseclevel<0 \appendixzzz{#2}%
+    \else \appendixsubsubseczzz{#2}%
+    \fi
   \fi
-\fi
+  \suppressfirstparagraphindent
 }
 
 % like \numhead, but chooses numberless heading levels
 \def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \unnumberedzzz{#2}
-\or
-  \unnumberedseczzz{#2}
-\or
-  \unnumberedsubseczzz{#2}
-\or
-  \unnumberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \unnumberedzzz{#2}
+  \ifcase\absseclevel
+      \unnumberedzzz{#2}%
+  \or \unnumberedseczzz{#2}%
+  \or \unnumberedsubseczzz{#2}%
+  \or \unnumberedsubsubseczzz{#2}%
   \else
-    \unnumberedsubsubseczzz{#2}
+    \ifnum \absseclevel<0 \unnumberedzzz{#2}%
+    \else \unnumberedsubsubseczzz{#2}%
+    \fi
   \fi
-\fi
+  \suppressfirstparagraphindent
 }
 
-% @chapter, @appendix, @unnumbered.
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{%
-  \secno=0 \subsecno=0 \subsubsecno=0
-  \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
-  \chapmacro {#1}{\the\chapno}%
-  \gdef\thissection{#1}%
-  \gdef\thischaptername{#1}%
-  % We don't substitute the actual chapter name into \thischapter
-  % because we don't want its macros evaluated now.
-  \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-  \writetocentry{chap}{#1}{{\the\chapno}}
-  \donoderef
+% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+% 
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v.  By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+% 
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+  % section resetting is \global in case the chapter is in a group, such
+  % as an @include file.
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\chapno by 1
+  %
+  % Used for \float.
+  \gdef\chaplevelprefix{\the\chapno.}%
+  \resetallfloatnos
+  %
+  \message{\putwordChapter\space \the\chapno}%
+  %
+  % Write the actual heading.
+  \chapmacro{#1}{Ynumbered}{\the\chapno}%
+  %
+  % So @section and the like are numbered underneath this chapter.
   \global\let\section = \numberedsec
   \global\let\subsection = \numberedsubsec
   \global\let\subsubsection = \numberedsubsubsec
 }
 
-% we use \chapno to avoid indenting back
-\def\appendixbox#1{%
-  \setbox0 = \hbox{\putwordAppendix{} \the\chapno}%
-  \hbox to \wd0{#1\hss}}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{%
-  \secno=0 \subsecno=0 \subsubsecno=0
-  \global\advance \appendixno by 1
-  \message{\putwordAppendix\space \appendixletter}%
-  \chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}%
-  \gdef\thissection{#1}%
-  \gdef\thischaptername{#1}%
-  \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-  \writetocentry{appendix}{#1}{{\appendixletter}}
-  \appendixnoderef
+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\appendixno by 1
+  \gdef\chaplevelprefix{\appendixletter.}%
+  \resetallfloatnos
+  %
+  \def\appendixnum{\putwordAppendix\space \appendixletter}%
+  \message{\appendixnum}%
+  %
+  \chapmacro{#1}{Yappendix}{\appendixletter}%
+  %
   \global\let\section = \appendixsec
   \global\let\subsection = \appendixsubsec
   \global\let\subsubsection = \appendixsubsubsec
 }
 
 % @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-% @top is like @unnumbered.
-\outer\def\top{\parsearg\unnumberedyyy}
+\outer\parseargdef\centerchap{{\unnumberedyyy{#1}}}
 
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{%
-  \secno=0 \subsecno=0 \subsubsecno=0
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\unnumberedno by 1
+  %
+  % Since an unnumbered has no number, no prefix for figures.
+  \global\let\chaplevelprefix = \empty
+  \resetallfloatnos
   %
   % This used to be simply \message{#1}, but TeX fully expands the
   % argument to \message.  Therefore, if #1 contained @-commands, TeX
@@ -3812,112 +3938,84 @@ width0pt\relax} \fi
   % \the<toks register> to achieve this: TeX expands \the<toks> only once,
   % simply yielding the contents of <toks register>.  (We also do this for
   % the toc entries.)
-  \toks0 = {#1}\message{(\the\toks0)}%
+  \toks0 = {#1}%
+  \message{(\the\toks0)}%
+  %
+  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
   %
-  \unnumbchapmacro {#1}%
-  \gdef\thischapter{#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbchap}{#1}{{\the\chapno}}
-  \unnumbnoderef
   \global\let\section = \unnumberedsec
   \global\let\subsection = \unnumberedsubsec
   \global\let\subsubsection = \unnumberedsubsubsec
 }
 
+% @top is like @unnumbered.
+\let\top\unnumbered
+
 % Sections.
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{%
-  \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-  \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-  \writetocentry{sec}{#1}{{\the\chapno}{\the\secno}}
-  \donoderef
-  \nobreak
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
 }
 
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{%
-  \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-  \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-  \writetocentry{sec}{#1}{{\appendixletter}{\the\secno}}
-  \appendixnoderef
-  \nobreak
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
 }
+\let\appendixsec\appendixsection
 
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{%
-  \plainsecheading {#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbsec}{#1}{{\the\chapno}{\the\secno}}
-  \unnumbnoderef
-  \nobreak
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
 }
 
 % Subsections.
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{%
-  \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-  \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-  \writetocentry{subsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
-  \donoderef
-  \nobreak
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
 }
 
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{%
-  \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-  \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-  \writetocentry{subsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}}
-  \appendixnoderef
-  \nobreak
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno}%
 }
 
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{%
-  \plainsubsecheading {#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
-  \unnumbnoderef
-  \nobreak
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno}%
 }
 
 % Subsubsections.
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{%
-  \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-  \subsubsecheading {#1}
-    {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-  \writetocentry{subsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
-  \donoderef
-  \nobreak
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynumbered}%
+                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
 }
 
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{%
-  \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-  \subsubsecheading {#1}
-    {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-  \writetocentry{subsubsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
-  \appendixnoderef
-  \nobreak
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
 }
 
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{%
-  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbsubsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
-  \unnumbnoderef
-  \nobreak
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
 }
 
 % These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
+% Actually, they are now be obsolete; ordinary section commands should work.
 \def\infotop{\parsearg\unnumberedzzz}
 \def\infounnumbered{\parsearg\unnumberedzzz}
 \def\infounnumberedsec{\parsearg\unnumberedseczzz}
@@ -3937,9 +4035,9 @@ width0pt\relax} \fi
 % These macros control what the section commands do, according
 % to what kind of chapter we are in (ordinary, appendix, or unnumbered).
 % Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
 
 % Define @majorheading, @heading and @subheading
 
@@ -3952,23 +4050,27 @@ width0pt\relax} \fi
 %          if justification is not attempted.  Hence \raggedright.
 
 
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
+\def\majorheading{%
   {\advance\chapheadingskip by 10pt \chapbreak }%
-  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                    \parindent=0pt\raggedright
-                    \rm #1\hfill}}\bigskip \par\penalty 200}
+  \parsearg\chapheadingzzz
+}
 
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
   {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                     \parindent=0pt\raggedright
-                    \rm #1\hfill}}\bigskip \par\penalty 200}
+                    \rm #1\hfill}}%
+  \bigskip \par\penalty 200\relax
+  \suppressfirstparagraphindent
+}
 
 % @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
 
 % These macros generate a chapter, section, etc. heading only
 % (including whitespace, linebreaking, etc. around it),
@@ -4001,7 +4103,7 @@ width0pt\relax} \fi
 \global\let\pagealignmacro=\chappager
 \global\def\HEADINGSon{\HEADINGSsingle}}
 
-\def\CHAPPAGodd{
+\def\CHAPPAGodd{%
 \global\let\contentsalignmacro = \chapoddpage
 \global\let\pchapsepmacro=\chapoddpage
 \global\let\pagealignmacro=\chapoddpage
@@ -4009,30 +4111,79 @@ width0pt\relax} \fi
 
 \CHAPPAGon
 
-\def\CHAPFplain{
+\def\CHAPFplain{%
 \global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
 \global\let\centerchapmacro=\centerchfplain}
 
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
+% Normal chapter opening.
+% 
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+% 
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chfplain#1#2#3{%
   \pchapsepmacro
   {%
     \chapfonts \rm
-    \def\chapnum{#2}%
-    \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
+    %
+    % Have to define \thissection before calling \donoderef, because the
+    % xref code eventually uses it.  On the other hand, it has to be called
+    % after \pchapsepmacro, or the headline will change too soon.
+    \gdef\thissection{#1}%
+    \gdef\thischaptername{#1}%
+    %
+    % Only insert the separating space if we have a chapter/appendix
+    % number, and don't print the unnumbered ``number''.
+    \def\temptype{#2}%
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unnchap}%
+      \def\thischapter{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+      \def\toctype{omit}%
+      \xdef\thischapter{}%
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+      \def\toctype{app}%
+      % We don't substitute the actual chapter name into \thischapter
+      % because we don't want its macros evaluated now.  And we don't
+      % use \thissection because that changes with each section.
+      %
+      \xdef\thischapter{\putwordAppendix{} \appendixletter:
+                        \noexpand\thischaptername}%
+    \else
+      \setbox0 = \hbox{#3\enspace}%
+      \def\toctype{numchap}%
+      \xdef\thischapter{\putwordChapter{} \the\chapno:
+                        \noexpand\thischaptername}%
+    \fi\fi\fi
+    %
+    % Write the toc entry for this chapter.  Must come before the
+    % \donoderef, because we include the current node name in the toc
+    % entry, and \donoderef resets it to empty.
+    \writetocentry{\toctype}{#1}{#3}%
+    %
+    % For pdftex, we have to write out the node definition (aka, make
+    % the pdfdest) after any page break, but before the actual text has
+    % been typeset.  If the destination for the pdf outline is after the
+    % text, then jumping from the outline may wind up with the text not
+    % being visible, for instance under high magnification.
+    \donoderef{#2}%
+    %
+    % Typeset the actual heading.
     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 \centerparametersmaybe
+          \hangindent=\wd0 \centerparametersmaybe
           \unhbox0 #1\par}%
   }%
   \nobreak\bigskip % no page break after a chapter title
   \nobreak
 }
 
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
 % @centerchap -- centered and unnumbered.
 \let\centerparametersmaybe = \relax
 \def\centerchfplain#1{{%
@@ -4041,11 +4192,14 @@ width0pt\relax} \fi
     \leftskip = \rightskip
     \parfillskip = 0pt
   }%
-  \chfplain{#1}{}%
+  \chfplain{#1}{Ynothing}{}%
 }}
 
 \CHAPFplain % The default
 
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
+% 
 \def\unnchfopen #1{%
 \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                        \parindent=0pt\raggedright
@@ -4063,61 +4217,95 @@ width0pt\relax} \fi
                        \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
 }
 
-\def\CHAPFopen{
+\def\CHAPFopen{%
 \global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
 \global\let\centerchapmacro=\centerchfopen}
 
 
-% Section titles.
+% Section titles.  These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+% 
 \newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
 
 % Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
 
 % Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
 
 
-% Print any size section title.
-%
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
-  {%
-    \expandafter\advance\csname #1headingskip\endcsname by \parskip
-    \csname #1headingbreak\endcsname
-  }%
+% Print any size, any type, section title.
+% 
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+% 
+\def\sectionheading#1#2#3#4{%
   {%
     % Switch to the right set of fonts.
-    \csname #1fonts\endcsname \rm
+    \csname #2fonts\endcsname \rm
     %
-    % Only insert the separating space if we have a section number.
-    \def\secnum{#2}%
-    \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
+    % Insert space above the heading.
+    \csname #2headingbreak\endcsname
+    %
+    % Only insert the space after the number if we have a section number.
+    \def\sectionlevel{#2}%
+    \def\temptype{#3}%
+    %
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unn}%
+      \gdef\thissection{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      % for @headings -- no section number, don't include in toc,
+      % and don't redefine \thissection.
+      \setbox0 = \hbox{}%
+      \def\toctype{omit}%
+      \let\sectionlevel=\empty
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{app}%
+      \gdef\thissection{#1}%
+    \else
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{num}%
+      \gdef\thissection{#1}%
+    \fi\fi\fi
     %
+    % Write the toc entry (before \donoderef).  See comments in \chfplain.
+    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+    %
+    % Write the node reference (= pdf destination for pdftex).
+    % Again, see comments in \chfplain.
+    \donoderef{#3}%
+    %
+    % Output the actual section heading.
     \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 % zero if no section number
-          \unhbox0 #3}%
+          \hangindent=\wd0  % zero if no section number
+          \unhbox0 #1}%
   }%
-  % Add extra space after the heading -- either a line space or a
-  % paragraph space, whichever is more.  (Some people like to set
-  % \parskip to large values for some reason.)  Don't allow stretch, though.
+  % Add extra space after the heading -- half of whatever came above it.
+  % Don't allow stretch, though.
+  \kern .5 \csname #2headingskip\endcsname
+  %
+  % Do not let the kern be a potential breakpoint, as it would be if it
+  % was followed by glue.
   \nobreak
-  \ifdim\parskip>\normalbaselineskip
-    \kern\parskip
-  \else
-    \kern\normalbaselineskip
-  \fi
+  %
+  % We'll almost certainly start a paragraph next, so don't let that
+  % glue accumulate.  (Not a breakpoint because it's preceded by a
+  % discardable item.)
+  \vskip-\parskip
+  %
+  % This \nobreak is purely so the last item on the list is a \penalty
+  % of 10000.  This is so other code, for instance \parsebodycommon, can
+  % check for and avoid allowing breakpoints.  Otherwise, it would
+  % insert a valid breakpoint between:
+  %   @section sec-whatever
+  %   @deffn def-whatever
   \nobreak
 }
 
@@ -4127,119 +4315,152 @@ width0pt\relax} \fi
 \newwrite\tocfile
 
 % Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc.  We supply {\folio} at the end of the
-% argument, which will end up as the last argument to the \...entry macro.
-%
-% Usage: \writetocentry{chap}{The Name of The Game}{{\the\chapno}}
+% Called from @chapter, etc.  
+% 
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this.  The node name is used in the pdf outlines as the
+% destination to jump to.
+% 
 % We open the .toc file for writing here instead of at @setfilename (or
 % any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything.  This is used for the
+% table of contents chapter openings themselves.
 %
 \newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
 \def\writetocentry#1#2#3{%
-  \iftocfileopened\else
-    \immediate\openout\tocfile = \jobname.toc
-    \global\tocfileopenedtrue
-  \fi
-  %
-  \iflinks
-    \toks0 = {#2}%
-    \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}#3{\folio}}}%
-    \temp
+  \edef\writetoctype{#1}%
+  \ifx\writetoctype\omitkeyword \else
+    \iftocfileopened\else
+      \immediate\openout\tocfile = \jobname.toc
+      \global\tocfileopenedtrue
+    \fi
+    %
+    \iflinks
+      \toks0 = {#2}%
+      \toks2 = \expandafter{\lastnode}%
+      \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}%
+                               {\the\toks2}{\noexpand\folio}}}%
+      \temp
+    \fi
   \fi
   %
-  % Tell \shipout to create a page destination if we're doing pdf, which
-  % will be the target of the links in the table of contents.  We can't
-  % just do it on every page because the title pages are numbered 1 and
-  % 2 (the page numbers aren't printed), and so are the first two pages
-  % of the document.  Thus, we'd have two destinations named `1', and
-  % two named `2'.
-  \ifpdf \pdfmakepagedesttrue \fi
+  % Tell \shipout to create a pdf destination on each page, if we're
+  % writing pdf.  These are used in the table of contents.  We can't
+  % just write one on every page because the title pages are numbered
+  % 1 and 2 (the page numbers aren't printed), and so are the first
+  % two pages of the document.  Thus, we'd have two destinations named
+  % `1', and two named `2'.
+  \ifpdf \global\pdfmakepagedesttrue \fi
 }
 
 \newskip\contentsrightmargin \contentsrightmargin=1in
 \newcount\savepageno
 \newcount\lastnegativepageno \lastnegativepageno = -1
 
-% Finish up the main text and prepare to read what we've written
-% to \tocfile.
+% Prepare to read what we've written to \tocfile.
 %
 \def\startcontents#1{%
-   % If @setchapternewpage on, and @headings double, the contents should
-   % start on an odd page, unlike chapters.  Thus, we maintain
-   % \contentsalignmacro in parallel with \pagealignmacro.
-   % From: Torbjorn Granlund <tege@matematik.su.se>
-   \contentsalignmacro
-   \immediate\closeout\tocfile
-   %
-   % Don't need to put `Contents' or `Short Contents' in the headline.
-   % It is abundantly clear what they are.
-   \unnumbchapmacro{#1}\def\thischapter{}%
-   \savepageno = \pageno
-   \begingroup                  % Set up to handle contents files properly.
-      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
-      % We can't do this, because then an actual ^ in a section
-      % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
-      %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
-      \raggedbottom             % Worry more about breakpoints than the bottom.
-      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-      %
-      % Roman numerals for page numbers.
-      \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+  % If @setchapternewpage on, and @headings double, the contents should
+  % start on an odd page, unlike chapters.  Thus, we maintain
+  % \contentsalignmacro in parallel with \pagealignmacro.
+  % From: Torbjorn Granlund <tege@matematik.su.se>
+  \contentsalignmacro
+  \immediate\closeout\tocfile
+  %
+  % Don't need to put `Contents' or `Short Contents' in the headline.
+  % It is abundantly clear what they are.
+  \def\thischapter{}%
+  \chapmacro{#1}{Yomitfromtoc}{}%
+  %
+  \savepageno = \pageno
+  \begingroup                  % Set up to handle contents files properly.
+    \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
+    % We can't do this, because then an actual ^ in a section
+    % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
+    %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+    \raggedbottom             % Worry more about breakpoints than the bottom.
+    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    %
+    % Roman numerals for page numbers.
+    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
 }
 
 
 % Normal (long) toc.
 \def\contents{%
-   \startcontents{\putwordTOC}%
-     \openin 1 \jobname.toc
-     \ifeof 1 \else
-       \closein 1
-       \input \jobname.toc
-     \fi
-     \vfill \eject
-     \contentsalignmacro % in case @setchapternewpage odd is in effect
-     \pdfmakeoutlines
-   \endgroup
-   \lastnegativepageno = \pageno
-   \global\pageno = \savepageno
+  \startcontents{\putwordTOC}%
+    \openin 1 \jobname.toc
+    \ifeof 1 \else
+      \input \jobname.toc
+    \fi
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+    \ifeof 1 \else
+      \pdfmakeoutlines
+    \fi
+    \closein 1
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
 }
 
 % And just the chapters.
 \def\summarycontents{%
-   \startcontents{\putwordShortTOC}%
-      %
-      \let\chapentry = \shortchapentry
-      \let\appendixentry = \shortappendixentry
-      \let\unnumbchapentry = \shortunnumberedentry
-      % We want a true roman here for the page numbers.
-      \secfonts
-      \let\rm=\shortcontrm \let\bf=\shortcontbf
-      \let\sl=\shortcontsl \let\tt=\shortconttt
-      \rm
-      \hyphenpenalty = 10000
-      \advance\baselineskip by 1pt % Open it up a little.
-      \def\secentry ##1##2##3##4{}
-      \def\subsecentry ##1##2##3##4##5{}
-      \def\subsubsecentry ##1##2##3##4##5##6{}
-      \let\unnumbsecentry = \secentry
-      \let\unnumbsubsecentry = \subsecentry
-      \let\unnumbsubsubsecentry = \subsubsecentry
-      \openin 1 \jobname.toc
-      \ifeof 1 \else
-        \closein 1
-        \input \jobname.toc
-      \fi
-     \vfill \eject
-     \contentsalignmacro % in case @setchapternewpage odd is in effect
-   \endgroup
-   \lastnegativepageno = \pageno
-   \global\pageno = \savepageno
+  \startcontents{\putwordShortTOC}%
+    %
+    \let\numchapentry = \shortchapentry
+    \let\appentry = \shortchapentry
+    \let\unnchapentry = \shortunnchapentry
+    % We want a true roman here for the page numbers.
+    \secfonts
+    \let\rm=\shortcontrm \let\bf=\shortcontbf
+    \let\sl=\shortcontsl \let\tt=\shortconttt
+    \rm
+    \hyphenpenalty = 10000
+    \advance\baselineskip by 1pt % Open it up a little.
+    \def\numsecentry##1##2##3##4{}
+    \let\appsecentry = \numsecentry
+    \let\unnsecentry = \numsecentry
+    \let\numsubsecentry = \numsecentry
+    \let\appsubsecentry = \numsecentry
+    \let\unnsubsecentry = \numsecentry
+    \let\numsubsubsecentry = \numsecentry
+    \let\appsubsubsecentry = \numsecentry
+    \let\unnsubsubsecentry = \numsecentry
+    \openin 1 \jobname.toc
+    \ifeof 1 \else
+      \input \jobname.toc
+    \fi
+    \closein 1
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
 }
 \let\shortcontents = \summarycontents
 
-\ifpdf
-  \pdfcatalog{/PageMode /UseOutlines}%
-\fi
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+  % This space should be enough, since a single number is .5em, and the
+  % widest letter (M) is 1em, at least in the Computer Modern fonts.
+  % But use \hss just in case.
+  % (This space doesn't include the extra space that gets added after
+  % the label; that gets put in by \shortchapentry above.)
+  % 
+  % We'd like to right-justify chapter numbers, but that looks strange
+  % with appendix letters.  And right-justifying numbers and
+  % left-justifying letters looks strange when there is less than 10
+  % chapters.  Have to read the whole toc once to know how many chapters
+  % there are before deciding ...
+  \hbox to 1em{#1\hss}%
+}
 
 % These macros generate individual entries in the table of contents.
 % The first argument is the chapter or section name.
@@ -4247,58 +4468,46 @@ width0pt\relax} \fi
 % The arguments in between are the chapter number, section number, ...
 
 % Chapters, in the main contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
 %
 % Chapters, in the short toc.
 % See comments in \dochapentry re vbox and related settings.
-\def\shortchapentry#1#2#3{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
+\def\shortchapentry#1#2#3#4{%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
 }
 
 % Appendices, in the main contents.
-\def\appendixentry#1#2#3{%
-  \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}}
-%
-% Appendices, in the short toc.
-\let\shortappendixentry = \shortchapentry
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-%
-\newdimen\shortappendixwidth
+% Need the word Appendix, and a fixed-size box.
+% 
+\def\appendixbox#1{%
+  % We use M since it's probably the widest letter.
+  \setbox0 = \hbox{\putwordAppendix{} M}%
+  \hbox to \wd0{\putwordAppendix{} #1\hss}}
 %
-\def\shortchaplabel#1{%
-  % This space should be enough, since a single number is .5em, and the
-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-  % But use \hss just in case.
-  % (This space doesn't include the extra space that gets added after
-  % the label; that gets put in by \shortchapentry above.)
-  \dimen0 = 1em
-  \hbox to \dimen0{#1\hss}%
-}
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
 
 % Unnumbered chapters.
-\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}}
-\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}}
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
 
 % Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
 
 % Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}}
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
 
 % And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
-  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}}
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
 
 % This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
 
 % Now for the actual typesetting. In all these, #1 is the text and #2 is the
 % page number.
@@ -4329,17 +4538,8 @@ width0pt\relax} \fi
   \tocentry{#1}{\dopageno\bgroup#2\egroup}%
 \endgroup}
 
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here.  (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-\def\tocentry#1#2{\begingroup
-  \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-  % Do not use \turnoffactive in these arguments.  Since the toc is
-  % typeset in cmr, characters such as _ would come out wrong; we
-  % have to do the usual translation tricks.
-  \entry{#1}{#2}%
-\endgroup}
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
 
 % Space between chapter (or whatever) number and the title.
 \def\labelspace{\hskip1em \relax}
@@ -4349,15 +4549,15 @@ width0pt\relax} \fi
 
 \def\chapentryfonts{\secfonts \rm}
 \def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
 
 
 \message{environments,}
 % @foo ... @end foo.
 
 % @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-% 
+%
 % Since these characters are used in examples, it should be an even number of
 % \tt widths. Each \tt character is 1en, so two makes it 1em.
 %
@@ -4369,7 +4569,7 @@ width0pt\relax} \fi
 
 % The @error{} command.
 % Adapted from the TeXbook's \boxit.
-% 
+%
 \newbox\errorbox
 %
 {\tentt \global\dimen0 = 3em}% Width of the box.
@@ -4377,10 +4577,10 @@ width0pt\relax} \fi
 % The text. (`r' is open on the right, `e' somewhat less so on the left.)
 \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
 %
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
+\setbox\errorbox=\hbox to \dimen0{\hfil
    \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
    \advance\hsize by -2\dimen2 % Rules.
-   \vbox{
+   \vbox{%
       \hrule height\dimen2
       \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
          \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
@@ -4394,14 +4594,13 @@ width0pt\relax} \fi
 % One exception: @ is still an escape character, so that @end tex works.
 % But \@ or @@ will get a plain tex @ character.
 
-\def\tex{\begingroup
+\envdef\tex{%
   \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
   \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
   \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
   \catcode `\%=14
   \catcode `\+=\other
   \catcode `\"=\other
-  \catcode `\==\other
   \catcode `\|=\other
   \catcode `\<=\other
   \catcode `\>=\other
@@ -4416,19 +4615,23 @@ width0pt\relax} \fi
   \let\equiv=\ptexequiv
   \let\!=\ptexexclam
   \let\i=\ptexi
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
   \let\{=\ptexlbrace
   \let\+=\tabalign
   \let\}=\ptexrbrace
+  \let\/=\ptexslash
   \let\*=\ptexstar
   \let\t=\ptext
   %
   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
   \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
   \def\@{@}%
-\let\Etex=\endgroup}
+}
+% There is no need to define \Etex.
 
 % Define @lisp ... @end lisp.
-% @lisp does a \begingroup so it can rebind things,
+% @lisp environment forms a group so it can rebind things,
 % including the definition of @end lisp (which normally is erroneous).
 
 % Amount to narrow the margins by for @lisp.
@@ -4439,19 +4642,6 @@ width0pt\relax} \fi
 % have any width.
 \def\lisppar{\null\endgraf}
 
-% Make each space character in the input produce a normal interword
-% space in the output.  Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is.  This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
 % This space is always present above and below environments.
 \newskip\envskipamount \envskipamount = 0pt
 
@@ -4469,7 +4659,7 @@ width0pt\relax} \fi
       \removelastskip
       % it's not a good place to break if the last penalty was \nobreak
       % or better ...
-      \ifnum\lastpenalty>10000 \else \penalty-50 \fi
+      \ifnum\lastpenalty<10000 \penalty-50 \fi
       \vskip\envskipamount
     \fi
   \fi
@@ -4501,52 +4691,52 @@ width0pt\relax} \fi
 %
 \newskip\lskip\newskip\rskip
 
-\def\cartouche{%
-\par  % can't be in the midst of a paragraph.
-\begingroup
-        \lskip=\leftskip \rskip=\rightskip
-        \leftskip=0pt\rightskip=0pt %we want these *outside*.
-        \cartinner=\hsize \advance\cartinner by-\lskip
-                          \advance\cartinner by-\rskip
-        \cartouter=\hsize
-        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
-%                                    side, and for 6pt waste from
-%                                    each corner char, and rule thickness
-        \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-        % Flag to tell @lisp, etc., not to narrow margin.
-        \let\nonarrowing=\comment
-        \vbox\bgroup
-                \baselineskip=0pt\parskip=0pt\lineskip=0pt
-                \carttop
-                \hbox\bgroup
-                        \hskip\lskip
-                        \vrule\kern3pt
-                        \vbox\bgroup
-                                \hsize=\cartinner
-                                \kern3pt
-                                \begingroup
-                                        \baselineskip=\normbskip
-                                        \lineskip=\normlskip
-                                        \parskip=\normpskip
-                                        \vskip -\parskip
+\envdef\cartouche{%
+  \ifhmode\par\fi  % can't be in the midst of a paragraph.
+  \startsavinginserts
+  \lskip=\leftskip \rskip=\rightskip
+  \leftskip=0pt\rightskip=0pt % we want these *outside*.
+  \cartinner=\hsize \advance\cartinner by-\lskip
+  \advance\cartinner by-\rskip
+  \cartouter=\hsize
+  \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+                               % side, and for 6pt waste from
+                               % each corner char, and rule thickness
+  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+  % Flag to tell @lisp, etc., not to narrow margin.
+  \let\nonarrowing=\comment
+  \vbox\bgroup
+      \baselineskip=0pt\parskip=0pt\lineskip=0pt
+      \carttop
+      \hbox\bgroup
+         \hskip\lskip
+         \vrule\kern3pt
+         \vbox\bgroup
+             \kern3pt
+             \hsize=\cartinner
+             \baselineskip=\normbskip
+             \lineskip=\normlskip
+             \parskip=\normpskip
+             \vskip -\parskip
+             \comment % For explanation, see the end of \def\group.
+}
 \def\Ecartouche{%
-                                \endgroup
-                                \kern3pt
-                        \egroup
-                        \kern3pt\vrule
-                        \hskip\rskip
-                \egroup
-                \cartbot
-        \egroup
-\endgroup
-}}
+              \ifhmode\par\fi
+             \kern3pt
+         \egroup
+         \kern3pt\vrule
+         \hskip\rskip
+      \egroup
+      \cartbot
+  \egroup
+  \checkinserts
+}
 
 
 % This macro is called at the beginning of all the @example variants,
 % inside a group.
 \def\nonfillstart{%
   \aboveenvbreak
-  \inENV % This group ends at the end of the body
   \hfuzz = 12pt % Don't be fussy
   \sepspaces % Make spaces be word-separators rather than space tokens.
   \let\par = \lisppar % don't ignore blank lines
@@ -4559,103 +4749,99 @@ width0pt\relax} \fi
   \ifx\nonarrowing\relax
     \advance \leftskip by \lispnarrowing
     \exdentamount=\lispnarrowing
-    \let\exdent=\nofillexdent
-    \let\nonarrowing=\relax
   \fi
+  \let\exdent=\nofillexdent
 }
 
-% Define the \E... control sequence only if we are inside the particular
-% environment, so the error checking in \end will work.
-%
-% To end an @example-like environment, we first end the paragraph (via
-% \afterenvbreak's vertical glue), and then the group.  That way we keep
-% the zero \parskip that the environments set -- \parskip glue will be
-% inserted at the beginning of the next paragraph in the document, after
-% the environment.
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+%    @example, @display, @format, @lisp
 %
-\def\nonfillfinish{\afterenvbreak\endgroup}
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+  \ifx\SETdispenvsize\smallword
+    \smallexamplefonts \rm
+  \fi
+}
+\def\setsmalldispenv{%
+  \ifx\SETdispenvsize\nosmallword
+  \else
+    \smallexamplefonts \rm
+  \fi
+}
 
-% @lisp: indented, narrowed, typewriter font.
-\def\lisp{\begingroup
-  \nonfillstart
-  \let\Elisp = \nonfillfinish
-  \tt
-  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-  \gobble       % eat return
+% We often define two environments, @foo and @smallfoo.
+% Let's do it by one command:
+\def\makedispenv #1#2{
+  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
+  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+  \expandafter\let\csname E#1\endcsname \afterenvbreak
+  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
 }
 
-% @example: Same as @lisp.
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
+% Define two synonyms:
+\def\maketwodispenvs #1#2#3{
+  \makedispenv{#1}{#3}
+  \makedispenv{#2}{#3}
+}
 
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
 % @smallexample and @smalllisp: use smaller fonts.
 % Originally contributed by Pavel@xerox.
-\def\smalllisp{\begingroup
-  \def\Esmalllisp{\nonfillfinish\endgroup}%
-  \def\Esmallexample{\nonfillfinish\endgroup}%
-  \smallexamplefonts
-  \lisp
+%
+\maketwodispenvs {lisp}{example}{%
+  \nonfillstart
+  \tt
+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+  \gobble       % eat return
 }
-\let\smallexample = \smalllisp
 
-
-% @display: same as @lisp except keep current font.
+% @display/@smalldisplay: same as @lisp except keep current font.
 %
-\def\display{\begingroup
+\makedispenv {display}{%
   \nonfillstart
-  \let\Edisplay = \nonfillfinish
   \gobble
 }
-%
-% @smalldisplay: @display plus smaller fonts.
-%
-\def\smalldisplay{\begingroup
-  \def\Esmalldisplay{\nonfillfinish\endgroup}%
-  \smallexamplefonts \rm
-  \display
-}
 
-% @format: same as @display except don't narrow margins.
+% @format/@smallformat: same as @display except don't narrow margins.
 %
-\def\format{\begingroup
-  \let\nonarrowing = t
+\makedispenv{format}{%
+  \let\nonarrowing = t%
   \nonfillstart
-  \let\Eformat = \nonfillfinish
   \gobble
 }
-%
-% @smallformat: @format plus smaller fonts.
-%
-\def\smallformat{\begingroup
-  \def\Esmallformat{\nonfillfinish\endgroup}%
-  \smallexamplefonts \rm
-  \format
-}
 
-% @flushleft (same as @format).
-%
-\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \gobble
+}
+\let\Eflushleft = \afterenvbreak
 
 % @flushright.
 %
-\def\flushright{\begingroup
-  \let\nonarrowing = t
+\envdef\flushright{%
+  \let\nonarrowing = t%
   \nonfillstart
-  \let\Eflushright = \nonfillfinish
   \advance\leftskip by 0pt plus 1fill
   \gobble
 }
+\let\Eflushright = \afterenvbreak
 
 
 % @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
+% and narrows the margins.  We keep \parskip nonzero in general, since
+% we're doing normal filling.  So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
 %
-\def\quotation{%
-  \begingroup\inENV %This group ends at the end of the @quotation body
+\envdef\quotation{%
   {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
   \parindent=0pt
-  % We have retained a nonzero parskip for the environment, since we're
-  % doing normal filling. So to avoid extra space below the environment...
-  \def\Equotation{\parskip = 0pt \nonfillfinish}%
   %
   % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
   \ifx\nonarrowing\relax
@@ -4664,11 +4850,32 @@ width0pt\relax} \fi
     \exdentamount = \lispnarrowing
     \let\nonarrowing = \relax
   \fi
+  \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+% 
+\def\Equotation{%
+  \par
+  \ifx\quotationauthor\undefined\else
+    % indent a bit.
+    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+  \fi
+  {\parskip=0pt \afterenvbreak}%
+}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty \else
+    {\bf #1: }%
+  \fi
 }
 
 
 % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
-% If we want to allow any <char> as delimiter, 
+% If we want to allow any <char> as delimiter,
 % we need the curly braces so that makeinfo sees the @verb command, eg:
 % `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
 %
@@ -4685,7 +4892,7 @@ width0pt\relax} \fi
 %
 % [Knuth] p. 380
 \def\uncatcodespecials{%
-  \def\do##1{\catcode`##1=12}\dospecials}
+  \def\do##1{\catcode`##1=\other}\dospecials}
 %
 % [Knuth] pp. 380,381,391
 % Disable Spanish ligatures ?` and !` of \tt font
@@ -4733,6 +4940,8 @@ width0pt\relax} \fi
   }
 \endgroup
 \def\setupverbatim{%
+  \nonfillstart
+  \advance\leftskip by -\defbodyindent
   % Easiest (and conventionally used) font for verbatim
   \tt
   \def\par{\leavevmode\egroup\box0\endgraf}%
@@ -4746,15 +4955,15 @@ width0pt\relax} \fi
   \everypar{\starttabbox}%
 }
 
-% Do the @verb magic: verbatim text is quoted by unique 
-% delimiter characters.  Before first delimiter expect a 
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters.  Before first delimiter expect a
 % right brace, after last delimiter expect closing brace:
 %
 %    \def\doverb'{'<char>#1<char>'}'{#1}
 %
 % [Knuth] p. 382; only eat outer {}
 \begingroup
-  \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
+  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
   \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
 \endgroup
 %
@@ -4766,18 +4975,11 @@ width0pt\relax} \fi
 %
 %     \def\doverbatim#1@end verbatim{#1}
 %
-% For Texinfo it's a lot easier than for LaTeX, 
+% For Texinfo it's a lot easier than for LaTeX,
 % because texinfo's \verbatim doesn't stop at '\end{verbatim}':
 % we need not redefine '\', '{' and '}'.
 %
 % Inspired by LaTeX's verbatim command set [latex.ltx]
-%% Include LaTeX hack for completeness -- never know
-%% \begingroup
-%% \catcode`|=0 \catcode`[=1
-%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
-%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
-%% #1|endgroup|def|Everbatim[]|end[verbatim]]
-%% |endgroup
 %
 \begingroup
   \catcode`\ =\active
@@ -4785,62 +4987,41 @@ width0pt\relax} \fi
   % ignore everything up to the first ^^M, that's the newline at the end
   % of the @verbatim input line itself.  Otherwise we get an extra blank
   % line in the output.
-  \gdef\doverbatim#1^^M#2@end verbatim{#2\end{verbatim}}%
+  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+  % We really want {...\end verbatim} in the body of the macro, but
+  % without the active space; thus we have to use \xdef and \gobble.
 \endgroup
 %
-\def\verbatim{%
-  \def\Everbatim{\nonfillfinish\endgroup}%
-  \begingroup
-    \nonfillstart
-    \advance\leftskip by -\defbodyindent
-    \begingroup\setupverbatim\doverbatim
+\envdef\verbatim{%
+    \setupverbatim\doverbatim
 }
+\let\Everbatim = \afterenvbreak
+
 
 % @verbatiminclude FILE - insert text of file in verbatim environment.
 %
-% Allow normal characters that we make active in the argument (a file name).
-\def\verbatiminclude{%
-  \begingroup
-    \catcode`\\=\other
-    \catcode`~=\other
-    \catcode`^=\other
-    \catcode`_=\other
-    \catcode`|=\other
-    \catcode`<=\other
-    \catcode`>=\other
-    \catcode`+=\other
-    \parsearg\doverbatiminclude
-}
-\def\setupverbatiminclude{%
-  \begingroup
-    \nonfillstart
-    \advance\leftskip by -\defbodyindent
-    \begingroup\setupverbatim
-}
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
 %
 \def\doverbatiminclude#1{%
-     % Restore active chars for included file.
-  \endgroup
-  \begingroup
-    \let\value=\expandablevalue
-    \def\thisfile{#1}%
-    \expandafter\expandafter\setupverbatiminclude\input\thisfile
-  \endgroup
-  \nonfillfinish
-  \endgroup
+  {%
+    \makevalueexpandable
+    \setupverbatim
+    \input #1
+    \afterenvbreak
+  }%
 }
 
 % @copying ... @end copying.
 % Save the text away for @insertcopying later.  Many commands won't be
 % allowed in this context, but that's ok.
-% 
+%
 % We save the uninterpreted tokens, rather than creating a box.
 % Saving the text in a box would be much easier, but then all the
 % typesetting commands (@smallbook, font changes, etc.) have to be done
 % beforehand -- and a) we want @copying to be done first in the source
 % file; b) letting users define the frontmatter in as flexible order as
 % possible is very desirable.
-% 
+%
 \def\copying{\begingroup
   % Define a command to swallow text until we reach `@end copying'.
   % \ is the escape char in this texinfo.tex file, so it is the
@@ -4863,15 +5044,15 @@ width0pt\relax} \fi
 % end-of-line to be a \par, as would happen with the normal active
 % definition of ^^M.  On the third hand, two ^^M's in a row should still
 % generate a \par.
-% 
+%
 % Our approach is to make ^^M insert a space and a penalty1 normally;
 % then it can also check if \lastpenalty=1.  If it does, then manually
 % do \par.
-% 
+%
 % This messes up the normal definitions of @c[omment], so we redefine
 % it.  Similarly for @ignore.  (These commands are used in the gcc
 % manual for man page generation.)
-% 
+%
 % Seems pretty fragile, most line-oriented commands will presumably
 % fail, but for the limited use of getting the copying text (which
 % should be quite simple) inserted, we can hope it's ok.
@@ -4902,580 +5083,335 @@ width0pt\relax} \fi
 \message{defuns,}
 % @defun etc.
 
-% Allow user to change definition object font (\df) internally
-\def\setdeffont#1 {\csname DEF#1\endcsname}
-
 \newskip\defbodyindent \defbodyindent=.4in
 \newskip\defargsindent \defargsindent=50pt
 \newskip\deflastargmargin \deflastargmargin=18pt
 
-\newcount\parencount
-
-% We want ()&[] to print specially on the defun line.
-% 
-\def\activeparens{%
-  \catcode`\(=\active \catcode`\)=\active
-  \catcode`\&=\active
-  \catcode`\[=\active \catcode`\]=\active
-}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
-% Be sure that we always have a definition for `(', etc.  For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
-  \global\advance\parencount by 1
-}
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-  % also in that case restore the outer-level definition of (.
-  \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-  \global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text.  This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\let\ampnr = \&
-\def\lbrb{{\bf\char`\[}}
-\def\rbrb{{\bf\char`\]}}
-
-% Active &'s sneak into the index arguments, so make sure it's defined.
-{
-  \catcode`& = \active
-  \global\let& = \ampnr
-}
-
-% \defname, which formats the name of the @def (not the args).
-% #1 is the function name.
-% #2 is the type of definition, such as "Function".
-%
-\def\defname#1#2{%
-  % How we'll output the type name.  Putting it in brackets helps
-  % distinguish it from the body text that may end up on the next line
-  % just below it.
-  \ifempty{#2}%
-    \def\defnametype{}%
+% Start the processing of @deffn:
+\def\startdefun{%
+  \ifnum\lastpenalty<10000
+    \medbreak
   \else
-    \def\defnametype{[\rm #2]}%
+    % If there are two @def commands in a row, we'll have a \nobreak,
+    % which is there to keep the function description together with its
+    % header.  But if there's nothing but headers, we need to allow a
+    % break somewhere.  Check for penalty 10002 (inserted by
+    % \defargscommonending) instead of 10000, since the sectioning
+    % commands insert a \penalty10000, and we don't want to allow a break
+    % between a section heading and a defun.
+    \ifnum\lastpenalty=10002 \penalty2000 \fi
+    %
+    % Similarly, after a section heading, do not allow a break.
+    % But do insert the glue.
+    \medskip  % preceded by discardable penalty, so not a breakpoint
   \fi
   %
-  % Get the values of \leftskip and \rightskip as they were outside the @def...
-  \dimen2=\leftskip
-  \advance\dimen2 by -\defbodyindent
-  %
-  % Figure out values for the paragraph shape.
-  \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}%
-  \dimen0=\hsize \advance \dimen0 by -\wd0  % compute size for first line
-  \dimen1=\hsize \advance \dimen1 by -\defargsindent  % size for continuations
-  \parshape 2 0in \dimen0 \defargsindent \dimen1
-  %
-  % Output arg 2 ("Function" or some such) but stuck inside a box of
-  % width 0 so it does not interfere with linebreaking.
-  \noindent
-  %
-  {% Adjust \hsize to exclude the ambient margins,
-   % so that \rightline will obey them.
-   \advance \hsize by -\dimen2
-   \dimen3 = 0pt  % was -1.25pc
-   \rlap{\rightline{\defnametype\kern\dimen3}}%
-  }%
-  %
-  % Allow all lines to be underfull without complaint:
-  \tolerance=10000 \hbadness=10000
-  \advance\leftskip by -\defbodyindent
-  \exdentamount=\defbodyindent
-  {\df #1}\enskip        % output function name
-  % \defunargs will be called next to output the arguments, if any.
-}
-
-% Common pieces to start any @def...
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence (which our caller defines).
-% #3 is the control sequence to process the header, such as \defunheader.
-% 
-\def\parsebodycommon#1#2#3{%
-  \begingroup\inENV
-  % If there are two @def commands in a row, we'll have a \nobreak,
-  % which is there to keep the function description together with its
-  % header.  But if there's nothing but headers, we want to allow a
-  % break after all.  Check for penalty 10002 (inserted by
-  % \defargscommonending) instead of 10000, since the sectioning
-  % commands insert a \penalty10000, and we don't want to allow a break
-  % between a section heading and a defun.
-  \ifnum\lastpenalty=10002 \penalty0 \fi
-  \medbreak
-  %
-  % Define the \E... end token that this defining construct specifies
-  % so that it will exit this group.
-  \def#1{\endgraf\endgroup\medbreak}%
-  %
   \parindent=0in
   \advance\leftskip by \defbodyindent
   \exdentamount=\defbodyindent
 }
 
-% Common part of the \...x definitions.
-% 
-\def\defxbodycommon{%
-  % As with \parsebodycommon above, allow line break if we have multiple
-  % x headers in a row.  It's not a great place, though.
-  \ifnum\lastpenalty=10000 \penalty1000 \fi
+\def\dodefunx#1{%
+  % First, check whether we are in the right environment:
+  \checkenv#1%
   %
-  \begingroup\obeylines
-}
-
-% Process body of @defun, @deffn, @defmac, etc.
-%
-\def\defparsebody#1#2#3{%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2{\defxbodycommon \activeparens \spacesplit#3}%
-  \catcode\equalChar=\active
-  \begingroup\obeylines\activeparens
-  \spacesplit#3%
-}
-
-% #1, #2, #3 are the common arguments (see \parsebodycommon above).
-% #4, delimited by the space, is the class name.
-%
-\def\defmethparsebody#1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}%
-  \begingroup\obeylines\activeparens
-  % The \empty here prevents misinterpretation of a construct such as
-  %   @deffn {whatever} {Enharmonic comma}
-  % See comments at \deftpparsebody, although in our case we don't have
-  % to remove the \empty afterwards, since it is empty.
-  \spacesplit{#3{#4}}\empty
+  % As above, allow line break if we have multiple x headers in a row.
+  % It's not a great place, though.
+  \ifnum\lastpenalty=10002 \penalty3000 \fi
+  %
+  % And now, it's time to reuse the body of the original defun:
+  \expandafter\gobbledefun#1%
 }
+\def\gobbledefun#1\startdefun{}
 
-% Used for @deftypemethod and @deftypeivar.
-% #1, #2, #3 are the common arguments (see \defparsebody).
-% #4, delimited by a space, is the class name.
-% #5 is the method's return type.
+% \printdefunline \deffnheader{text}
 %
-\def\deftypemethparsebody#1#2#3#4 #5 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}%
-  \begingroup\obeylines\activeparens
-  \spacesplit{#3{#4}{#5}}%
-}
-
-% Used for @deftypeop.  The change from \deftypemethparsebody is an
-% extra argument at the beginning which is the `category', instead of it
-% being the hardwired string `Method' or `Instance Variable'.  We have
-% to account for this both in the \...x definition and in parsing the
-% input at hand.  Thus also need a control sequence (passed as #5) for
-% the \E... definition to assign the category name to.
-% 
-\def\deftypeopparsebody#1#2#3#4#5 #6 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 ##3 {\def#4{##1}%
-    \defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}%
-  \begingroup\obeylines\activeparens
-  \spacesplit{#3{#5}{#6}}%
+\def\printdefunline#1#2{%
+  \begingroup
+    % call \deffnheader:
+    #1#2 \endheader
+    % common ending:
+    \interlinepenalty = 10000
+    \advance\rightskip by 0pt plus 1fil
+    \endgraf
+    \nobreak\vskip -\parskip
+    \penalty 10002  % signal to \startdefun and \dodefunx
+    % Some of the @defun-type tags do not enable magic parentheses,
+    % rendering the following check redundant.  But we don't optimize.
+    \checkparencounts
+  \endgroup
 }
 
-% For @defop.
-\def\defopparsebody #1#2#3#4#5 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 {\def#4{##1}%
-    \defxbodycommon \activeparens \spacesplit{#3{##2}}}%
-  \begingroup\obeylines\activeparens
-  \spacesplit{#3{#5}}%
-}
+\def\Edefun{\endgraf\medbreak}
 
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remainnig is to define \deffnheader.
 %
-\def\defvarparsebody #1#2#3{%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2{\defxbodycommon \spacesplit#3}%
-  \catcode\equalChar=\active
-  \begingroup\obeylines
-  \spacesplit#3%
-}
-
-% @defopvar.
-\def\defopvarparsebody #1#2#3#4#5 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 {\def#4{##1}%
-    \defxbodycommon \spacesplit{#3{##2}}}%
-  \begingroup\obeylines
-  \spacesplit{#3{#5}}%
-}
-
-\def\defvrparsebody#1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
-  \begingroup\obeylines
-  \spacesplit{#3{#4}}%
+\def\makedefun#1{%
+  \expandafter\let\csname E#1\endcsname = \Edefun
+  \edef\temp{\noexpand\domakedefun
+    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+  \temp
 }
 
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument.  Sigh.
-% \let\deftpparsebody=\defvrparsebody
+% \domakedefun \deffn \deffnx \deffnheader
 %
-% So, to get around this, we put \empty in with the type name.  That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
 %
-\def\deftpparsebody #1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
-  \begingroup\obeylines
-  \spacesplit{\parsetpheaderline{#3{#4}}}\empty
+\def\domakedefun#1#2#3{%
+  \envdef#1{%
+    \startdefun
+    \parseargusing\activeparens{\printdefunline#3}%
+  }%
+  \def#2{\dodefunx#1}%
+  \def#3%
 }
 
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any).  That's what this does.
-%
-\def\removeemptybraces\empty#1\relax{#1}
+%%% Untyped functions:
 
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-%
-\def\parsetpheaderline#1#2#3{%
-  #1{\removeemptybraces#2\relax}{#3}%
-}%
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
 
-% Split up #2 (the rest of the input line) at the first space token.
-% call #1 with two arguments:
-%  the first is all of #2 before the space token,
-%  the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-%
-{\obeylines %
- \gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}%
- \long\gdef\spacesplitx#1#2 #3#4\spacesplitx{%
-   \ifx\relax #3%
-     #1{#2}{}%
-   \else %
-     #1{#2}{#3#4}%
-   \fi}%
-}
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
 
-% Define @defun.
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
 
-% This is called to end the arguments processing for all the @def... commands.
+% \deffngeneral {subind}category name args
 %
-\def\defargscommonending{%
-  \interlinepenalty = 10000
-  \advance\rightskip by 0pt plus 1fil
-  \endgraf
-  \nobreak\vskip -\parskip
-  \penalty 10002  % signal to \parsebodycommon.
-}
-
-% This expands the args and terminates the paragraph they comprise.
-% 
-\def\defunargs#1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Set the font temporarily and use \font in case \setfont made \tensl a macro.
-{\tensl\hyphenchar\font=0}%
-#1%
-{\tensl\hyphenchar\font=45}%
-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
-  \defargscommonending
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
-  \defargscommonending
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
+\def\deffngeneral#1#2 #3 #4\endheader{%
+  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+  \dosubind{fn}{\code{#3}}{#1}%
+  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
 }
 
-% @defun == @deffn Function
+%%% Typed functions:
 
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
 
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDeffunc}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
 
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
 
-% #1 is the data type.  #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
-\deftypefunargs {#3}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{fn}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
 }
 
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+%%% Typed variables:
 
-% \defheaderxcond#1\relax$.$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification.  #2 is the data type.  #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-%               at least some C++ text from working
-\defname {\defheaderxcond#2\relax$.$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
 
-% @defmac == @deffn Macro
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
 
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
 
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefmac}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{vr}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
 }
 
-% @defspec == @deffn Special Form
+%%% Untyped variables:
 
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
 
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefspec}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
 
-% @defop CATEGORY CLASS OPERATION ARG...
-%
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-%
-\def\defopheader#1#2#3{%
-  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% function index entry
-  \begingroup
-    \defname{#2}{\defoptype\ \putwordon\ #1}%
-    \defunargs{#3}%
-  \endgroup
-}
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
 
-% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
-%
-\def\deftypeop #1 {\def\deftypeopcategory{#1}%
-  \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
-                       \deftypeopcategory}
-%
-% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
-\def\deftypeopheader#1#2#3#4{%
-  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{\defheaderxcond#2\relax$.$#3}
-            {\deftypeopcategory\ \putwordon\ \code{#1}}%
-    \deftypefunargs{#4}%
-  \endgroup
+%%% Type:
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+  \doind{tp}{\code{#2}}%
+  \defname{#1}{}{#2}\defunargs{#3\unskip}%
 }
 
-% @deftypemethod CLASS TYPE METHOD ARG...
-%
-\def\deftypemethod{%
-  \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-%
-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-\def\deftypemethodheader#1#2#3#4{%
-  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
-    \deftypefunargs{#4}%
-  \endgroup
-}
-
-% @deftypeivar CLASS TYPE VARNAME
-%
-\def\deftypeivar{%
-  \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
-%
-% #1 is the class name, #2 the data type, #3 the variable name.
-\def\deftypeivarheader#1#2#3{%
-  \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
-  \begingroup
-    \defname{\defheaderxcond#2\relax$.$#3}
-            {\putwordInstanceVariableof\ \code{#1}}%
-    \defvarargs{#3}%
-  \endgroup
-}
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
 
-% @defmethod == @defop Method
-%
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+% 
+% We are followed by (but not passed) the arguments, if any.
 %
-% #1 is the class name, #2 the method name, #3 the args.
-\def\defmethodheader#1#2#3{%
-  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{#2}{\putwordMethodon\ \code{#1}}%
-    \defunargs{#3}%
-  \endgroup
+\def\defname#1#2#3{%
+  % Get the values of \leftskip and \rightskip as they were outside the @def...
+  \advance\leftskip by -\defbodyindent
+  %
+  % How we'll format the type name.  Putting it in brackets helps
+  % distinguish it from the body text that may end up on the next line
+  % just below it.
+  \def\temp{#1}%
+  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+  %
+  % Figure out line sizes for the paragraph shape.
+  % The first line needs space for \box0; but if \rightskip is nonzero,
+  % we need only space for the part of \box0 which exceeds it:
+  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
+  % The continuations:
+  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
+  % (plain.tex says that \dimen1 should be used only as global.)
+  \parshape 2 0in \dimen0 \defargsindent \dimen2
+  %
+  % Put the type name to the right margin.
+  \noindent
+  \hbox to 0pt{%
+    \hfil\box0 \kern-\hsize
+    % \hsize has to be shortened this way:
+    \kern\leftskip
+    % Intentionally do not respect \rightskip, since we need the space.
+  }%
+  %
+  % Allow all lines to be underfull without complaint:
+  \tolerance=10000 \hbadness=10000
+  \exdentamount=\defbodyindent
+  {%
+    % defun fonts. We use typewriter by default (used to be bold) because:
+    % . we're printing identifiers, they should be in tt in principle.
+    % . in languages with many accents, such as Czech or French, it's
+    %   common to leave accents off identifiers.  The result looks ok in
+    %   tt, but exceedingly strange in rm.
+    % . we don't want -- and --- to be treated as ligatures.
+    % . this still does not fix the ?` and !` ligatures, but so far no
+    %   one has made identifiers using them :).
+    \df \tt
+    \def\temp{#2}% return value type
+    \ifx\temp\empty\else \tclose{\temp} \fi
+    #3% output function name
+  }%
+  {\rm\enskip}% hskip 0.5 em of \tenrm
+  %
+  \boldbrax
+  % arguments will be output next, if any.
 }
 
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
-  \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% variable index entry
-  \begingroup
-    \defname{#2}{\defcvtype\ \putwordof\ #1}%
-    \defvarargs{#3}%
-  \endgroup
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name.  This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable.  Prevent hyphenation at `-' chars.
+% 
+\def\defunargs#1{%
+  % use sl by default (not ttsl), 
+  % tt for the names.
+  \df \sl \hyphenchar\font=0
+  %
+  % On the other hand, if an argument has two dashes (for instance), we
+  % want a way to get ttsl.  Let's try @var for that.
+  \let\var=\ttslanted
+  #1%
+  \sl\hyphenchar\font=45
 }
 
-% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
-%
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
+% We want ()&[] to print specially on the defun line.
 %
-\def\defivarheader#1#2#3{%
-  \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% entry in var index
-  \begingroup
-    \defname{#2}{\putwordInstanceVariableof\ #1}%
-    \defvarargs{#3}%
-  \endgroup
-}
-
-% @defvar
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-  \defargscommonending
-}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefvar}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefopt}%
-\defvarargs {#2}\endgroup %
+\def\activeparens{%
+  \catcode`\(=\active \catcode`\)=\active
+  \catcode`\[=\active \catcode`\]=\active
+  \catcode`\&=\active
 }
 
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type.  #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
-  \defargscommonending
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
 
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
-  \defargscommonending
-\endgroup}
+% Be sure that we always have a definition for `(', etc.  For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+  \activeparens
+  \global\let(=\lparen \global\let)=\rparen
+  \global\let[=\lbrack \global\let]=\rbrack
+  \global\let& = \&
 
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
+  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+  \gdef\magicamp{\let&=\amprm}
+}
 
-\def\deftpargs #1{\bf \defvarargs{#1}}
+\newcount\parencount
 
-% @deftp Class window height width ...
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+  \ifampseen
+    % At the first level, print parens in roman,
+    % otherwise use the default font.
+    \ifnum \parencount=1 \rm \fi
+  \else
+    % The \sf parens (in \boldbrax) actually are a little bolder than
+    % the contained text.  This is especially needed for [ and ] .
+    \sf
+  \fi
+}
+\def\infirstlevel#1{%
+  \ifampseen
+    \ifnum\parencount=1
+      #1%
+    \fi
+  \fi
+}
+\def\bfafterword#1 {#1 \bf}
 
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
+\def\opnr{%
+  \global\advance\parencount by 1
+  {\parenfont(}%
+  \infirstlevel \bfafterword
+}
+\def\clnr{%
+  {\parenfont)}%
+  \infirstlevel \sl
+  \global\advance\parencount by -1
+}
 
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+\newcount\brackcount
+\def\lbrb{%
+  \global\advance\brackcount by 1
+  {\bf[}%
+}
+\def\rbrb{%
+  {\bf]}%
+  \global\advance\brackcount by -1
+}
 
-% These definitions are used if you use @defunx (etc.)
-% anywhere other than immediately after a @defun or @defunx.
-% 
-\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
-\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
-\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
-\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
-\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\defopx#1 {\errmessage{@defopx in invalid context}}
-\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
-\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
-\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
-\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
-\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
-\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
-\def\defunx#1 {\errmessage{@defunx in invalid context}}
-\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
-\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
+\def\checkparencounts{%
+  \ifnum\parencount=0 \else \badparencount \fi
+  \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+\def\badparencount{%
+  \errmessage{Unbalanced parentheses in @def}%
+  \global\parencount=0
+}
+\def\badbrackcount{%
+  \errmessage{Unbalanced square braces in @def}%
+  \global\brackcount=0
+}
 
 
 \message{macros,}
@@ -5484,28 +5420,33 @@ width0pt\relax} \fi
 % To do this right we need a feature of e-TeX, \scantokens,
 % which we arrange to emulate with a temporary file in ordinary TeX.
 \ifx\eTeXversion\undefined
- \newwrite\macscribble
- \def\scanmacro#1{%
-   \begingroup \newlinechar`\^^M
-   % Undo catcode changes of \startcontents and \doprintindex
-   \catcode`\@=0 \catcode`\\=\other \escapechar=`\@
-   % Append \endinput to make sure that TeX does not see the ending newline.
-   \toks0={#1\endinput}%
-   \immediate\openout\macscribble=\jobname.tmp
-   \immediate\write\macscribble{\the\toks0}%
-   \immediate\closeout\macscribble
-   \let\xeatspaces\eatspaces
-   \input \jobname.tmp
-   \endgroup
-}
-\else
-\def\scanmacro#1{%
-\begingroup \newlinechar`\^^M
-% Undo catcode changes of \startcontents and \doprintindex
-\catcode`\@=0 \catcode`\\=\other \escapechar=`\@
-\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
+  \newwrite\macscribble
+  \def\scantokens#1{%
+    \toks0={#1\endinput}%
+    \immediate\openout\macscribble=\jobname.tmp
+    \immediate\write\macscribble{\the\toks0}%
+    \immediate\closeout\macscribble
+    \input \jobname.tmp
+  }
 \fi
 
+\def\scanmacro#1{%
+  \begingroup
+    \newlinechar`\^^M
+    \let\xeatspaces\eatspaces
+    % Undo catcode changes of \startcontents and \doprintindex
+    \catcode`\@=0 \catcode`\\=\other \escapechar=`\@
+    % ... and \example
+    \spaceisspace
+    %
+    % Append \endinput to make sure that TeX does not see the ending newline.
+    %
+    % I've verified that it is necessary both for e-TeX and for ordinary TeX
+    %                                                  --kasal, 29nov03
+    \scantokens{#1\endinput}%
+  \endgroup
+}
+
 \newcount\paramno   % Count of parameters
 \newtoks\macname    % Macro name
 \newif\ifrecursive  % Is it recursive?
@@ -5513,7 +5454,7 @@ width0pt\relax} \fi
                     % \do\macro1\do\macro2...
 
 % Utility routines.
-% Thisdoes \let #1 = #2, except with \csnames.
+% This does \let #1 = #2, except with \csnames.
 \def\cslet#1#2{%
 \expandafter\expandafter
 \expandafter\let
@@ -5610,8 +5551,7 @@ width0pt\relax} \fi
   \else \expandafter\parsemacbody
   \fi}
 
-\def\unmacro{\parsearg\dounmacro}
-\def\dounmacro#1{%
+\parseargdef\unmacro{%
   \if1\csname ismacro.#1\endcsname
     \global\cslet{#1}{macsave.#1}%
     \global\expandafter\let \csname ismacro.#1\endcsname=0%
@@ -5628,7 +5568,7 @@ width0pt\relax} \fi
 
 % Called by \do from \dounmacro on each macro.  The idea is to omit any
 % macro definitions that have been changed to \relax.
-% 
+%
 \def\unmacrodo#1{%
   \ifx#1\relax
     % remove this
@@ -5761,16 +5701,18 @@ width0pt\relax} \fi
 % @alias.
 % We need some trickery to remove the optional spaces around the equal
 % sign.  Just make them active and then expand them all to nothing.
-\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
 \def\aliasxxx #1{\aliasyyy#1\relax}
-\def\aliasyyy #1=#2\relax{\ignoreactivespaces
-\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
-           \expandafter\noexpand\csname#2\endcsname}%
-\expandafter\endgroup\next}
+\def\aliasyyy #1=#2\relax{%
+  {%
+    \expandafter\let\obeyedspace=\empty
+    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+  }%
+  \next
+}
 
 
 \message{cross references,}
-% @xref etc.
 
 \newwrite\auxfile
 
@@ -5782,64 +5724,61 @@ width0pt\relax} \fi
 \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
   node \samp{\ignorespaces#1{}}}
 
-% @node's job is to define \lastnode.
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references.
+\parseargdef\node{\checkenv{}\nodexxx #1,\finishnodeparse}
+\def\nodexxx#1,#2\finishnodeparse{\gdef\lastnode{#1}}
 \let\nwnode=\node
-\let\lastnode=\relax
-
-% The sectioning commands (@chapter, etc.) call these.
-\def\donoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}%
-      {Ysectionnumberandtype}%
-    \global\let\lastnode=\relax
-  \fi
-}
-\def\unnumbnoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
-    \global\let\lastnode=\relax
-  \fi
-}
-\def\appendixnoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}%
-      {Yappendixletterandtype}%
-    \global\let\lastnode=\relax
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node.  #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+% 
+\def\donoderef#1{%
+  \ifx\lastnode\empty\else
+    \setref{\lastnode}{#1}%
+    \global\let\lastnode=\empty
   \fi
 }
 
-
 % @anchor{NAME} -- define xref target at arbitrary point.
 %
 \newcount\savesfregister
-\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
 
 % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-% anchor), namely NAME-title (the corresponding @chapter/etc. name),
-% NAME-pg (the page number), and NAME-snt (section number and type).
-% Called from \foonoderef.
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \thissection,
+%                 or the anchor name.
+% 2) NAME-snt   - section number and type, passed as the SNT arg, or
+%                 empty for anchors.
+% 3) NAME-pg    - the page number.
 % 
-% We have to set \indexdummies so commands such as @code in a section
-% title aren't expanded.  It would be nicer not to expand the titles in
-% the first place, but there's so many layers that that is hard to do.
-%
-% Likewise, use \turnoffactive so that punctuation chars such as underscore
-% and backslash work in node names.
+% This is called from \donoderef, \anchor, and \dofloat.  In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof   - the text as it should appear in a @listoffloats.
 % 
-\def\setref#1#2{{%
-  \atdummies
+\def\setref#1#2{%
   \pdfmkdest{#1}%
-  %
-  \turnoffactive
-  \dosetq{#1-title}{Ytitle}%
-  \dosetq{#1-pg}{Ypagenumber}%
-  \dosetq{#1-snt}{#2}%
-}}
+  \iflinks
+    {%
+      \atdummies  % preserve commands, but don't expand them
+      \turnoffactive
+      \otherbackslash
+      \edef\writexrdef##1##2{%
+       \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+         ##1}{##2}}% these are parameters of \writexrdef
+      }%
+      \toks0 = \expandafter{\thissection}%
+      \immediate \writexrdef{title}{\the\toks0 }%
+      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+      \writexrdef{pg}{\folio}% will be written later, during \shipout
+    }%
+  \fi
+}
 
 % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
 % the node name, #2 the name of the Info cross-reference, #3 the printed
@@ -5852,38 +5791,33 @@ width0pt\relax} \fi
 \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
   \unsepspaces
   \def\printedmanual{\ignorespaces #5}%
-  \def\printednodename{\ignorespaces #3}%
-  \setbox1=\hbox{\printedmanual}%
-  \setbox0=\hbox{\printednodename}%
+  \def\printedrefname{\ignorespaces #3}%
+  \setbox1=\hbox{\printedmanual\unskip}%
+  \setbox0=\hbox{\printedrefname\unskip}%
   \ifdim \wd0 = 0pt
     % No printed node name was explicitly given.
     \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
       % Use the node name inside the square brackets.
-      \def\printednodename{\ignorespaces #1}%
+      \def\printedrefname{\ignorespaces #1}%
     \else
       % Use the actual chapter/section title appear inside
       % the square brackets.  Use the real section title if we have it.
       \ifdim \wd1 > 0pt
         % It is in another manual, so we don't have it.
-        \def\printednodename{\ignorespaces #1}%
+        \def\printedrefname{\ignorespaces #1}%
       \else
         \ifhavexrefs
           % We know the real title if we have the xref values.
-          \def\printednodename{\refx{#1-title}{}}%
+          \def\printedrefname{\refx{#1-title}{}}%
         \else
           % Otherwise just copy the Info node name.
-          \def\printednodename{\ignorespaces #1}%
+          \def\printedrefname{\ignorespaces #1}%
         \fi%
       \fi
     \fi
   \fi
   %
-  % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-  % insert empty discretionaries after hyphens, which means that it will
-  % not find a line break at a hyphen in a node names.  Since some manuals
-  % are best written with fairly long node names, containing hyphens, this
-  % is a loss.  Therefore, we give the text of the node name again, so it
-  % is as if TeX is seeing it for the first time.
+  % Make link in pdf output.
   \ifpdf
     \leavevmode
     \getfilename{#4}%
@@ -5893,53 +5827,86 @@ width0pt\relax} \fi
          goto file{\the\filename.pdf} name{#1}%
      \else
        \startlink attr{/Border [0 0 0]}%
-         goto name{#1}%
+         goto name{\pdfmkpgn{#1}}%
      \fi
     }%
     \linkcolor
   \fi
   %
-  \ifdim \wd1 > 0pt
-    \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  We distinguish them by the
+  % LABEL-title being set to a magic string.
+  {%
+    % Have to otherify everything special to allow the \csname to
+    % include an _ in the xref name, etc.
+    \indexnofonts
+    \turnoffactive
+    \otherbackslash
+    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+      \csname XR#1-title\endcsname
+  }%
+  \iffloat\Xthisreftitle
+    % If the user specified the print name (third arg) to the ref,
+    % print it instead of our usual "Figure 1.2".
+    \ifdim\wd0 = 0pt
+      \refx{#1-snt}%
+    \else
+      \printedrefname
+    \fi
+    %
+    % if the user also gave the printed manual name (fifth arg), append
+    % "in MANUALNAME". 
+    \ifdim \wd1 > 0pt
+      \space \putwordin{} \cite{\printedmanual}%
+    \fi
   \else
-    % _ (for example) has to be the character _ for the purposes of the
-    % control sequence corresponding to the node, but it has to expand
-    % into the usual \leavevmode...\vrule stuff for purposes of
-    % printing. So we \turnoffactive for the \refx-snt, back on for the
-    % printing, back off for the \refx-pg.
-    {\turnoffactive \otherbackslash
-     % Only output a following space if the -snt ref is nonempty; for
-     % @unnumbered and @anchor, it won't be.
-     \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-     \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-    }%
-    % [mynode],
-    [\printednodename],\space
-    % page 3
-    \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
+    % node/anchor (non-float) references.
+    % 
+    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+    % insert empty discretionaries after hyphens, which means that it will
+    % not find a line break at a hyphen in a node names.  Since some manuals
+    % are best written with fairly long node names, containing hyphens, this
+    % is a loss.  Therefore, we give the text of the node name again, so it
+    % is as if TeX is seeing it for the first time.
+    \ifdim \wd1 > 0pt
+      \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+    \else
+      % _ (for example) has to be the character _ for the purposes of the
+      % control sequence corresponding to the node, but it has to expand
+      % into the usual \leavevmode...\vrule stuff for purposes of
+      % printing. So we \turnoffactive for the \refx-snt, back on for the
+      % printing, back off for the \refx-pg.
+      {\turnoffactive \otherbackslash
+       % Only output a following space if the -snt ref is nonempty; for
+       % @unnumbered and @anchor, it won't be.
+       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+      }%
+      % output the `[mynode]' via a macro so it can be overridden.
+      \xrefprintnodename\printedrefname
+      %
+      % But we always want a comma and a space:
+      ,\space
+      %
+      % output the `page 3'.
+      \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
+    \fi
   \fi
   \endlink
 \endgroup}
 
-% \dosetq is called from \setref to do the actual \write (\iflinks).
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output.  It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents.  Particularly
+% one that Bob is working on :).
 %
-\def\dosetq#1#2{%
-  {\let\folio=0%
-   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
-   \iflinks \next \fi
-  }%
-}
+\def\xrefprintnodename#1{[#1]}
 
-% \internalsetq{foo}{page} expands into
-%   CHARACTERS @xrdef{foo}{...expansion of \page...}
-\def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq.
-% 
-\def\Ypagenumber{\folio}
-\def\Ytitle{\thissection}
+% Things referred to by \setref.
+%
 \def\Ynothing{}
-\def\Ysectionnumberandtype{%
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
   \ifnum\secno=0
     \putwordChapter@tie \the\chapno
   \else \ifnum\subsecno=0
@@ -5950,8 +5917,7 @@ width0pt\relax} \fi
     \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
   \fi\fi\fi
 }
-
-\def\Yappendixletterandtype{%
+\def\Yappendix{%
   \ifnum\secno=0
      \putwordAppendix@tie @char\the\appendixno{}%
   \else \ifnum\subsecno=0
@@ -5964,15 +5930,6 @@ width0pt\relax} \fi
   \fi\fi\fi
 }
 
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
-  \let\linenumber = \empty % Pre-3.0.
-\else
-  \def\linenumber{\the\inputlineno:\space}
-\fi
-
 % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
 % If its value is nonempty, SUFFIX is output afterward.
 %
@@ -5981,7 +5938,7 @@ width0pt\relax} \fi
     \indexnofonts
     \otherbackslash
     \expandafter\global\expandafter\let\expandafter\thisrefX
-      \csname X#1\endcsname
+      \csname XR#1\endcsname
   }%
   \ifx\thisrefX\relax
     % If not defined, say something at least.
@@ -6003,11 +5960,44 @@ width0pt\relax} \fi
   #2% Output the suffix in any case.
 }
 
-% This is the macro invoked by entries in the aux file.
+% This is the macro invoked by entries in the aux file.  Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions).  But if this is a float type, we have more work to do.
 %
-\def\xrdef#1{\expandafter\gdef\csname X#1\endcsname}
+\def\xrdef#1#2{%
+  \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
+  %
+  % Was that xref control sequence that we just defined for a float?
+  \expandafter\iffloat\csname XR#1\endcsname
+    % it was a float, and we have the (safe) float type in \iffloattype.
+    \expandafter\let\expandafter\floatlist
+      \csname floatlist\iffloattype\endcsname
+    % 
+    % Is this the first time we've seen this float type?
+    \expandafter\ifx\floatlist\relax
+      \toks0 = {\do}% yes, so just \do
+    \else
+      % had it before, so preserve previous elements in list.
+      \toks0 = \expandafter{\floatlist\do}%
+    \fi
+    %
+    % Remember this xref in the control sequence \floatlistFLOATTYPE,
+    % for later use in \listoffloats.
+    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
+  \fi
+}
 
 % Read the last existing aux file, if any.  No error if none exists.
+% 
+\def\tryauxfile{%
+  \openin 1 \jobname.aux
+  \ifeof 1 \else
+    \readauxfile
+    \global\havexrefstrue
+  \fi
+  \closein 1
+}
+
 \def\readauxfile{\begingroup
   \catcode`\^^@=\other
   \catcode`\^^A=\other
@@ -6066,7 +6056,16 @@ width0pt\relax} \fi
   \catcode`\%=\other
   \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
   %
-  % Make the characters 128-255 be printing characters
+  % This is to support \ in node names and titles, since the \
+  % characters end up in a \csname.  It's easier than
+  % leaving it active and making its active definition an actual \
+  % character.  What I don't understand is why it works in the *value*
+  % of the xrdef.  Seems like it should be a catcode12 \, and that
+  % should not typeset properly.  But it works, so I'm moving on for
+  % now.  --karl, 15jan04.
+  \catcode`\\=\other
+  %
+  % Make the characters 128-255 be printing characters.
   {%
     \count 1=128
     \def\loop{%
@@ -6076,31 +6075,17 @@ width0pt\relax} \fi
     }%
   }%
   %
-  % Turn off \ as an escape so we do not lose on
-  % entries which were dumped with control sequences in their names.
-  % For example, @xrdef{$\leq $-fun}{page ...} made by @defun ^^
-  % Reference to such entries still does not work the way one would wish,
-  % but at least they do not bomb out when the aux file is read in.
-  \catcode`\\=\other
-  %
-  % @ is our escape character in .aux files.
+  % @ is our escape character in .aux files, and we need braces.
   \catcode`\{=1
   \catcode`\}=2
   \catcode`\@=0
   %
-  \openin 1 \jobname.aux
-  \ifeof 1 \else
-    \closein 1
-    \input \jobname.aux
-    \global\havexrefstrue
-    \global\warnedobstrue
-  \fi
-  % Open the new aux file.  TeX will close it automatically at exit.
-  \openout\auxfile=\jobname.aux
+  \input \jobname.aux
 \endgroup}
 
 
-% Footnotes.
+\message{insertions,}
+% including footnotes.
 
 \newcount \footnoteno
 
@@ -6114,19 +6099,19 @@ width0pt\relax} \fi
 % @footnotestyle is meaningful for info output only.
 \let\footnotestyle=\comment
 
-\let\ptexfootnote=\footnote
-
 {\catcode `\@=11
 %
 % Auto-number footnotes.  Otherwise like plain.
 \gdef\footnote{%
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
   \global\advance\footnoteno by \@ne
   \edef\thisfootno{$^{\the\footnoteno}$}%
   %
   % In case the footnote comes at the end of a sentence, preserve the
   % extra spacing after we do the footnote number.
   \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
   %
   % Remove inadvertent blank space before typesetting the footnote number.
   \unskip
@@ -6137,17 +6122,12 @@ width0pt\relax} \fi
 % Don't bother with the trickery in plain.tex to not require the
 % footnote text as a parameter.  Our footnotes don't need to be so general.
 %
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
 % the footnote is read.  --karl, 16nov96.
 %
-% The start of the footnote looks usually like this:
-\gdef\startfootins{\insert\footins\bgroup}
-%
-% ... but this macro is redefined inside @multitable.
-%
 \gdef\dofootnote{%
-  \startfootins
+  \insert\footins\bgroup
   % We want to typeset this text as a normal paragraph, even if the
   % footnote reference occurs in (for example) a display environment.
   % So reset some parameters.
@@ -6183,40 +6163,66 @@ width0pt\relax} \fi
 }
 }%end \catcode `\@=11
 
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished.  Otherwise, the insertion
+% would be lost.
+% Similarily, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes.  --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
 %
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
+\def\startsavinginserts{%
+  \ifx \insert\ptexinsert
+    \let\insert\saveinsert
+  \else
+    \let\checkinserts\relax
+  \fi
 }
 
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
 %
-\def\finalout{\overfullrule=0pt}
+\def\saveinsert#1{%
+  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+  \afterassignment\next
+  % swallow the left brace
+  \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+    {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
+  \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+  \next
+}
+\def\newsaveinsX #1{%
+  \csname newbox\endcsname #1%
+  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+    \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
 
 % @image.  We use the macros from epsf.tex to support this.
 % If epsf.tex is not installed and @image is used, we complain.
@@ -6226,12 +6232,12 @@ width0pt\relax} \fi
 % undone and the next image would fail.
 \openin 1 = epsf.tex
 \ifeof 1 \else
-  \closein 1
   % Do not bother showing banner with epsf.tex v2.7k (available in
   % doc/epsf.tex and on ctan).
   \def\epsfannounce{\toks0 = }%
   \input epsf.tex
 \fi
+\closein 1
 %
 % We will only complain once about lack of epsf.tex.
 \newif\ifwarnednoepsf
@@ -6267,7 +6273,7 @@ width0pt\relax} \fi
     \nobreak\bigskip
     % Usually we'll have text after the image which will insert
     % \parskip glue, so insert it here too to equalize the space
-    % above and below. 
+    % above and below.
     \nobreak\vskip\parskip
     \nobreak
     \line\bgroup\hss
@@ -6287,6 +6293,249 @@ width0pt\relax} \fi
 \endgroup}
 
 
+% @float FLOATTYPE,LOC ... @end float for displayed figures, tables, etc.
+% We don't actually implement floating yet, we just plop the float "here".
+% But it seemed the best name for the future.
+% 
+\envparseargdef\float{\dofloat #1,,,\finish}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
+% this float will not be numbered and cannot be referred to.
+% 
+% #2 is the optional xref label.  Also must be present for the float to
+% be referable.
+% 
+% #3 is the optional positioning argument; for now, it is ignored.  It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+% 
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+  \let\thiscaption=\empty
+  \let\thisshortcaption=\empty
+  %
+  % don't lose footnotes inside @float.
+  \startsavinginserts
+  %
+  \vtop\bgroup
+    \def\floattype{#1}%
+    \def\floatlabel{#2}%
+    \def\floatloc{#3}% we do nothing with this yet.
+    %
+    \ifx\floattype\empty
+      \let\safefloattype=\empty
+    \else
+      {%
+        % the floattype might have accents or other special characters,
+        % but we need to use it in a control sequence name.
+        \indexnofonts
+        \turnoffactive
+        \xdef\safefloattype{\floattype}%
+      }%
+    \fi
+    %
+    % If label is given but no type, we handle that as the empty type.
+    \ifx\floatlabel\empty \else
+      % We want each FLOATTYPE to be numbered separately (Figure 1,
+      % Table 1, Figure 2, ...).  (And if no label, no number.)
+      % 
+      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+      \global\advance\floatno by 1
+      %
+      {%
+        % This magic value for \thissection is output by \setref as the
+        % XREFLABEL-title value.  \xrefX uses it to distinguish float
+        % labels (which have a completely different output format) from
+        % node and anchor labels.  And \xrdef uses it to construct the
+        % lists of floats.
+        % 
+        \edef\thissection{\floatmagic=\safefloattype}%
+        \setref{\floatlabel}{Yfloat}%
+      }%
+    \fi
+    %
+    % start with \parskip glue, I guess.
+    \vskip\parskip
+    %
+    % Don't suppress indentation if a float happens to start a section.
+    \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption:    Foo 1.1
+% @float Foo & @caption{Cap}:     Foo: Cap
+% @float Foo & no caption:        Foo
+% @float ,lbl & Caption{Cap}:     1.1: Cap
+% @float ,lbl & no caption:       1.1
+% @float & @caption{Cap}:         Cap
+% @float & no caption:
+%
+\def\Efloat{%
+    \let\floatident = \empty
+    %
+    % In all cases, if we have a float type, it comes first.
+    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+    %
+    % If we have an xref label, the number comes next.
+    \ifx\floatlabel\empty \else
+      \ifx\floattype\empty \else % if also had float type, need tie first.
+        \appendtomacro\floatident{\tie}%
+      \fi
+      % the number.
+      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+    \fi
+    %
+    % Start the printed caption with what we've constructed in
+    % \floatident, but keep it separate; we need \floatident again.
+    \let\captionline = \floatident
+    %
+    \ifx\thiscaption\empty \else
+      \ifx\floatident\empty \else
+       \appendtomacro\captionline{: }% had ident, so need a colon between
+      \fi
+      %
+      % caption text.
+      \appendtomacro\captionline\thiscaption
+    \fi
+    %
+    % If we have anything to print, print it, with space before.
+    % Eventually this needs to become an \insert.
+    \ifx\captionline\empty \else
+      \vskip.5\parskip
+      \captionline
+    \fi
+    %
+    % If have an xref label, write the list of floats info.  Do this
+    % after the caption, to avoid chance of it being a breakpoint.
+    \ifx\floatlabel\empty \else
+      % Write the text that goes in the lof to the aux file as
+      % \floatlabel-lof.  Besides \floatident, we include the short
+      % caption if specified, else the full caption if specified, else nothing.
+      {%
+        \atdummies \turnoffactive \otherbackslash
+        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{%
+          \floatident
+          \ifx\thisshortcaption\empty
+            \ifx\thiscaption\empty \else : \thiscaption \fi
+          \else
+            : \thisshortcaption
+          \fi
+        }}%
+      }%
+    \fi
+    %
+    % Space below caption, if we printed anything.
+    \ifx\printedsomething\empty \else \vskip\parskip \fi
+  \egroup  % end of \vtop
+  \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+% 
+\newtoks\appendtomacroAtoks
+\newtoks\appendtomacroBtoks
+\def\appendtomacro#1#2{%
+  \appendtomacroAtoks = \expandafter{#1}%
+  \appendtomacroBtoks = {#2}%
+  \edef#1{\the\appendtomacroAtoks \the\appendtomacroBtoks}%
+}
+
+% @caption, @shortcaption are easy.
+% 
+\long\def\caption#1{\checkenv\float \def\thiscaption{#1}}
+\def\shortcaption#1{\checkenv\float \def\thisshortcaption{#1}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use.  Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+  \ifx#1\relax
+      % Haven't seen this figure type before.
+      \csname newcount\endcsname #1%
+      %
+      % Remember to reset this floatno at the next chap.
+      \expandafter\gdef\expandafter\resetallfloatnos
+        \expandafter{\resetallfloatnos #1=0 }%
+  \fi
+  \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
+% first read the @float command.
+% 
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref.  That is, the magic
+% \thissection value which we \setref above.
+% 
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
+% (safe) float type for this float.  We set \iffloattype to #2.
+% 
+\def\doiffloat#1=#2=#3\finish{%
+  \def\temp{#1}%
+  \def\iffloattype{#2}%
+  \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+% 
+\parseargdef\listoffloats{%
+  \def\floattype{#1}% floattype
+  {%
+    % the floattype might have accents or other special characters,
+    % but we need to use it in a control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safefloattype{\floattype}%
+  }%
+  %
+  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+    \ifhavexrefs
+      % if the user said @listoffloats foo but never @float foo.
+      \message{\linenumber No `\safefloattype' floats to list.}%
+    \fi
+  \else
+    \begingroup
+      \leftskip=\tocindent  % indent these entries like a toc
+      \let\do=\listoffloatsdo
+      \csname floatlist\safefloattype\endcsname
+    \endgroup
+  \fi
+}
+
+% This is called on each entry in a list of floats.  We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file.  We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+% 
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+% 
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+  % Can't fully expand XR#1-lof because it can contain anything.  Just
+  % pass the control sequence.  On the other hand, XR#1-pg is just the
+  % page number, and we want to fully expand that so we can get a link
+  % in pdf output.
+  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+  %
+  % use the same \entry macro we use to generate the TOC and index.
+  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+  \writeentry
+}}
+
 \message{localization,}
 % and i18n.
 
@@ -6295,19 +6544,17 @@ width0pt\relax} \fi
 % properly.  Single argument is the language abbreviation.
 % It would be nice if we could set up a hyphenation file here.
 %
-\def\documentlanguage{\parsearg\dodocumentlanguage}
-\def\dodocumentlanguage#1{%
+\parseargdef\documentlanguage{%
   \tex % read txi-??.tex file in plain TeX.
-  % Read the file if it exists.
-  \openin 1 txi-#1.tex
-  \ifeof1
-    \errhelp = \nolanghelp
-    \errmessage{Cannot read language file txi-#1.tex}%
-    \let\temp = \relax
-  \else
-    \def\temp{\input txi-#1.tex }%
-  \fi
-  \temp
+    % Read the file if it exists.
+    \openin 1 txi-#1.tex
+    \ifeof 1
+      \errhelp = \nolanghelp
+      \errmessage{Cannot read language file txi-#1.tex}%
+    \else
+      \input txi-#1.tex
+    \fi
+    \closein 1
   \endgroup
 }
 \newhelp\nolanghelp{The given language definition file cannot be found or
@@ -6355,7 +6602,7 @@ should work if nowhere else does.}
 % Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
 % 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
 % physical page width.
-% 
+%
 % We also call \setleading{\textleading}, so the caller should define
 % \textleading.  The caller should also set \parskip.
 %
@@ -6423,7 +6670,7 @@ should work if nowhere else does.}
   \parskip = 3pt plus 2pt minus 1pt
   \textleading = 13.2pt
   %
-  % Double-side printing via postscript on Laserjet 4050 
+  % Double-side printing via postscript on Laserjet 4050
   % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
   % To change the settings for a different printer or situation, adjust
   % \normaloffset until the front-side and back-side texts align.  Then
@@ -6464,7 +6711,7 @@ should work if nowhere else does.}
   \tableindent = 12mm
 }}
 
-% A specific text layout, 24x15cm overall, intended for A4 paper.  
+% A specific text layout, 24x15cm overall, intended for A4 paper.
 \def\afourlatex{{\globaldefs = 1
   \afourpaper
   \internalpagesizes{237mm}{150mm}%
@@ -6490,8 +6737,7 @@ should work if nowhere else does.}
 % Perhaps we should allow setting the margins, \topskip, \parskip,
 % and/or leading, also. Or perhaps we should compute them somehow.
 %
-\def\pagesizes{\parsearg\pagesizesxxx}
-\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
 \def\pagesizesyyy#1,#2,#3\finish{{%
   \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
   \globaldefs = 1
@@ -6538,8 +6784,8 @@ should work if nowhere else does.}
 \def\normalplus{+}
 \def\normaldollar{$}%$ font-lock fix
 
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
 % where something hairier probably needs to be done.
 %
 % #1 is what to print if we are indeed using \tt; #2 is what to print
@@ -6587,13 +6833,6 @@ should work if nowhere else does.}
 \catcode`\$=\active
 \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
 
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
-
 % If a .fmt file is being used, characters that might appear in a file
 % name cannot be active until we have parsed the command line.
 % So turn them off again, and have \everyjob (or @setfilename) turn them on.
@@ -6602,15 +6841,16 @@ should work if nowhere else does.}
 
 \catcode`\@=0
 
-% \rawbackslashxx outputs one backslash character in current font,
+% \backslashcurfont outputs one backslash character in current font,
 % as in \char`\\.
-\global\chardef\rawbackslashxx=`\\
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
 
-% \rawbackslash defines an active \ to do \rawbackslashxx.
+% \rawbackslash defines an active \ to do \backslashcurfont.
 % \otherbackslash defines an active \ to be a literal `\' character with
 % catcode other.
 {\catcode`\\=\active
- @gdef@rawbackslash{@let\=@rawbackslashxx}
+ @gdef@rawbackslash{@let\=@backslashcurfont}
  @gdef@otherbackslash{@let\=@realbackslash}
 }
 
@@ -6618,7 +6858,7 @@ should work if nowhere else does.}
 {\catcode`\\=\other @gdef@realbackslash{\}}
 
 % \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
+\def\normalbackslash{{\tt\backslashcurfont}}
 
 \catcode`\\=\active
 
@@ -6635,12 +6875,13 @@ should work if nowhere else does.}
   @let>=@normalgreater
   @let+=@normalplus
   @let$=@normaldollar %$ font-lock fix
+  @unsepspaces
 }
 
 % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
 % the literal character `\'.  (Thus, \ is not expandable when this is in
 % effect.)
-% 
+%
 @def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
 
 % Make _ and + \other characters, temporarily.
@@ -6669,15 +6910,11 @@ should work if nowhere else does.}
 % Say @foo, not \foo, in error messages.
 @escapechar = `@@
 
-% These look ok in all fonts, so just make them not special.  
+% These look ok in all fonts, so just make them not special.
 @catcode`@& = @other
 @catcode`@# = @other
 @catcode`@% = @other
 
-@c Set initial fonts.
-@textfonts
-@rm
-
 
 @c Local variables:
 @c eval: (add-hook 'write-file-hooks 'time-stamp)
@@ -6686,3 +6923,9 @@ should work if nowhere else does.}
 @c time-stamp-format: "%:y-%02m-%02d.%02H"
 @c time-stamp-end: "}"
 @c End:
+
+@c vim:sw=2:
+
+@ignore
+   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore