changes from gas-2.3/binutils-2.4 dist (details in branch log msgs, changelogs)
authorKen Raeburn <raeburn@cygnus>
Fri, 27 May 1994 16:58:05 +0000 (16:58 +0000)
committerKen Raeburn <raeburn@cygnus>
Fri, 27 May 1994 16:58:05 +0000 (16:58 +0000)
36 files changed:
bfd/.Sanitize
bfd/ChangeLog
bfd/Makefile.in
bfd/configure.bat
bfd/makefile.dos [new file with mode: 0644]
bfd/mipsbsd.c
bfd/nlmcode.h
binutils/ChangeLog
binutils/Makefile.in
gas/ChangeLog
gas/Makefile.in
gas/config/ho-vax.h
gas/config/ho-vms.h
gas/config/obj-vms.c
gas/config/obj-vms.h
gas/config/tc-sparc.c
gas/configure.bat
gas/make-gas.com
gas/testsuite/ChangeLog
gas/vmsconf.sh
gprof/ChangeLog
gprof/configure.bat [new file with mode: 0644]
gprof/gprof.c
gprof/hertz.c
gprof/i386.h
ld/ChangeLog
ld/Makefile.in
ld/config/alphaosf.mh
ld/configure.bat
ld/emulparams/go32.sh
ld/emultempl/.Sanitize
ld/emultempl/stringify.sed [new file with mode: 0644]
ld/ldver.c
ld/scripttempl/go32coff.sc
ld/testsuite/ld.cdtest/cdtest.exp
opcodes/ChangeLog

index 77020620f5aa7b95e6535f6e6ce0d8422abc1dc7..9c81237906239ca866520d6b025198d6d1f2e0ee 100644 (file)
@@ -71,6 +71,7 @@ cisco-core.c
 coff-a29k.c
 coff-alpha.c
 coff-apollo.c
+coff-go32.c
 coff-h8300.c
 coff-h8500.c
 coff-i386.c
index 8cfc52137eba4692d6e6c71d1075eeaa43876207..61f28db1ce36a73a8214a3b56942f4dfc2cc91c8 100644 (file)
@@ -1,3 +1,33 @@
+Thu May 26 13:56:03 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       * nlmcode.h (nlm_swap_auxiliary_headers_in): Cast bfd_byte pointer
+       to char pointer to avoid compiler warnings.
+
+       * dep-in.sed: Remove spaces before colons.
+
+       Merged changes back in from FSF gas release 2.3:
+
+       * Makefile.in (stmp-bfd.h): Wrap `if' block around grep
+       invocation, to avoid a bug in BSD 4.4 make.
+
+       From Ralph Campbell:
+       * mipsbsd.c (mips_fix_jmp_addr): If symbol is undefined, return an
+       error.
+       (mips_fix_hi16_s): Ditto.
+
+       Fri May 13 21:21:00 1994  DJ Delorie (dj@ctron.com)
+
+       * makefile.dos: define a default target, or archives won't work
+         due to multiple matches.
+
+       Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)
+
+       * configure.bat: update for latest files
+       * makefile.dos: update for correct targets and sources
+       * coff-go32.c: [new] go32's COFF format (i386coff with underscores)
+       * targets.c: add go32coff target
+       * makefile.in: add coff-go32.c support
+
 Thu May 26 10:10:21 1994  Jeff Law  (law@snake.cs.utah.edu)
 
        * som.c (som_prep_headers): Do not set the system_id here, private
index a275712df16b8bc420e6849c4e03195e4e6dce3d..ccdda11c7f745d6ecff51f19f1532a27fcc15b8e 100644 (file)
@@ -124,6 +124,7 @@ BFD32_BACKENDS = \
        coff-h8300.o \
        coff-h8500.o \
        coff-i386.o \
+       coff-go32.o \
        coff-i960.o \
        coff-m68k.o \
        coff-m88k.o \
@@ -220,7 +221,7 @@ ALL_CFLAGS=$(CFLAGS) $(HDEFINES) $(TDEFINES) $(CSEARCH) $(CSWITCHES)
 
 # C source files that correspond to .o's.
 CFILES = libbfd.c opncls.c bfd.c archive.c targets.c cache.c \
-        archures.c coff-i386.c aout64.c aout32.c sunos.c demo64.c \
+        archures.c coff-i386.c coff-go32.c aout64.c aout32.c sunos.c demo64.c \
         coff-i960.c srec.c tekhex.c oasys.c ieee.c aout0.c \
         ecoff.c ecofflink.c coff-m68k.c coff-u68k.c coff-apollo.c \
         coff-a29k.c coff-rs6000.c coff-sparc.c coffgen.c format.c \
@@ -474,9 +475,17 @@ $(BFD_H): stmp-bfd.h ; @true
 
 # The file ../include/bfd.h is from earlier attempts to get this right.
 # If the file is still there, kill it.
+# The weird sh*t with grep is to avoid printing "exit 1 (ignored)" type
+# messages from make, and avoid various ways in which different versions
+# of make will screw up exit status checks.
+#      -grep...                -> make prints "exit 1" message
+#      grep ... ; exit 0       -> sun(?) make notices grep failure
+#      grep ... || exit 0      -> bsd4.4 make still notices
+#      if grep ...             -> seems okay so far
 stmp-bfd.h : $(srcdir)/bfd-in2.h Makefile
        rm -f bfd.h-new 64 ../include/bfd.h
-       grep BFD_HOST_64_BIT sysdep.h > 64 2>/dev/null || exit 0
+       if grep BFD_HOST_64_BIT sysdep.h > 64 2>/dev/null; then true; \
+       else true; fi
        sed -e 's/@WORDSIZE@/$(WORDSIZE)/' \
            -e "s/@VERSION@/`cat $(srcdir)/VERSION`/" \
            -e '/64-bit.*sysdep.h/ r 64' \
@@ -522,6 +531,8 @@ cache.o: cache.c
 archures.o: archures.c
 coff-i386.o: coff-i386.c $(INCDIR)/coff/i386.h $(INCDIR)/coff/internal.h \
   libcoff.h coffcode.h coffswap.h
+coff-go32.o: coff-go32.c $(INCDIR)/coff/i386.h $(INCDIR)/coff/internal.h \
+  libcoff.h coffcode.h coffswap.h
 aout64.o: aout64.c aoutx.h $(INCDIR)/bfdlink.h libaout.h \
   $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \
   $(INCDIR)/aout/ar.h
index 6cb35f03950d95042bfb115faa9a4e9fbb0ecd8e..78fe79e9112341f3418c18a63b6a3e6faa010b5a 100644 (file)
@@ -1,18 +1,18 @@
-@echo off
-if "%1" == "go32" goto h8300
-if "%1" == "h8/300" goto h8300
-echo Specify one of [ go32 h8/300 ] on command line
-goto exit
-
-:go32
-echo Configuring bfd for go32
-copy hosts/h-go32.h sysdep.h
-copy Makefile.dos Makefile
-goto exit
-
-:h8300
-echo Configuring bfd for H8/300
-copy hosts\h-go32.h sysdep.h
-copy Makefile.dos Makefile
-
-:exit
+@echo off\r
+if "%1" == "h8/300" goto h8300\r
+\r
+echo Configuring bfd for go32\r
+update hosts\go32.h sysdep.h\r
+update Makefile.dos Makefile\r
+echo s/@WORDSIZE@/32/g>config.sed\r
+sed -e s/^/s\/@VERSION@\// -e s/$/\/g/g version >>config.sed\r
+sed -f config.sed < bfd-in2.h > bfd.h2\r
+update bfd.h2 bfd.h\r
+goto exit\r
+\r
+:h8300\r
+echo Configuring bfd for H8/300\r
+update hosts\h-go32.h sysdep.h\r
+update Makefile.dos Makefile\r
+\r
+:exit\r
diff --git a/bfd/makefile.dos b/bfd/makefile.dos
new file mode 100644 (file)
index 0000000..c062b5f
--- /dev/null
@@ -0,0 +1,46 @@
+CFLAGS=-O2
+
+.c.o :
+       gcc $(CFLAGS) -I. -I../include -c $<
+
+all : libbfd.a
+
+targets.o : targets.c
+       gcc $(CFLAGS) -I. -I../include -DSELECT_VECS=&go32coff_vec,&i386aout_vec -DDEFAULT_VECTOR=go32coff_vec -c $*.c
+
+archures.o : archures.c
+       gcc $(CFLAGS) -I. -I../include -DSELECT_ARCHITECTURES=bfd_i386_arch -c $*.c
+
+OBJS = \
+       libbfd.o \
+       opncls.o \
+       bfd.o \
+       archive.o \
+       targets.o \
+       cache.o \
+       archures.o \
+       core.o \
+       section.o \
+       format.o \
+       syms.o \
+       reloc.o \
+       init.o \
+       ctor.o \
+       coffgen.o \
+       srec.o \
+       hash.o \
+       linker.o \
+       ecoff.o \
+       ecofflink.o \
+       elf.o \
+       aout32.o \
+       stab-sym.o \
+       i386aout.o \
+       cpu-i386.o \
+       coff-go32.o \
+       $E
+
+libbfd.a : $(OBJS)
+       -rm libbfd.a
+       ar rvs libbfd.a $(OBJS)
+       ranlib libbfd.a
index 020e5a2993efab4534951ec727d154414f60d313..29a41fbb7c2687646e166dfff822f028bf548f7c 100644 (file)
@@ -177,6 +177,56 @@ MY(write_object_contents) (abfd)
 #define MIPS_RELOC_HI16_S      4
 #define MIPS_RELOC_LO16                5
 
+/*
+ * This is only called when performing a BFD_RELOC_MIPS_JMP relocation.
+ * The jump destination address is formed from the upper 4 bits of the
+ * "current" program counter concatenated with the jump instruction's
+ * 26 bit field and two trailing zeros.
+ * If the destination address is not in the same segment as the "current"
+ * program counter, then we need to signal an error.
+ */
+static bfd_reloc_status_type
+mips_fix_jmp_addr (abfd,reloc_entry,symbol,data,input_section,output_bfd)
+     bfd *abfd;
+     arelent *reloc_entry;
+     struct symbol_cache_entry *symbol;
+     PTR data;
+     asection *input_section;
+     bfd *output_bfd;
+{
+  bfd_vma relocation, pc;
+  /* If this is a partial relocation, just continue. */
+  if (output_bfd != (bfd *)NULL)
+    return bfd_reloc_continue;
+
+  /* If this is an undefined symbol, return error */
+  if (symbol->section == &bfd_und_section
+      && (symbol->flags & BSF_WEAK) == 0)
+    return bfd_reloc_undefined;
+
+  /* 
+   * Work out which section the relocation is targetted at and the
+   * initial relocation command value.
+   */
+  if (bfd_is_com_section (symbol->section))
+    relocation = 0;
+  else
+    relocation = symbol->value;
+
+  relocation += symbol->section->output_section->vma;
+  relocation += symbol->section->output_offset;
+  relocation += reloc_entry->addend;
+
+  pc = input_section->output_section->vma + input_section->output_offset +
+    reloc_entry->address + 4;
+
+  if ((relocation & 0xF0000000) != (pc & 0xF0000000))
+    return bfd_reloc_overflow;
+
+  return bfd_reloc_continue;
+}
+
 /*
  * This is only called when performing a BFD_RELOC_HI16_S relocation.
  * We need to see if bit 15 is set in the result. If it is, we add
@@ -204,11 +254,16 @@ mips_fix_hi16_s (abfd, reloc_entry, symbol, data, input_section,
   if (output_bfd != (bfd *)NULL)
     return bfd_reloc_continue;
 
+  /* If this is an undefined symbol, return error */
+  if (symbol->section == &bfd_und_section
+      && (symbol->flags & BSF_WEAK) == 0)
+    return bfd_reloc_undefined;
+
   /* 
    * Work out which section the relocation is targetted at and the
    * initial relocation command value.
    */
-  if (symbol->section == &bfd_com_section)
+  if (bfd_is_com_section (symbol->section))
     relocation = 0;
   else
     relocation = symbol->value;
@@ -226,7 +281,8 @@ mips_fix_hi16_s (abfd, reloc_entry, symbol, data, input_section,
 static reloc_howto_type mips_howto_table_ext[] = {
   {MIPS_RELOC_32,      0, 2, 32, false, 0,  complain_overflow_bitfield, 0,
        "32",       false, 0, 0xffffffff, false},
-  {MIPS_RELOC_JMP,     2, 2, 26, false, 0, complain_overflow_bitfield, 0,
+  {MIPS_RELOC_JMP,     2, 2, 26, false, 0, complain_overflow_dont,
+       mips_fix_jmp_addr,
        "MIPS_JMP", false, 0, 0x03ffffff, false},
   {MIPS_RELOC_WDISP16, 2, 1, 16, true,  0, complain_overflow_signed, 0,
        "WDISP16",  false, 0, 0x0000ffff, false},
index 63b2b5c2b6d16c96d477ea536a9a050726906d68..4658a132041a8ceb8e00c8243b81571b0d15d2bb 100644 (file)
@@ -38,8 +38,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define Nlm_External_Copyright_Header  NlmNAME(External_Copyright_Header)
 #define Nlm_External_Extended_Header   NlmNAME(External_Extended_Header)
 #define Nlm_External_Custom_Header     NlmNAME(External_Custom_Header)
-#define Nlm_External_Cygnus_Section_Header \
-  NlmNAME(External_Cygnus_Section_Header)
+#define Nlm_External_Cygnus_Ext_Header NlmNAME(External_Cygnus_Ext_Header)
 
 #define nlm_symbol_type                        nlmNAME(symbol_type)
 #define nlm_get_symtab_upper_bound     nlmNAME(get_symtab_upper_bound)
@@ -180,7 +179,7 @@ nlm_object_p (abfd)
 
   /* Add the sections supplied by all NLM's, and then read in the
      auxiliary headers.  Reading the auxiliary headers may create
-     additional sections described in the cygnus_sections header.
+     additional sections described in the cygnus_ext header.
      From this point on we assume that we have an NLM, and do not
      treat errors as indicating the wrong format.  */
 
@@ -505,24 +504,6 @@ nlm_swap_auxiliary_headers_in (abfd)
          nlm_extended_header (abfd)->reserved5 =
            get_word (abfd, (bfd_byte *) thdr.reserved5);
        }
-      else if (strncmp (tempstr, "CuStHeAd", 8) == 0)
-       {
-         Nlm_External_Custom_Header thdr;
-         if (bfd_read ((PTR) &thdr, sizeof (thdr), 1, abfd) != sizeof (thdr))
-           return false;
-         memcpy (nlm_custom_header (abfd)->stamp, thdr.stamp,
-                 sizeof (thdr.stamp));
-         nlm_custom_header (abfd)->dataLength =
-           get_word (abfd, (bfd_byte *) thdr.dataLength);
-         nlm_custom_header (abfd)->data =
-           bfd_alloc (abfd, nlm_custom_header (abfd)->dataLength);
-         if (nlm_custom_header (abfd)->data == NULL)
-           return false;
-         if (bfd_read (nlm_custom_header (abfd)->data, 1,
-                       nlm_custom_header (abfd)->dataLength, abfd)
-             != nlm_custom_header (abfd)->dataLength)
-           return false;
-       }
       else if (strncmp (tempstr, "CoPyRiGhT=", 10) == 0)
        {
          if (bfd_read ((PTR) nlm_copyright_header (abfd)->stamp,
@@ -541,83 +522,160 @@ nlm_swap_auxiliary_headers_in (abfd)
              nlm_copyright_header (abfd)->copyrightMessageLength + 1)
            return (false);
        }
-      else if (strncmp (tempstr, "CyGnUsSeCs", 10) == 0)
+      else if (strncmp (tempstr, "CuStHeAd", 8) == 0)
        {
-         Nlm_External_Cygnus_Section_Header thdr;
-         bfd_size_type len;
-         file_ptr pos;
-         bfd_byte *contents;
-         bfd_byte *p, *pend;
-
-         if (bfd_read ((PTR) &thdr, sizeof (thdr), 1, abfd) != sizeof (thdr))
+         Nlm_External_Custom_Header thdr;
+         bfd_size_type hdrLength;
+         file_ptr dataOffset;
+         bfd_size_type dataLength;
+         char dataStamp[8];
+         PTR hdr;
+
+         /* Read the stamp ("CuStHeAd").  */
+         if (bfd_read ((PTR) thdr.stamp, 1, sizeof (thdr.stamp), abfd)
+             != sizeof (thdr.stamp))
            return false;
-         memcpy (nlm_cygnus_section_header (abfd)->stamp, thdr.stamp,
-                 sizeof (thdr.stamp));
-         nlm_cygnus_section_header (abfd)->offset =
-           get_word (abfd, (bfd_byte *) thdr.offset);
-         len = get_word (abfd, (bfd_byte *) thdr.length);
-         nlm_cygnus_section_header (abfd)->length = len;
-
-         /* This data this header points to provides a list of the
-            sections which were in the original object file which was
-            converted to become an NLM.  We locate those sections and
-            add them to the BFD.  Note that this is likely to create
-            a second .text, .data and .bss section; retrieving the
-            sections by name will get the actual NLM sections, which
-            is what we want to happen.  The sections from the
-            original file, which may be subsets of the NLM section,
-            can only be found using bfd_map_over_sections.  */
-
-         contents = (bfd_byte *) bfd_alloc (abfd, len);
-         if (contents == (bfd_byte *) NULL)
+         /* Read the length of this custom header.  */
+         if (bfd_read ((PTR) thdr.length, 1, sizeof (thdr.length), abfd)
+             != sizeof (thdr.length))
+           return false;
+         hdrLength = get_word (abfd, (bfd_byte *) thdr.length);
+         /* Read further fields if we have them.  */
+         if (hdrLength < NLM_TARGET_LONG_SIZE)
+           dataOffset = 0;
+         else
            {
-             bfd_set_error (bfd_error_no_memory);
-             return false;
+             if (bfd_read ((PTR) thdr.dataOffset, 1,
+                           sizeof (thdr.dataOffset), abfd)
+                 != sizeof (thdr.dataOffset))
+               return false;
+             dataOffset = get_word (abfd, (bfd_byte *) thdr.dataOffset);
            }
-         pos = bfd_tell (abfd);
-         if (bfd_seek (abfd, nlm_cygnus_section_header (abfd)->offset,
-                       SEEK_SET) != 0
-             || bfd_read (contents, len, 1, abfd) != len)
-           return false;
-         p = contents;
-         pend = p + len;
-         while (p < pend)
+         if (hdrLength < 2 * NLM_TARGET_LONG_SIZE)
+           dataLength = 0;
+         else
+           {
+             if (bfd_read ((PTR) thdr.dataLength, 1,
+                           sizeof (thdr.dataLength), abfd)
+                 != sizeof (thdr.dataLength))
+               return false;
+             dataLength = get_word (abfd, (bfd_byte *) thdr.dataLength);
+           }
+         if (hdrLength < 2 * NLM_TARGET_LONG_SIZE + 8)
+           memset (dataStamp, 0, sizeof (dataStamp));
+         else
            {
-             char *name;
-             size_t l;
-             file_ptr filepos;
-             bfd_size_type size;
-             asection *newsec;
+             if (bfd_read ((PTR) dataStamp, 1, sizeof (dataStamp), abfd)
+                 != sizeof (dataStamp))
+               return false;
+           }
+
+         /* Read the rest of the header, if any.  */
+         if (hdrLength <= 2 * NLM_TARGET_LONG_SIZE + 8)
+           {
+             hdr = NULL;
+             hdrLength = 0;
+           }
+         else
+           {
+             hdrLength -= 2 * NLM_TARGET_LONG_SIZE + 8;
+             hdr = bfd_alloc (abfd, hdrLength);
+             if (hdr == NULL)
+               {
+                 bfd_set_error (bfd_error_no_memory);
+                 return false;
+               }
+             if (bfd_read (hdr, 1, hdrLength, abfd) != hdrLength)
+               return false;
+           }
+
+         /* If we have found a Cygnus header, process it.  Otherwise,
+            just save the associated data without trying to interpret
+            it.  */
+         if (strncmp (dataStamp, "CyGnUsEx", 8) == 0)
+           {
+             file_ptr pos;
+             bfd_byte *contents;
+             bfd_byte *p, *pend;
 
-             /* The format of this information is
+             BFD_ASSERT (hdrLength == 0 && hdr == NULL);
+
+             pos = bfd_tell (abfd);
+             if (bfd_seek (abfd, dataOffset, SEEK_SET) != 0)
+               return false;
+             contents = (bfd_byte *) bfd_alloc (abfd, dataLength);
+             if (contents == NULL)
+               {
+                 bfd_set_error (bfd_error_no_memory);
+                 return false;
+               }
+             if (bfd_read (contents, 1, dataLength, abfd) != dataLength)
+               return false;
+             if (bfd_seek (abfd, pos, SEEK_SET) != 0)
+               return false;
+
+             memcpy (nlm_cygnus_ext_header (abfd), "CyGnUsEx", 8);
+             nlm_cygnus_ext_header (abfd)->offset = dataOffset;
+             nlm_cygnus_ext_header (abfd)->length = dataLength;
+
+             /* This data this header points to provides a list of
+                the sections which were in the original object file
+                which was converted to become an NLM.  We locate
+                those sections and add them to the BFD.  Note that
+                this is likely to create a second .text, .data and
+                .bss section; retrieving the sections by name will
+                get the actual NLM sections, which is what we want to
+                happen.  The sections from the original file, which
+                may be subsets of the NLM section, can only be found
+                using bfd_map_over_sections.  */
+             p = contents;
+             pend = p + dataLength;
+             while (p < pend)
+               {
+                 char *name;
+                 size_t l;
+                 file_ptr filepos;
+                 bfd_size_type size;
+                 asection *newsec;
+
+                 /* The format of this information is
                     null terminated section name
                     zeroes to adjust to 4 byte boundary
                     4 byte section data file pointer
                     4 byte section size
-                */
-
-             name = p;
-             l = strlen (name) + 1;
-             l = (l + 3) &~ 3;
-             p += l;
-             filepos = bfd_h_get_32 (abfd, p);
-             p += 4;
-             size = bfd_h_get_32 (abfd, p);
-             p += 4;
-
-             newsec = bfd_make_section_anyway (abfd, name);
-             if (newsec == (asection *) NULL)
-               return false;
-             newsec->_raw_size = size;
-             if (filepos != 0)
-               {
-                 newsec->filepos = filepos;
-                 newsec->flags |= SEC_HAS_CONTENTS;
+                    */
+
+                 name = (char *) p;
+                 l = strlen (name) + 1;
+                 l = (l + 3) &~ 3;
+                 p += l;
+                 filepos = bfd_h_get_32 (abfd, p);
+                 p += 4;
+                 size = bfd_h_get_32 (abfd, p);
+                 p += 4;
+
+                 newsec = bfd_make_section_anyway (abfd, name);
+                 if (newsec == (asection *) NULL)
+                   return false;
+                 newsec->_raw_size = size;
+                 if (filepos != 0)
+                   {
+                     newsec->filepos = filepos;
+                     newsec->flags |= SEC_HAS_CONTENTS;
+                   }
                }
            }
-
-         if (bfd_seek (abfd, pos, SEEK_SET) != 0)
-           return false;
+         else
+           {
+             memcpy (nlm_custom_header (abfd)->stamp, thdr.stamp,
+                     sizeof (thdr.stamp));
+             nlm_custom_header (abfd)->hdrLength = hdrLength;
+             nlm_custom_header (abfd)->dataOffset = dataOffset;
+             nlm_custom_header (abfd)->dataLength = dataLength;
+             memcpy (nlm_custom_header (abfd)->dataStamp, dataStamp,
+                     sizeof (dataStamp));
+             nlm_custom_header (abfd)->hdr = hdr;
+           }
        }
       else
        {
@@ -771,26 +829,6 @@ nlm_swap_auxiliary_headers_out (abfd)
        return false;
     }
 
-  /* Write out the custom header if there is one.   */
-  if (find_nonzero ((PTR) nlm_custom_header (abfd),
-                   sizeof (Nlm_Internal_Custom_Header)))
-    {
-      Nlm_External_Custom_Header thdr;
-
-      /* Right now we assume the custom header is always the suggested
-        format for alternate debugging records.  */
-      BFD_ASSERT (nlm_custom_header (abfd)->dataLength == 8);
-
-      memcpy (thdr.stamp, "CuStHeAd", 8);
-      put_word (abfd, (bfd_vma) nlm_custom_header (abfd)->dataLength,
-               (bfd_byte *) thdr.dataLength);
-      if (bfd_write ((PTR) &thdr, sizeof (thdr), 1, abfd) != sizeof (thdr))
-       return false;
-      if (bfd_write (nlm_custom_header (abfd)->data, 1,
-                    nlm_custom_header (abfd)->dataLength, abfd)
-         != nlm_custom_header (abfd)->dataLength)
-       return false;
-    }
 
   /* Write out the copyright header if there is one.  */
   if (find_nonzero ((PTR) nlm_copyright_header (abfd),
@@ -814,17 +852,59 @@ nlm_swap_auxiliary_headers_out (abfd)
        return false;
     }
 
+  /* Write out the custom header if there is one.   */
+  if (find_nonzero ((PTR) nlm_custom_header (abfd),
+                   sizeof (Nlm_Internal_Custom_Header)))
+    {
+      Nlm_External_Custom_Header thdr;
+      boolean ds;
+      bfd_size_type hdrLength;
+
+      ds = find_nonzero ((PTR) nlm_custom_header (abfd)->dataStamp,
+                        sizeof (nlm_custom_header (abfd)->dataStamp));
+      memcpy (thdr.stamp, "CuStHeAd", 8);
+      hdrLength = (2 * NLM_TARGET_LONG_SIZE + (ds ? 8 : 0)
+                  + nlm_custom_header (abfd)->hdrLength);
+      put_word (abfd, hdrLength, thdr.length);
+      put_word (abfd, (bfd_vma) nlm_custom_header (abfd)->dataOffset,
+               thdr.dataOffset);
+      put_word (abfd, (bfd_vma) nlm_custom_header (abfd)->dataLength,
+               thdr.dataLength);
+      if (! ds)
+       {
+         BFD_ASSERT (nlm_custom_header (abfd)->hdrLength == 0);
+         if (bfd_write ((PTR) &thdr, 1,
+                        sizeof (thdr) - sizeof (thdr.dataStamp), abfd)
+             != sizeof (thdr) - sizeof (thdr.dataStamp))
+           return false;
+       }
+      else
+       {
+         memcpy (thdr.dataStamp, nlm_custom_header (abfd)->dataStamp,
+                 sizeof (thdr.dataStamp));
+         if (bfd_write ((PTR) &thdr, sizeof (thdr), 1, abfd) != sizeof (thdr))
+           return false;
+         if (bfd_write (nlm_custom_header (abfd)->hdr, 1,
+                        nlm_custom_header (abfd)->hdrLength, abfd)
+             != nlm_custom_header (abfd)->hdrLength)
+           return false;
+       }
+    }
+
   /* Write out the Cygnus debugging header if there is one.  */
-  if (find_nonzero ((PTR) nlm_cygnus_section_header (abfd),
-                   sizeof (Nlm_Internal_Cygnus_Section_Header)))
+  if (find_nonzero ((PTR) nlm_cygnus_ext_header (abfd),
+                   sizeof (Nlm_Internal_Cygnus_Ext_Header)))
     {
-      Nlm_External_Cygnus_Section_Header thdr;
+      Nlm_External_Custom_Header thdr;
 
-      memcpy (thdr.stamp, "CyGnUsSeCs", 10);
-      put_word (abfd, (bfd_vma) nlm_cygnus_section_header (abfd)->offset,
-               (bfd_byte *) thdr.offset);
-      put_word (abfd, (bfd_vma) nlm_cygnus_section_header (abfd)->length,
+      memcpy (thdr.stamp, "CuStHeAd", 8);
+      put_word (abfd, (bfd_vma) 2 * NLM_TARGET_LONG_SIZE + 8,
                (bfd_byte *) thdr.length);
+      put_word (abfd, (bfd_vma) nlm_cygnus_ext_header (abfd)->offset,
+               (bfd_byte *) thdr.dataOffset);
+      put_word (abfd, (bfd_vma) nlm_cygnus_ext_header (abfd)->length,
+               (bfd_byte *) thdr.dataLength);
+      memcpy (thdr.dataStamp, "CyGnUsEx", 8);
       if (bfd_write ((PTR) &thdr, sizeof (thdr), 1, abfd) != sizeof (thdr))
        return false;
     }
@@ -1361,17 +1441,17 @@ nlm_compute_section_file_positions (abfd)
   if (find_nonzero ((PTR) nlm_extended_header (abfd),
                    sizeof (Nlm_Internal_Extended_Header)))
     sofar += sizeof (Nlm_External_Extended_Header);
-  if (find_nonzero ((PTR) nlm_custom_header (abfd),
-                   sizeof (Nlm_Internal_Custom_Header)))
-    sofar += (sizeof (Nlm_External_Custom_Header)
-             + nlm_custom_header (abfd)->dataLength);
   if (find_nonzero ((PTR) nlm_copyright_header (abfd),
                    sizeof (Nlm_Internal_Copyright_Header)))
     sofar += (sizeof (Nlm_External_Copyright_Header)
              + nlm_copyright_header (abfd)->copyrightMessageLength + 1);
-  if (find_nonzero ((PTR) nlm_cygnus_section_header (abfd),
-                   sizeof (Nlm_Internal_Cygnus_Section_Header)))
-    sofar += sizeof (Nlm_External_Cygnus_Section_Header);
+  if (find_nonzero ((PTR) nlm_custom_header (abfd),
+                   sizeof (Nlm_Internal_Custom_Header)))
+    sofar += (sizeof (Nlm_External_Custom_Header)
+             + nlm_custom_header (abfd)->hdrLength);
+  if (find_nonzero ((PTR) nlm_cygnus_ext_header (abfd),
+                   sizeof (Nlm_Internal_Cygnus_Ext_Header)))
+    sofar += sizeof (Nlm_External_Custom_Header);
 
   /* Compute the section file positions in two passes.  First get the
      sizes of the text and data sections, and then set the file
index c49b8203249376ef92900f79498795f6adc469f1..a17dcc856f46e9e1275f061ed37500dc0c6bcab0 100644 (file)
@@ -1,3 +1,21 @@
+Thu May 26 18:05:52 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       * config/mh-alphaosf (CFLAGS): Don't specify both -g and -O;
+       they're not compatible under native cc.  Use -O1 instead.
+
+       * Makefile.in (VERSION): Updated to cygnus-2.4.1.
+
+       Changes from binutils-2.4 net release:
+
+       * Makefile.in (MANPAGES): Use $(DEMANGLER_PROG).
+       ($(DEMANGLER_PROG).1): Build from cxxfilt.man, using sed.
+       * cxxfilt.man: Renamed from c++filt.1, replaced "c++filt" with
+       magic token to be replaced by sed.
+
+       Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)
+
+       * configure.bat: update for latest makefile.in
+
 Fri May 13 23:25:13 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
        * bucomm.c: Check ANSI_PROTOTYPES rather than __STDC__.
index 377c180c8a7594e09b23adb5cf9d38e238195af9..56e844d3cffb1714b5e4d2398473895397997ae4 100644 (file)
@@ -46,7 +46,7 @@ SHELL = /bin/sh
 
 INSTALL = `cd $(srcdir)/..;pwd`/install.sh -c
 INSTALL_PROGRAM = $(INSTALL)
-INSTALL_DATA = $(INSTALL)
+INSTALL_DATA = $(INSTALL) 
 INSTALL_XFORM = $(INSTALL) -t='$(program_transform_name)'
 INSTALL_XFORM1 = $(INSTALL_XFORM) -b=.1
 
@@ -70,7 +70,7 @@ LEX_OPTIONS = -I -Cem
 LEX = `if [ -f ../flex/flex ] ; then echo ../flex/flex ; else echo flex ; fi`
 
 # Distribution version
-VERSION=cygnus-2.3.1
+VERSION=cygnus-2.4.1
 # Distribution name
 DIST_NAME=binutils-${VERSION}
 
@@ -79,9 +79,8 @@ version=`./../gcc/gcc -dumpversion`
 # Where to find texinfo.tex to format docn with TeX
 TEXIDIR = $(srcdir)/../texinfo
 
-MANPAGES= ar nm objdump ranlib size strings strip c++filt objcopy nlmconv
-
 #CC=gcc -Wall
+CC=cc
 # these two are almost the same program
 AR_PROG=ar
 RANLIB_PROG=ranlib
@@ -98,16 +97,19 @@ NM_PROG=nm.new
 OBJDUMP_PROG=objdump
 
 # This is the demangler, as a standalone program.
+# Note: This one is used as the installed name too, unlike the above.
 DEMANGLER_PROG=c++filt
 
 NLMCONV_PROG=nlmconv
 
-SRCONV_PROG=srconv sysdump coffdump
+SRCONV_PROG=srconv sysdump coffdump 
+
+MANPAGES= ar nm objdump ranlib size strings strip $(DEMANGLER_PROG) objcopy nlmconv
 
-PROGS = $(SIZE_PROG) $(OBJDUMP_PROG) $(NM_PROG) $(AR_PROG) $(STRINGS_PROG) $(STRIP_PROG) $(RANLIB_PROG) $(DEMANGLER_PROG) $(OBJCOPY_PROG) $(BUILD_NLMCONV) $(BUILD_SRCONV)
+PROGS = $(SIZE_PROG) $(OBJDUMP_PROG) $(NM_PROG) $(AR_PROG) $(STRINGS_PROG) $(STRIP_PROG) $(RANLIB_PROG) $(DEMANGLER_PROG) $(OBJCOPY_PROG) $(BUILD_NLMCONV) $(BUILD_SRCONV) $(SYSINFO_PROG) 
 STAGESTUFF = $(PROGS) *.o
 # Files that can be generated, but should be in the distribution.
-DISTSTUFF=arparse.c arlex.c nlmheader.c info
+DISTSTUFF=arparse.c arlex.c nlmheader.c sysinfo.c syslex.c info
 
 BASEDIR = $(srcdir)/..
 BFDDIR = $(BASEDIR)/bfd
@@ -265,10 +267,11 @@ sysroff.c: sysinfo sysroff.info
        ./sysinfo -g <$(srcdir)/sysroff.info >>sysroff.c
        ./sysinfo -d <$(srcdir)/sysroff.info >sysroff.h 
 
-sysinfo.c: sysinfo.y 
+sysinfo.h sysinfo.c: sysinfo.y 
        $(BISON) -tvd $(srcdir)/sysinfo.y
        rm -f sysinfo.c
        -mv y.tab.c sysinfo.c
+       -mv y.tab.h sysinfo.h
 
 syslex.c : syslex.l
        $(LEX) $(LEX_OPTIONS) $(srcdir)/syslex.l
@@ -277,7 +280,7 @@ syslex.c : syslex.l
 sysinfo: sysinfo.o syslex.o $(ADDL_LIBS)
        $(CC_FOR_BUILD) $(CFLAGS) $(LDFLAGS) -o $@ sysinfo.o syslex.o 
 
-syslex.o: syslex.c
+syslex.o: syslex.c sysinfo.h
        $(CC_FOR_BUILD) -c -I. $(CFLAGS)  syslex.c 
 
 sysinfo.o: sysinfo.c
@@ -395,6 +398,10 @@ binutils.dvi: $(srcdir)/binutils.texi
 binutils.info: $(srcdir)/binutils.texi
        $(MAKEINFO) -o binutils.info $(srcdir)/binutils.texi
 
+$(DEMANGLER_PROG).1: cxxfilt.man Makefile
+       sed -e 's/@PROGRAM@/$(DEMANGLER_PROG)/' < $(srcdir)/cxxfilt.man \
+               > $(DEMANGLER_PROG).1
+
 #   different targets for -ms, -mm, -me
 # Try to use a recent texi2roff.  v2 was put on prep in jan91.
 # If you want an index, see texi2roff doc for postprocessing 
@@ -468,7 +475,7 @@ distclean:
        @if [ -d testsuite ] ; then \
          cd testsuite ; $(MAKE) $(FLAGS_TO_PASS) distclean ; \
        else true; fi
-       -rm -f Makefile config.status sysdep.h *.o *~ \#* core \
+       -rm -f Makefile config.status sysdep.h *.o *~ \#* core y.* \
                binutils.?? binutils.??s binutils.aux binutils.log binutils.toc
        -rm -f $(PROGS) underscore.c
 realclean: clean distclean
@@ -479,7 +486,7 @@ etags tags: TAGS
 TAGS: force
        etags $(INCDIR)/*.h $(srcdir)/*.[hc] 
 
-install: all
+install: all $(DEMANGLER_PROG).1
        for i in $(PROGS) ; do \
          $(INSTALL_XFORM) $$i $(bindir)/`echo $$i | sed -e 's/.new//'` ; \
        done
@@ -506,7 +513,7 @@ install-info: binutils.info
        else \
          dir=$(srcdir) ; \
        fi ; \
-       for i in $$dir/binutils.info* ; do \
+       for i in `cd $$dir; echo binutils.info*` ; do \
                $(INSTALL_DATA) $$i $(infodir)/$$i ; \
        done
 
index 3e26788cefffb697584be0ee1c104a55c2e545af..ec3abcfffe52b2af2616534d4ae6303a98bab393 100644 (file)
@@ -1,3 +1,67 @@
+Thu May 19 13:45:59 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       Merged in changes from gas-2.3 net release:
+
+       * Makefile.in (VERSION): Updated to cygnus-2.3.1.
+
+       * config/obj-vms.c: Replaced unchecked uses of malloc with
+       xmalloc.
+
+       * listing.c (list_symbol_table): Only test BFD64, not
+       BFD_ASSEMBLER too.
+
+       * config/obj-coff.c (fixup_segment) [DIFF_EXPR_OK]: Don't check
+       pcrel, just convert it.
+
+       * config/obj-vms.c: Removed lots of extra semicolons after
+       compound statements.
+       (strchr): Don't declare here.
+
+       * config/ho-vax.h (realloc): Declare.
+
+       * config/ho-vms.h (strchr, strdup): Declare.
+
+       * config/tc-sparc.c (md_parse_option) [OBJ_ELF]: Accept and ignore
+       option `-q'.
+
+       Wed May 18 20:50:35 1994  Pat Rankin  (rankin@eql.caltech.edu)
+
+       * config/obj-vms.h (DBG_S_C_SQUAD, DBG_S_C_UQUAD): define these
+       new VMS symbol-type macros; signed and unsigned quadword integers,
+       for `long long' support.  Their values come from the existing
+       DSC$K_DTYPE_QU and DSC$K_DTYPE_Q macros in <descrip.h>.  The
+       VMS debugger now recognizes `long long' variables correctly.
+       config/obj-vms.c (VMS_typedef_parse) [case 'r']: add entries
+       for gcc2's predefined types "long double" (same as double, as
+       per gcc's current state), "long long int", "long long unsigned
+       int", and final `otherwise' case (to avoid uninitialized type
+       and size fields).  [caveat:  predefined types "complex int",
+       "complex float", "complex double", and "complex long double" are
+       still missing.]
+
+       * config/ho-vms.h (EXIT_FAILURE): define as 0x10000002 instead
+       of 0, because the latter indicates success rather than failure
+       when passed to `exit' or return from `main' compiled by gcc2.
+
+       * config/obj-vms.c (array_suffix, generate_suffix): replace two
+       hardcoded `0xa3's with macro DBG_S_C_ADVANCED_TYPE from obj-vms.h.
+       (VMS_typedef_parse): eliminate redundant if-then-else when
+       allocating new symbol entry and linking it to VMS_Symbol_type_list.
+
+       Tue May 17 20:47:31 1994  Pat Rankin  (rankin@eql.caltech.edu)
+
+       * config/obj-vms.c (Write_VMS_MHD_Records): don't try to interpret
+       the contents of the GAS_VERSION string when falling back to it for
+       language processor identification.
+
+       * make-gas.com, vmsconf.sh (ENVIRON): fix misspelling of
+       `psect_attr' in linker options.
+
+       Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)
+
+       * configure.bat: update to latest makefile.in
+       * config/te-go32.h: [new] go32's environment
+
 Fri May 20 17:59:34 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
        * as.h: Don't declare parameters for strstr.
index ae98eb52d5438702688c4fe3a986fbb00866aee8..84b0c0bafe91568ac8d4595ac07f941b995fe86a 100644 (file)
@@ -50,7 +50,7 @@ infodir = $(prefix)/info
 includedir = $(prefix)/include
 docdir = $(datadir)/doc
 
-VERSION=cygnus-2.2.90
+VERSION=cygnus-2.3.1
 
 SHELL = /bin/sh
 
index 6da66912ce7725a964096edc138c7f03e310fd46..ed8ccc7e6b9fbe7c2f25f75b2e011b6b65d5dac1 100644 (file)
@@ -22,6 +22,7 @@
 #endif /* not ansi */
 
 extern char *malloc ();
+extern char *realloc ();
 extern int free ();
 
 /* end of ho-vax.h */
index a546019bd945b7d372809d68f3e9719276e367bf..04a71ddb46bdf9968a8677a316d699709dd783f0 100644 (file)
 #include <perror.h>
 
 #ifndef EXIT_SUCCESS
-#define EXIT_SUCCESS 1
-#define EXIT_FAILURE 0
+#define EXIT_SUCCESS 1                 /* SS$_NORMAL, STS$K_SUCCESS */
+#define EXIT_FAILURE 0x10000002                /* (STS$K_ERROR | STS$M_INHIB_MSG) */
 #endif
 
 #define unlink delete
 
+extern char *strchr ();
+extern char *strdup ();
+
 /* end of ho-vms.h */
index 10b7fd26ece0c0f8af36629b6902016b27b0492b..2216ac0910e5785c8016ec87ca8408b2c15d70b2 100644 (file)
@@ -53,8 +53,6 @@ char *compiler_version_string;
 
 char vms_name_mapping = 0;
 
-
-extern char *strchr ();
 extern char *myname;
 static symbolS *Entry_Point_Symbol = 0;        /* Pointer to "_main" */
 
@@ -661,8 +659,8 @@ VMS_Set_Data (Psect_Index, Offset, Record_Type, Force)
          PUT_CHAR (TIR_S_C_STA_WPB);
          PUT_SHORT (Psect_Index);
          PUT_CHAR (Offset);
-       };
-    };
+       }
+    }
   /*
    *   Set relocation base
    */
@@ -947,8 +945,8 @@ VMS_TBT_Routine_End (Max_Size, sp)
               !strcmp (S_GET_NAME (sp), "gcc2_compiled.")))
            Size = S_GET_VALUE (symbolP);
 
-       };
-    };
+       }
+    }
   if (Size == 0x7fffffff)
     Size = Max_Size;
   Size -= S_GET_VALUE (sp);    /* and get the size of the routine */
@@ -1417,7 +1415,7 @@ find_file (sp)
        break;
       if (fpnt->spnt == sp)
        return fpnt;
-    };
+    }
   for (fpnt = file_root; fpnt; fpnt = fpnt->next)
     {
       if (fpnt == (struct input_file *) NULL)
@@ -1428,9 +1426,9 @@ find_file (sp)
            return fpnt;
          same_file = fpnt;
          break;
-       };
-    };
-  fpnt = (struct input_file *) malloc (sizeof (struct input_file));
+       }
+    }
+  fpnt = (struct input_file *) xmalloc (sizeof (struct input_file));
   if (file_root == (struct input_file *) NULL)
     file_root = fpnt;
   else
@@ -1438,7 +1436,7 @@ find_file (sp)
       struct input_file *fpnt1;
       for (fpnt1 = file_root; fpnt1->next; fpnt1 = fpnt1->next) ;
       fpnt1->next = fpnt;
-    };
+    }
   fpnt->next = (struct input_file *) NULL;
   fpnt->name = S_GET_NAME (sp);
   fpnt->min_line = 0x7fffffff;
@@ -1522,7 +1520,7 @@ fix_name (pnt)
     {
       if (*pnt1 == '.')
        *pnt1 = '$';
-    };
+    }
   return pnt;
 }
 
@@ -1566,7 +1564,7 @@ find_symbol (dbx_type)
       if (spnt->dbx_type == dbx_type)
        break;
       spnt = spnt->next;
-    };
+    }
   if (spnt == (struct VMS_DBG_Symbol *) NULL)
     return 0;                  /*Dunno what this is*/
   if(spnt->advanced == ALIAS)
@@ -1595,7 +1593,7 @@ push (value, size)
          overflow = 1;
          Lpnt = 1;
          return;
-       };
+       }
       Lpnt -= size1;
       md_number_to_chars (&Local[Lpnt + 1], value, size1);
     }
@@ -1606,10 +1604,10 @@ push (value, size)
          overflow = 1;
          Apoint = MAX_DEBUG_RECORD - 1;
          return;
-       };
+       }
       md_number_to_chars (&Asuffix[Apoint], value, size1);
       Apoint += size1;
-    };
+    }
 }
 
 /* this routine generates the array descriptor for a given array */
@@ -1629,7 +1627,7 @@ array_suffix (spnt2)
       spnt = find_symbol (spnt->type2);
       if (spnt == (struct VMS_DBG_Symbol *) NULL)
        return;
-    };
+    }
   spnt1 = spnt;
   spnt1 = spnt;
   total_size = 1;
@@ -1638,10 +1636,10 @@ array_suffix (spnt2)
       rank++;
       total_size *= (spnt1->index_max - spnt1->index_min + 1);
       spnt1 = find_symbol (spnt1->type2);
-    };
+    }
   total_size = total_size * spnt1->data_size;
   push (spnt1->data_size, 2);
-  if (spnt1->VMS_type == 0xa3)
+  if (spnt1->VMS_type == DBG_S_C_ADVANCED_TYPE)
     push (0, 1);
   else
     push (spnt1->VMS_type, 1);
@@ -1657,14 +1655,14 @@ array_suffix (spnt2)
     {
       push (spnt1->index_max - spnt1->index_min + 1, 4);
       spnt1 = find_symbol (spnt1->type2);
-    };
+    }
   spnt1 = spnt;
   while (spnt1->advanced == ARRAY)
     {
       push (spnt1->index_min, 4);
       push (spnt1->index_max, 4);
       spnt1 = find_symbol (spnt1->type2);
-    };
+    }
 }
 
 /* this routine generates the start of a variable descriptor based upon
@@ -1677,7 +1675,7 @@ new_forward_ref (dbx_type)
      int dbx_type;
 {
   struct forward_ref *fpnt;
-  fpnt = (struct forward_ref *) malloc (sizeof (struct forward_ref));
+  fpnt = (struct forward_ref *) xmalloc (sizeof (struct forward_ref));
   fpnt->next = f_ref_root;
   f_ref_root = fpnt;
   fpnt->dbx_type = dbx_type;
@@ -1718,7 +1716,7 @@ gen1 (spnt, array_suffix_len)
          total_len = 2;
          push (total_len, -2);
          return 1;
-       };
+       }
       push (0, -4);
       push (0xfa02, -2);
       total_len = -2;
@@ -1748,7 +1746,7 @@ gen1 (spnt, array_suffix_len)
          push (DBG_S_C_POINTER, -1);
          total_len += 3;
          push (total_len, -2);
-       };
+       }
       return 1;
     case ARRAY:
       spnt1 = spnt;
@@ -1762,7 +1760,7 @@ gen1 (spnt, array_suffix_len)
                      spnt->type2);
              return;
            }
-       };
+       }
 /* It is too late to generate forward references, so the user gets a message.
  * This should only happen on a compiler error */
       i = gen1 (spnt1, 1);
@@ -1781,10 +1779,10 @@ gen1 (spnt, array_suffix_len)
          push (0xfa, -1);
          push (0x0101, -2);
          push (DBG_S_C_COMPLEX_ARRAY, -1);
-       };
+       }
       total_len += array_suffix_len + 8;
       push (total_len, -2);
-    };
+    }
 }
 
 /* This generates a suffix for a variable.  If it is not a defined type yet,
@@ -1811,10 +1809,10 @@ generate_suffix (spnt, dbx_type)
     new_forward_ref (dbx_type);
   else
     {
-      if (spnt->VMS_type != 0xa3)
+      if (spnt->VMS_type != DBG_S_C_ADVANCED_TYPE)
        return 0;               /* no suffix needed */
       gen1 (spnt, 0);
-    };
+    }
   push (0x00af, -2);
   total_len += 4;
   push (total_len, -1);
@@ -1826,7 +1824,7 @@ generate_suffix (spnt, dbx_type)
       printf (" Variable descriptor %d too complicated. Defined as *void ", spnt->dbx_type);
       VMS_Store_Immediate_Data (pvoid, 6, OBJ_S_C_DBG);
       return;
-    };
+    }
   i = 0;
   while (Lpnt < MAX_DEBUG_RECORD - 1)
     Local[i++] = Local[++Lpnt];
@@ -1837,7 +1835,7 @@ generate_suffix (spnt, dbx_type)
       VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
       Lpnt = 0;
       VMS_Store_Struct (struct_number);
-    };
+    }
 /* we use this for a forward reference to a structure that has yet to be
 *defined.  We store four bytes of zero to make room for the actual address once
 * it is known
@@ -1852,7 +1850,7 @@ generate_suffix (spnt, dbx_type)
        Local[Lpnt++] = 0;
       VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
       Lpnt = 0;
-    };
+    }
   i = 0;
   while (i < Apoint)
     Local[Lpnt++] = Asuffix[i++];
@@ -1952,7 +1950,7 @@ VMS_local_stab_Parse (sp)
              {
                char * pnt3=(char*) strchr (S_GET_NAME (sp1), ':') + 1;
                if (*pnt3 == 'F' || *pnt3 == 'f') break;
-             };
+             }
            if (S_GET_RAW_TYPE (sp1) != N_RSYM)
              continue;
            str1 = S_GET_NAME (sp1);    /* and get the name */
@@ -1963,15 +1961,15 @@ VMS_local_stab_Parse (sp)
                  break;
                pnt2++;
                str1++;
-             };
+             }
            if ((*str1 != ':') || (*pnt2 != ':'))
              continue;
            return;             /* they are the same!  lets skip this one */
-         };                    /* for */
+         }                     /* for */
 /* first find the dbx symbol type from list, and then find VMS type */
        pnt++;                  /* skip p in case no register */
-      };                       /* if */
-  };                           /* p block */
+      }                        /* if */
+  }                            /* p block */
   pnt = cvt_integer (pnt, &dbx_type);
   spnt = find_symbol (dbx_type);
   if (spnt == (struct VMS_DBG_Symbol *) NULL)
@@ -2037,13 +2035,13 @@ VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
                      (S_GET_RAW_TYPE (vsp->Symbol) == type2)))
                break;
          vsp = vsp->Next;
-       };
+       }
       if (vsp != (struct VMS_Symbol *) NULL)
        {
          VMS_DBG_record (spnt, vsp->Psect_Index, vsp->Psect_Offset, str);
          *pnt1 = ':';          /* and restore the string */
          return 1;
-       };
+       }
 /* the symbol was not in the symbol list, but it may be an "entry point"
    if it was a constant */
       for (sp1 = symbol_rootP; sp1; sp1 = symbol_next (sp1))
@@ -2068,7 +2066,7 @@ VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
                  printf ("definitions of global variables in your source module(s).  Don't say\n");
                  printf ("I didn't warn you!");
                  gave_compiler_message = 1;
-               };
+               }
              VMS_DBG_record (spnt,
                              Text_Psect,
                              S_GET_VALUE (sp1),
@@ -2078,9 +2076,9 @@ VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
              /* fool assembler to not output this
               * as a routine in the TBT */
              return 1;
-           };
-       };
-    };
+           }
+       }
+    }
   *pnt1 = ':';                 /* and restore the string */
   return 0;
 }
@@ -2158,7 +2156,7 @@ VMS_RSYM_Parse (sp, Current_Routine, Text_Psect)
        {
          pnt=(char*) strchr (S_GET_NAME (symbolP), ':') + 1;
          if (*pnt == 'F' || *pnt == 'f') break;
-       };
+       }
     }
 /* check to see that the addresses were defined.  If not, then there were no
  * brackets in the function, and we must try to search for the next function
@@ -2190,7 +2188,7 @@ VMS_RSYM_Parse (sp, Current_Routine, Text_Psect)
  * as a marker of the max PC for which this reg is valid */
       if (Max_Offset == 0x7fffffff)
        Max_Offset = Max_Source_Offset;
-    };
+    }
   dbx_type = 0;
   str = S_GET_NAME (sp);
   pnt = (char *) strchr (str, ':');
@@ -2268,8 +2266,8 @@ forward_reference (pnt)
          if (spnt1 == (struct VMS_DBG_Symbol *) NULL)
            break;
          spnt = spnt1;
-       };
-      };
+       }
+      }
       pnt = cvt_integer (pnt + 1, &i);
       pnt = cvt_integer (pnt + 1, &i);
   } while (*++pnt != ';');
@@ -2290,8 +2288,8 @@ final_forward_reference (spnt)
               (spnt1 == (struct VMS_DBG_Symbol*) NULL))return 1;
            if(spnt1 == (struct VMS_DBG_Symbol*) NULL) break;
            spnt=spnt1;
-         };
-       };
+         }
+       }
        return 0;       /* no forward refences found */
 }
 
@@ -2337,7 +2335,7 @@ VMS_typedef_parse (str)
     {                          /* check for static constants */
       *str = '\0';             /* for now we ignore them */
       return 0;
-    };
+    }
   while ((*pnt <= '9') && (*pnt >= '0'))
     pnt--;
   pnt++;                       /* and get back to the number */
@@ -2346,20 +2344,11 @@ VMS_typedef_parse (str)
 /* first we see if this has been defined already, due to a forward reference*/
   if (spnt == (struct VMS_DBG_Symbol *) NULL)
     {
-      if (VMS_Symbol_type_list == (struct VMS_DBG_Symbol *) NULL)
-       {
-         spnt = (struct VMS_DBG_Symbol *) malloc (sizeof (struct VMS_DBG_Symbol));
-         spnt->next = (struct VMS_DBG_Symbol *) NULL;
-         VMS_Symbol_type_list = spnt;
-       }
-      else
-       {
-         spnt = (struct VMS_DBG_Symbol *) malloc (sizeof (struct VMS_DBG_Symbol));
-         spnt->next = VMS_Symbol_type_list;
-         VMS_Symbol_type_list = spnt;
-       };
+      spnt = (struct VMS_DBG_Symbol *) xmalloc (sizeof (struct VMS_DBG_Symbol));
+      spnt->next = VMS_Symbol_type_list;
+      VMS_Symbol_type_list = spnt;
       spnt->dbx_type = i1;     /* and save the type */
-    };
+    }
 /* for structs and unions, do a partial parse, otherwise we sometimes get
  * circular definitions that are impossible to resolve. We read enough info
  * so that any reference to this type has enough info to be resolved
@@ -2367,7 +2356,7 @@ VMS_typedef_parse (str)
   pnt = str + 1;               /* point to character past equal sign */
   if ((*pnt == 'u') || (*pnt == 's'))
     {
-    };
+    }
   if ((*pnt <= '9') && (*pnt >= '0'))
     {
       if (type_check ("void"))
@@ -2375,13 +2364,13 @@ VMS_typedef_parse (str)
          *str = '\0';
          spnt->advanced = VOID;
          return 0;
-       };
+       }
       if (type_check ("unknown type"))
        {                       /* this is the void symbol */
          *str = '\0';
          spnt->advanced = UNKNOWN;
          return 0;
-       };
+       }
       pnt1 = cvt_integer(pnt,&i1);
       if(i1 != spnt->dbx_type)
        {
@@ -2393,7 +2382,7 @@ VMS_typedef_parse (str)
       printf ("gcc-as warning(debugger output):");
       printf (" %d is an unknown untyped variable.\n", spnt->dbx_type);
       return 1;                        /* do not know what this is */
-    };
+    }
 /* now define this module*/
   pnt = str + 1;               /* point to character past equal sign */
   switch (*pnt)
@@ -2452,9 +2441,32 @@ VMS_typedef_parse (str)
        }
       else if (type_check ("double"))
        {
+         /* caveat: this assumes D_float, and is not correct for G_float */
          spnt->VMS_type = DBG_S_C_REAL8;
          spnt->data_size = 8;
        }
+      else if (type_check ("long double"))
+       {
+         /* same as double, at least for now */
+         spnt->VMS_type = DBG_S_C_REAL8;
+         spnt->data_size = 8;
+       }
+      else if (type_check ("long long int"))
+       {
+         spnt->VMS_type = DBG_S_C_SQUAD;       /* signed quadword */
+         spnt->data_size = 8;
+       }
+      else if (type_check ("long long unsigned int"))
+       {
+         spnt->VMS_type = DBG_S_C_UQUAD;       /* unsigned quadword */
+         spnt->data_size = 8;
+       }
+      else
+       {
+         /* something more substantial ought to be done here */
+         spnt->VMS_type = 0;
+         spnt->data_size = 0;
+       }
       pnt1 = (char *) strchr (str, ';') + 1;
       break;
     case 's':
@@ -2482,9 +2494,9 @@ VMS_typedef_parse (str)
              fpnt->resolved = 'Y';
              VMS_Set_Struct (fpnt->struc_numb);
              VMS_Store_Struct (spnt->struc_numb);
-           };
+           }
          fpnt = fpnt->next;
-       };
+       }
       VMS_Set_Struct (spnt->struc_numb);
       i = 0;
       Local[i++] = 11 + strlen (pnt);
@@ -2505,7 +2517,7 @@ VMS_typedef_parse (str)
        {
          pnt += strlen (pnt);
          *pnt = ':';
-       };                      /* replace colon for later */
+       }                       /* replace colon for later */
       while (*++pnt1 != ';')
        {
          pnt = (char *) strchr (pnt1, ':');
@@ -2558,8 +2570,8 @@ VMS_typedef_parse (str)
                generate_suffix (spnt1, dtype);
              else if (spnt1->VMS_type == DBG_S_C_ADVANCED_TYPE)
                generate_suffix (spnt1, 0);
-           };
-       };
+           }
+       }
       pnt1++;
       Local[i++] = 0x01;       /* length byte */
       Local[i++] = DBG_S_C_STRUCT_END;
@@ -2580,9 +2592,9 @@ VMS_typedef_parse (str)
              fpnt->resolved = 'Y';
              VMS_Set_Struct (fpnt->struc_numb);
              VMS_Store_Struct (spnt->struc_numb);
-           };
+           }
          fpnt = fpnt->next;
-       };
+       }
       VMS_Set_Struct (spnt->struc_numb);
       i = 0;
       Local[i++] = 3 + strlen (symbol_name);
@@ -2611,7 +2623,7 @@ VMS_typedef_parse (str)
          VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
          i = 0;
          pnt = pnt1;           /* Skip final semicolon */
-       };
+       }
       Local[i++] = 0x01;       /* len byte */
       Local[i++] = DBG_S_C_ENUM_END;
       VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
@@ -2654,7 +2666,7 @@ VMS_typedef_parse (str)
       printf ("gcc-as warning(debugger output):");
       printf (" %d is an unknown type of variable.\n", spnt->dbx_type);
       return 1;                        /* unable to decipher */
-    };
+    }
 /* this removes the evidence of the definition so that the outer levels of
 parsing do not have to worry about it */
   pnt = str;
@@ -2731,7 +2743,7 @@ VMS_LSYM_Parse ()
                        pnt = str + strlen(str) - 1;
                      } while (*pnt == '?');
                      tlen += strlen(str);
-                     parse_buffer = (char *) malloc (tlen + 1);
+                     parse_buffer = (char *) xmalloc (tlen + 1);
                      strcpy(parse_buffer, S_GET_NAME (sp));
                      pnt2 = parse_buffer + strlen(S_GET_NAME (sp)) - 1;
                      *pnt2 = '\0';
@@ -2747,7 +2759,7 @@ VMS_LSYM_Parse ()
                      } while (1 == 1);
                      str = parse_buffer;
                      symbol_name = str;
-                   };
+                   }
                  pnt = (char *) strchr (str, ':');
                  if (pnt != (char *) NULL)
                    {
@@ -2763,9 +2775,9 @@ VMS_LSYM_Parse ()
                        strcpy(S_GET_NAME (sp), parse_buffer);
                        free (parse_buffer);
                        parse_buffer = 0;
-                     };
+                     }
                      *pnt = ':';       /* put back colon so variable def code finds dbx_type*/
-                   };
+                   }
                  break;
                }               /*switch*/
            }                   /* if */
@@ -2776,7 +2788,7 @@ VMS_LSYM_Parse ()
         {
           final_pass = 1;
          incom1 ++;  /* Force one last pass through */
-       };
+       }
   } while ((incomplete != 0) && (incomplete != incom1));
   /* repeat until all refs resolved if possible */
 /*     if (pass > 1) printf(" Required %d passes\n",pass);*/
@@ -2784,7 +2796,7 @@ VMS_LSYM_Parse ()
     {
       printf ("gcc-as warning(debugger output):");
       printf ("Unable to resolve %d circular references.\n", incomplete);
-    };
+    }
   fpnt = f_ref_root;
   symbol_name = "\0";
   while (fpnt != (struct forward_ref *) NULL)
@@ -2798,14 +2810,14 @@ VMS_LSYM_Parse ()
              printf ("Forward reference error, dbx type %d\n",
                      fpnt->dbx_type);
              break;
-           };
+           }
          fixit[0] = 0;
          sprintf (&fixit[1], "%d=s4;", fpnt->dbx_type);
          pnt2 = (char *) strchr (&fixit[1], '=');
          VMS_typedef_parse (pnt2);
-       };
+       }
       fpnt = fpnt->next;
-    };
+    }
 }
 
 static
@@ -2821,7 +2833,7 @@ Define_Local_Symbols (s1, s2)
        {
          char * pnt=(char*) strchr (S_GET_NAME (symbolP1), ':') + 1;
          if (*pnt == 'F' || *pnt == 'f') break;
-       };
+       }
       /*
        *       Deal with STAB symbols
        */
@@ -2868,7 +2880,7 @@ Define_Routine (symbolP, Level)
        {
          char * pnt=(char*) strchr (S_GET_NAME (symbolP1), ':') + 1;
          if (*pnt == 'F' || *pnt == 'f') break;
-       };
+       }
       /*
        *       Deal with STAB symbols
        */
@@ -2884,7 +2896,7 @@ Define_Routine (symbolP, Level)
                {
                  sprintf (str, "$%d", rcount++);
                  VMS_TBT_Block_Begin (symbolP1, Text_Psect, str);
-               };
+               }
              Offset = S_GET_VALUE (symbolP1);
              Define_Local_Symbols (sstart, symbolP1);
              symbolP1 =
@@ -3045,6 +3057,9 @@ Write_VMS_MHD_Records ()
   /*
    *   Store language processor name and version
    *   (not a counted string!)
+   *
+   *   This is normally supplied by the gcc driver for the command line
+   *   which invokes gas.  If absent, we fall back to gas's version.
    */
   cp = compiler_version_string;
   if (cp == 0)
@@ -3052,12 +3067,9 @@ Write_VMS_MHD_Records ()
       cp = "GNU AS  V";
       while (*cp)
        PUT_CHAR (*cp++);
-      cp = strchr (GAS_VERSION, '.');
-      while (*cp != ' ')
-       cp--;
-      cp++;
-    };
-  while (*cp >= 32)
+      cp = GAS_VERSION;
+    }
+  while (*cp >= ' ')
     PUT_CHAR (*cp++);
   /*
    *   Flush the record
@@ -3216,7 +3228,7 @@ VMS_Case_Hack_Symbol (In, Out)
            *Out++ = isupper(*In) ? tolower(*In++) : *In++;
          }
          break;
-       };
+       }
     }
   /*
    *   If we saw a dollar sign, we don't do case hacking
@@ -3269,7 +3281,7 @@ VMS_Case_Hack_Symbol (In, Out)
                  tolower(*In++) :
                    *In++;
                  break;
-               };
+               }
            }
        }
     }
@@ -3480,7 +3492,7 @@ VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Defined)
       else
        {
          PUT_SHORT (GSY_S_M_DEF);
-       };
+       }
       /*
        *       Psect Number
        */
@@ -3511,7 +3523,7 @@ VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Defined)
       else
        {
          PUT_SHORT (0);
-       };
+       }
     }
   /*
    *   Finally, the global symbol name
@@ -3601,7 +3613,7 @@ VMS_Psect_Spec (Name, Size, Type, vsp)
       vsp->Psect_Index = -1;   /* to catch errors */
       S_GET_RAW_TYPE (vsp->Symbol) = N_UNDF;   /* make refs work */
       return 1;                        /* decrement psect counter */
-    };
+    }
 
   if ((Psect_Attributes & GLOBALSYMBOL_BIT) != 0)
     {
@@ -3626,9 +3638,9 @@ VMS_Psect_Spec (Name, Size, Type, vsp)
                     Name);
            error (Error_Line);
            break;
-         };
-       };                      /* switch */
-    };
+         }
+       }                       /* switch */
+    }
 
   Psect_Attributes &= 0xffff;  /* clear out the globalref/def stuff */
   /*
@@ -3772,7 +3784,7 @@ VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
       if (!HAS_PSECT_ATTRIBUTES (Name))
        continue;
 
-      stripped_name = (char *) malloc (strlen (Name) + 1);
+      stripped_name = (char *) xmalloc (strlen (Name) + 1);
       strcpy (stripped_name, Name);
       Psect_Attributes = 0;
       VMS_Modify_Psect_Attributes (stripped_name, &Psect_Attributes);
@@ -3799,10 +3811,10 @@ VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
            default:
              printf (" Invalid globalvalue of %s\n", stripped_name);
              break;
-           };                  /* switch */
-       };                      /* if */
+           }                   /* switch */
+       }                       /* if */
       free (stripped_name);    /* clean up */
-    };                         /* for */
+    }                          /* for */
 
 }
 \f
@@ -4546,7 +4558,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
            as_warn("g++ wrote an extern reference to %s as a routine.",
                    S_GET_NAME (sp));
            as_warn("I will fix it, but I hope that it was not really a routine");
-         };
+         }
        break;
       default:
        break;
@@ -5233,13 +5245,13 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
                  Current_File->file_number = 0;
                  File_Number--;
                  continue;
-               };
-           };
+               }
+           }
          VMS_TBT_Source_Lines (Current_File->file_number,
                                Current_File->min_line,
                       Current_File->max_line - Current_File->min_line + 1);
-       };                      /* for */
-    };                         /* scope */
+       }                       /* for */
+    }                          /* scope */
     Current_File = (struct input_file *) NULL;
 
     for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
@@ -5294,11 +5306,11 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
                    continue;
                  while (*pnt++ == *pnt1++)
                    {
-                   };
+                   }
                  if (*pnt1 != 'F' && *pnt1 != 'f') continue;
                  if ((*(--pnt) == '\0') && (*(--pnt1) == ':'))
                    break;
-               };
+               }
              if (symbolP1 != (symbolS *) NULL)
                VMS_DBG_Define_Routine (symbolP1, Current_Routine, Text_Psect);
            }                   /* local symbol block */
index 6cad61fa2d6c23b47aa56ce9864739a5e93834a8..c645059ee99ed5ead55d359225d53c4af6c0bfa5 100644 (file)
@@ -421,11 +421,13 @@ extern int vms_resolve_symbol_redef ();
 #define DBG_S_C_UCHAR          0x02
 #define DBG_S_C_USINT          0x03
 #define DBG_S_C_ULINT          0x04
+#define DBG_S_C_UQUAD          0x05
 #define DBG_S_C_SCHAR          0x06
 #define DBG_S_C_SSINT          0x07
 #define DBG_S_C_SLINT          0x08
+#define DBG_S_C_SQUAD          0x09
 #define DBG_S_C_REAL4          0x0a
-#define DBG_S_C_REAL8          0x0b
+#define DBG_S_C_REAL8          0x0b            /* D_float (G_float is 0x1b) */
 #define DBG_S_C_FUNCTION_ADDR  0x17
 #define DBG_S_C_ADVANCED_TYPE  0xa3
 /*  These are the codes that are used to generate the definitions of struct
index 26e66436cdf44e70dca5a08ce2f9ffaca780e2f1..733e3d22a1879097833f3f208a9734b6710ce6bf 100644 (file)
@@ -2240,7 +2240,6 @@ md_parse_option (argP, cntP, vecP)
   if (!strcmp (*argP, "bump"))
     {
       warn_on_bump = 1;
-
     }
   else if (**argP == 'A')
     {
@@ -2278,6 +2277,10 @@ md_parse_option (argP, cntP, vecP)
     {
       /* use .stab instead of .stab.excl */
     }
+  else if (**argP == 'q')
+    {
+      /* quick -- native assembler does fewer checks */
+    }
 #endif
   else if (strcmp (*argP, "sparc") == 0)
     {
index 5bccdba451f17eb12a79ac706d4a80aeb4fdcfa6..784bae75c4f8824477bf1c23d55b21e368efa24e 100644 (file)
@@ -1,28 +1,65 @@
-@echo off
-if "%1" == "go32" goto h8300
-if "%1" == "h8/300" goto h8300
-echo Specify one of [ go32 h8/300 ] on command line
-goto exit
-
-:go32
-echo Configuring gas for go32
-copy config\i386.md md
-copy config\out-i386.c aux-output.c
-copy config\tm-i386gas.h tm.h
-copy config\float.h-ieee float.h
-copy config\xm-i386.h config.h
-copy Makefile.dos Makefile
-goto exit
-
-:h8300
-echo Configuring gas for H8/300
-copy config\ho-go32.h host.h
-copy config\tc-h8300.c targ-cpu.c
-copy config\tc-h8300.h targ-cpu.h
-copy config\te-generic.h targ-env.h
-copy config\objcoffbfd.h obj-format.h
-copy config\objcoffbfd.c obj-format.c
-copy config\atof-ieee.c atof-targ.c
-copy Makefile.dos Makefile
-
-:exit
+@echo off\r
+if "%1" == "h8/300" goto h8300\r
+\r
+echo Configuring gas for go32\r
+update config/ho-go32.h host.h\r
+update config/tc-i386.c targ-cpu.c\r
+update config/tc-i386.h targ-cpu.h\r
+update config/te-go32.h targ-env.h\r
+update config/obj-coff.h obj-format.h\r
+update config/obj-coff.c obj-format.c\r
+update config/atof-ieee.c atof-targ.c\r
+goto common\r
+\r
+:h8300\r
+echo Configuring gas for H8/300\r
+copy config\ho-go32.h host.h\r
+copy config\tc-h8300.c targ-cpu.c\r
+copy config\tc-h8300.h targ-cpu.h\r
+copy config\te-generic.h targ-env.h\r
+copy config\objcoffbfd.h obj-format.h\r
+copy config\objcoffbfd.c obj-format.c\r
+copy config\atof-ieee.c atof-targ.c\r
+\r
+:common\r
+\r
+echo # Makefile generated by "configure.bat"> Makefile\r
+echo all.dos : as.new>>Makefile\r
+\r
+if exist config.sed del config.sed\r
+\r
+echo "s/^      \$(srcdir)\/move-if-change/     update/ ">> config.sed\r
+echo "/\.o[    ]*:/ s/config.status//                  ">> config.sed\r
+echo "/^target=/ c\                                    ">> config.sed\r
+echo "target=go32                                      ">> config.sed\r
+echo "s/CC = cc/CC = gcc/                              ">> config.sed\r
+echo "s/:\$/: \$/g                                     ">> config.sed\r
+echo "s/^      \ *\.\//        go32 /                  ">> config.sed\r
+echo "s/`echo \$(srcdir)\///g                          ">> config.sed\r
+echo "s/ | sed 's,\^\\\.\/,,'`//g                      ">> config.sed\r
+echo "s/^      cd \$(srcdir)[  ]*;//                   ">> config.sed\r
+\r
+echo "/^####/ i\                                       ">> config.sed\r
+echo "TDEFINES=-DMANY_SEGMENTS -DI386COFF \            ">> config.sed\r
+echo "LOCAL_LOADLIBES=../bfd/libbfd.a                  ">> config.sed\r
+\r
+echo "/^all[   ]*:/ a\                                 ">> config.sed\r
+echo "dummy:                                           ">> config.sed\r
+\r
+echo "s/\/usr[^ ]*errno.h//g                           ">> config.sed\r
+\r
+echo "/^config.h[      ]*:/ d                          ">> config.sed\r
+\r
+sed -e "s/^\"//" -e "s/\"$//" -e "s/[  ]*$//" config.sed > config2.sed\r
+sed -f config2.sed Makefile.in >> Makefile.2\r
+update Makefile.2 Makefile\r
+del Makefile.2\r
+del config.sed\r
+del config2.sed\r
+\r
+echo > config-stamp\r
+echo #define TARGET_CPU "i386">config.h1\r
+echo #define TARGET_ALIAS "i386">>config.h1\r
+echo #define TARGET_CANONICAL "i386">>config.h1\r
+sed -n "/^VERSION=/p" Makefile.in | sed -e "s/VERSION=/#define GAS_VERSION \"/" -e "s/$/\"/">> config.h1\r
+update config.h1 config.h\r
index 95b573eec712c0f0b908435ab6f17f3185880547..221e479a8fb196c81a9b3be1d66ece1b5e83d634 100644 (file)
@@ -116,4 +116,4 @@ strncasecmp.obj,-
 getruntime.obj,-
 gnu_cc:[000000]gcclib/lib,sys$share:vaxcrtl/lib
 ! Tell linker exactly what psect attributes we want -- match VAXCRTL.
-psect_addr=ENVIRON,long,pic,ovr,rel,gbl,noshr,noexe,rd,wrt
+psect_attr=ENVIRON,long,pic,ovr,rel,gbl,noshr,noexe,rd,wrt
index 3eb2d439c0c9eb3496a639a0fb198bbe4de0cbef..a70113d2f12c241031787f21d684b1387f45874b 100644 (file)
@@ -1,3 +1,9 @@
+Fri May 27 12:24:18 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       * gas/m68k/disperr.s: Use % for registers.
+
+       * gas/m68k-coff/gas.exp: Expect failure for p2389a.s.
+
 Tue May 17 14:53:08 1994  Bill Cox  (bill@rtl.cygnus.com)
 
        * lib/gas-defs.exp: Replace error proc calls with perror calls.
index e1111ebd5dee736140007cd542977f688048ffc9..eac8d84aad56438805641c580e0cdae64fe9bb39 100644 (file)
@@ -80,5 +80,5 @@ done
 cat << 'EOF'
 gnu_cc:[000000]gcclib/lib,sys$share:vaxcrtl/lib
 ! Tell linker exactly what psect attributes we want -- match VAXCRTL.
-psect_addr=ENVIRON,long,pic,ovr,rel,gbl,noshr,noexe,rd,wrt
+psect_attr=ENVIRON,long,pic,ovr,rel,gbl,noshr,noexe,rd,wrt
 EOF
index 52afc9bea8cd6551a0df59a50460d39cb4c7e79a..854726e6b16f939909043a00d4c8ef187a4cb07a 100644 (file)
@@ -1,3 +1,15 @@
+Fri May 27 12:24:57 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       From binutils-2.4 release:
+
+       Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)
+
+       * configure.bat: [new] build makefile from makefile.in (dos)
+       * hertz.c: allow static HERTZ (msdos needs it)
+       * gprof.c: allow target to select "r" or "rb" for fopen
+       * gprof.c: ignore __gnu_compiled symbols
+       * i386.h: dfine FOPEN_RB to "rb" for dos.
+
 Tue May 17 15:30:22 1994  E. Michael Smith (ems@cygnus.com)
 
        * Makefile.in (.m.c:):  Added .SUFFIXES : .m 
diff --git a/gprof/configure.bat b/gprof/configure.bat
new file mode 100644 (file)
index 0000000..22ef37e
--- /dev/null
@@ -0,0 +1,18 @@
+@echo off\r
+echo Configuring gprof for go32\r
+rem This batch file assumes a unix-type "sed" program\r
+\r
+echo # Makefile generated by "configure.bat"> Makefile\r
+\r
+if exist config.sed del config.sed\r
+\r
+echo "/^###$/ i\                               ">>config.sed\r
+echo "MY_MACHINE=i386\                         ">>config.sed\r
+echo "CC=gcc                                   ">>config.sed\r
+\r
+echo # >> config.sed\r
+\r
+sed -e "s/^\"//" -e "s/\"$//" -e "s/[  ]*$//" config.sed > config2.sed\r
+sed -f config2.sed Makefile.in >> Makefile\r
+del config.sed\r
+del config2.sed\r
index 683b7582bd78bb7200a8da58068366c8fd041f02..c8e0995543bcf81bcc6cf2ac8d9a26c9c4e10771 100644 (file)
@@ -31,6 +31,10 @@ static char sccsid[] = "@(#)gprof.c  5.6 (Berkeley) 6/1/90";
 
 #include "gprof.h"
 
+#ifndef FOPEN_RB
+#define FOPEN_RB "r"
+#endif
+
 bfd    *abfd;
 
 char   *whoami;
@@ -391,7 +395,7 @@ openpfile(filename)
     struct rawhdr raw;
     FILE       *pfile;
 
-    if((pfile = fopen(filename, "r")) == NULL) {
+    if((pfile = fopen(filename, FOPEN_RB)) == NULL) {
        perror(filename);
        done();
     }
@@ -769,7 +773,11 @@ funcsymbol( symp )
    * Perhaps it should be made configurable.
    */
 
-  if (symprefix && symprefix != *symp->name)
+  if (symprefix && symprefix != *symp->name
+      /* Gcc may add special symbols to help gdb figure out the file
+        language.  We want to ignore these, since sometimes they
+        mask the real function.  (dj@ctron)  */
+      || !strncmp (symp->name, "__gnu_compiled", 14))
     return FALSE;
 
   return TRUE;
index 1c2927f673ef2dfa9b2ebb3c9c892f4ac350d78e..0d8d9d315009502110fa31934c91bcea6780560d 100644 (file)
@@ -29,8 +29,15 @@ static char sccsid[] = "@(#)hertz.c  5.4 (Berkeley) 6/1/90";
      */
 #define        HZ_WRONG        0
 
+#ifdef __MSDOS__
+#define HERTZ 18
+#endif
+
 hertz()
 {
+#ifdef HERTZ
+       return HERTZ;
+#else
        struct itimerval tim;
 
        tim.it_interval.tv_sec = 0;
@@ -42,4 +49,5 @@ hertz()
        if (tim.it_interval.tv_usec < 2)
                return(HZ_WRONG);
        return (1000000 / tim.it_interval.tv_usec);
+#endif
 }
index f248f6b5cf30893cf20f4dd65844811386b91fed..79d7b9e652a859e6097006de5b931fc6dd6e857b 100644 (file)
@@ -33,3 +33,6 @@
 #define OFFSET_OF_CODE 0
 #define        UNITS_TO_CODE   (OFFSET_OF_CODE / sizeof(UNIT))
 
+#ifdef __MSDOS__
+#define FOPEN_RB "rb"
+#endif
index 70a81a48dd35e7faa429ace80d22a5ed1157ceb8..f0ebae59b03d2b677d0ec458e9b5e60738ca823c 100644 (file)
@@ -1,3 +1,36 @@
+Fri May 27 12:25:33 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
+
+       * ldver.c (ldversion): Changed version to "cygnus-2.4.1".
+
+       Changes from binutils-2.4 release:
+
+       * genscripts.sh (RELOCATING, CONSTRUCTING): When setting
+       variables, use whitespace, so scripts don't break.
+
+       * config/alphaosf.mh (HDEFINES, CFLAGS): Deleted.
+
+       * emultempl/generic.em: Find emultempl/stringify.sed in ${srcdir}.
+
+       * cdtest-bar.cc: Renamed from cdtest-func.cc.
+       * Makefile.in: Noted change.
+
+       * scripttempl/a29k.sc: Don't include /lab3/u3/..../segments.o; I
+       don't know where that's supposed to come from, or why it's
+       necessary.
+
+       Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)
+
+       * configure.bat: update to latest makefile.in
+       * emulpara/go32.sh: set to coff-go32 not aout
+       * emultemp/generic.em: strength-reduce the structure of
+         this shell script, since the only available shell for
+         DOS can't handle complex syntax.
+       * emultemp/stringify.sed: for "sed -f" instead of inline.
+       * makefile.in: depend on stringify.sed as well as genscripts.sh
+       * scripttemp/go32coff.sc: correct for djgpp 1.11's COFF format
+       * genscripts.sh: empty variables aren't always considered "set",
+         so set them to "y" instead.
+
 Fri May 27 01:08:14 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
        * ldlang.c (entry_symbol): Make static.
index c3f42c0909de46b19df0a36d3f494e5b6959df30..e1c87013137a4271b3fc8aacc802b15bb248e86f 100644 (file)
@@ -249,7 +249,7 @@ ldlex.c: ldlex.l
 # These all start with e so 'make clean' can find them.
 
 GENSCRIPTS = $(SHELL) $(srcdir)/genscripts.sh ${srcdir} ${libdir} ${host_alias} ${target_alias} ${EMUL} "$(NATIVE_LIB_DIRS)"
-GEN_DEPENDS = $(srcdir)/genscripts.sh
+GEN_DEPENDS = $(srcdir)/genscripts.sh $(srcdir)/emultempl/stringify.sed
 
 esun4.c: $(srcdir)/emulparams/sun4.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
index 96e9e0add3591e0079c082a016e964afa14cd2db..0ab53c5226aff35de117603d25e08254ccefa90b 100644 (file)
@@ -1,4 +1,2 @@
-HDEFINES=-DHOST_64_BIT="long "
-CFLAGS=-non_shared
 NATIVE_LIB_DIRS=/usr/ccs/lib
 HOSTING_CRT0=/usr/ccs/lib/crt0.o
index 73089fa69ca5ef21eb185e098d9edb80a1106c74..4643bdb5540bbbfc0c755586b6441f620a3c0243 100644 (file)
@@ -1,18 +1,72 @@
-@echo off
-if "%1" == "go32" goto h8300
-if "%1" == "h8/300" goto h8300
-echo Specify one of [ go32 h8/300 ] on command line
-goto exit
-
-:go32
-echo Configuring ld for go32
-copy ..\bfd\hosts\h-go32.h sysdep.h
-copy Makefile.dos Makefile
-goto exit
-
-:h8300
-echo Configuring ld for H8/300
-copy ..\bfd\hosts\h-go32.h sysdep.h
-copy Makefile.dos Makefile
-
-:exit
+@echo off\r
+echo Configuring ld for go32\r
+echo This makefile will be built for GNUISH make\r
+rem This batch file assumes a unix-type "sed" program\r
+\r
+update ..\bfd\hosts\go32.h sysdep.h\r
+\r
+echo # Makefile generated by "configure.bat"> Makefile\r
+echo LONGARGS = gcc:ar >> Makefile\r
+echo CC=gcc >> Makefile\r
+echo host_alias=go32 >> Makefile\r
+echo target_alias=go32 >> Makefile\r
+\r
+update ../bfd/hosts/go32.h sysdep.h\r
+\r
+if exist config.sed del config.sed\r
+\r
+echo "s/^      \$(srcdir)\/move-if-change/     update/ ">> config.sed\r
+echo "s/:\([^  ]\)/: \1/g                              ">> config.sed\r
+echo "s/^      \ *\.\//        go32 /                  ">> config.sed\r
+echo "s/`echo \$(srcdir)\///g                          ">> config.sed\r
+echo "s/ | sed 's,\^\\\.\/,,'`//g                      ">> config.sed\r
+echo "s/^      cd \$(srcdir)[  ]*;//                   ">> config.sed\r
+\r
+echo "/^####$/ i\                                      ">> config.sed\r
+echo "CC = gcc\                                                ">> config.sed\r
+echo "EMUL=go32\                                       ">> config.sed\r
+echo "EMULATION_OFILES=ego32.o ei386aout.o             ">> config.sed\r
+\r
+echo "/^SHELL *=/ d                                    ">> config.sed\r
+echo "s/$(SHELL)/sh.exe/g                              ">> config.sed\r
+\r
+echo "s/'"/\\"/g                                       ">> config.sed\r
+echo "s/"'/\\"/g                                       ">> config.sed\r
+\r
+echo "/^ldmain.o: ldmain.c/,/fi/ {                     ">> config.sed\r
+echo "  s/; *\\$//                                     ">> config.sed\r
+echo "  s/-DSCRIPTDIR[^        ]*/-DSCRIPTDIR=\\".\\"/ ">> config.sed\r
+echo "  s/config.status//                              ">> config.sed\r
+echo "  /ldmain.o:/ p                                  ">> config.sed\r
+echo "  /(CC)/ p                                       ">> config.sed\r
+echo "  d                                              ">> config.sed\r
+echo "}                                                        ">> config.sed\r
+\r
+echo "s/^SHELL.*$/SHELL=sh.exe/                                ">> config.sed\r
+echo "s/genscripts.sh/genscripts.dos/g                 ">> config.sed\r
+\r
+echo "s/^ldemul-list.h/not-ldemul-list.h/              ">> config.sed\r
+\r
+sed -e "s/^\"//" -e "s/\"$//" -e "s/[  ]*$//" config.sed > config2.sed\r
+sed -f config2.sed Makefile.in >> Makefile\r
+del config.sed\r
+del config2.sed\r
+\r
+echo set -a > genscripts.dj\r
+sed -e "/^[a-zA-Z0-9_]*=/ s/^/export /" -e "s/(. \(.*\))/sh \1/" -e "/\.em/ d" genscripts.sh >> genscripts.dj\r
+type emultempl\generic.em >> genscripts.dj\r
+update genscripts.dj genscripts.dos\r
+\r
+echo extern ld_emulation_xfer_type ld_go32_emulation; > ldemul-list.h2\r
+echo extern ld_emulation_xfer_type ld_i386aout_emulation; >> ldemul-list.h2\r
+echo #define EMULATION_LIST \>>ldemul-list.h2\r
+echo   &ld_go32_emulation,\>>ldemul-list.h2\r
+echo   &ld_i386aout_emulation,\>>ldemul-list.h2\r
+echo 0>>ldemul-list.h2\r
+\r
+update ldemul-list.h2 ldemul-list.h\r
+\r
+if exist ldscripts\dostest goto ldscripts\r
+mkdir ldscripts\r
+dir > ldscripts\dostest\r
+:ldscripts\r
index abeb84e3a545193b9d0aeaee19ee2e5ec829fe9d..97271a099216c803378915cbadb694b1179a6dce 100644 (file)
@@ -1,17 +1,7 @@
-SCRIPT_NAME=aout
-OUTPUT_FORMAT="a.out-i386"
-TEXT_START_ADDR=0x1020
-PAGE_SIZE=0x1000
-SEGMENT_SIZE=0x400000
-NONPAGED_TEXT_START_ADDR=0x0
-ARCH=i386
-
-
-SCRIPT_NAME=coff
-OUTPUT_FORMAT="i386-coff"
+SCRIPT_NAME=go32coff
+OUTPUT_FORMAT="coff-go32"
 TEXT_START_ADDR=0x10a8
 PAGE_SIZE=0x1000
 SEGMENT_SIZE=0x1000
 NONPAGED_TEXT_START_ADDR=0x0
 ARCH=i386
-
index c0f5649dd67a496b8acc36ee44e04d3cc85f58a6..8cf22c1d7fa35503f4a99c7d028f7bf79145c0a9 100644 (file)
@@ -25,6 +25,7 @@ Do-first:
 Things-to-keep:
 
 README
+stringify.sed
 elf32.em
 generic.em
 gld960.em
diff --git a/ld/emultempl/stringify.sed b/ld/emultempl/stringify.sed
new file mode 100644 (file)
index 0000000..a526d3f
--- /dev/null
@@ -0,0 +1,4 @@
+s/["\\]/\\&/g
+s/$/\\n\\/
+1 s/^/"/
+$ s/$/n"/
index 875035248d1a98bc4787b24a2de35ffef9dda209..49fcfd1a67bbb6267e37aa6e9e15d96b4c854461 100644 (file)
@@ -29,7 +29,7 @@ void
 ldversion (noisy)
      int noisy;
 {
-  fprintf(stdout,"ld version 2.4.1 (with BFD %s)\n", BFD_VERSION);
+  fprintf(stdout,"ld version cygnus-2.4.1 (with BFD %s)\n", BFD_VERSION);
 
   if (noisy) 
   {
index 2e2a52cd8878a8239984df6a7873289b4adc06c9..2b2556a715e4b3aaa41f00fa0f4f7c96716d00ac 100644 (file)
@@ -1,11 +1,7 @@
-# Linker script for 386 COFF.  This works on SVR3.2 and SCO Unix 3.2.2.
-# .data2 handles SCO, which uses two data sections.
-# Ian Taylor <ian@cygnus.com>.
+# Linker script for 386 go32
+# DJ Delorie (dj@ctron.com)
+
 test -z "$ENTRY" && ENTRY=_start
-# These are substituted in as variables in order to get '}' in a shell
-# conditional expansion.
-INIT='.init : { *(.init) }'
-FINI='.fini : { *(.fini) }'
 cat <<EOF
 OUTPUT_FORMAT("${OUTPUT_FORMAT}")
 ${LIB_SEARCH_DIRS}
@@ -15,14 +11,15 @@ ENTRY(${ENTRY})
 SECTIONS
 {
   .text ${RELOCATING+ SIZEOF_HEADERS} : {
-    ${RELOCATING+ *(.init)}
     *(.text)
-    ${RELOCATING+ *(.fini)}
     ${RELOCATING+ etext  =  .};
   }
-  .data ${RELOCATING+ 0x400000 + (. & 0xffc00fff)} : {
-    *(.data .data2)
+  .data ${RELOCATING+ ALIGN(${DATA_ALIGNMENT})} : {
+    ${RELOCATING+ *(.ctor)}
+    ${RELOCATING+ *(.dtor)}
+    *(.data)
     ${RELOCATING+ edata  =  .};
+    ${RELOCATING+. = ALIGN(${PAGE_SIZE});}
   }
   .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
   {                                    
@@ -30,15 +27,5 @@ SECTIONS
     *(COMMON)
     ${RELOCATING+ end = .};
   }
-  ${RELOCATING- ${INIT}}
-  ${RELOCATING- ${FINI}}
-  .stab  . (NOLOAD) : 
-  {
-    [ .stab ]
-  }
-  .stabstr  . (NOLOAD) :
-  {
-    [ .stabstr ]
-  }
 }
 EOF
index 321cf0fec8434d94fa0b3f4113fab8d34293ee3b..43acad486aaff2367699235907c687416db77738 100644 (file)
@@ -63,7 +63,7 @@ foreach test [glob -nocomplain $srcdir/$subdir/*.dat] {
     
     # load (execute) the target        
     if ![file exists $tmptarget] then {
-       unresolved "$tmptarget doesn't exist. $result"
+       unresolved "$tmptarget doesn't exist."
     } else {
        catch "exec $tmptarget > $tmptarget.out" exec_output
                
index 34eebe190bb66fb1946ba92ad70abad7f88993f3..43d67c10f765032207c9afb09c7d1295684b36a4 100644 (file)
@@ -1,5 +1,29 @@
+Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)
+
+       * configure.bat: update to latest makefile.in
+
+Sat May  7 17:13:21 1994  Steve Chamberlain  (sac@cygnus.com)
+
+       * a29k-dis.c (print_insn): Print 'x' type operand in hex.
+       * h8300-dis.c (bfd_h8_disassemble): Print 16bit rels correctly.
+       * sh-dis.c (print_insn_sh): Don't recur endlessly if delay
+       slot insn is in a delay slot.
+       * z8k-opc.h: (resflg): Fix patterns.
+       * h8500-opc.h Fix CR insn patterns.
+
+Fri May  6 14:34:46 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * ppc-opc.c (powerpc_opcodes): Put PowerPC versions of "cmp" and
+       "cmpl" before POWER versions, so that gas -many uses them.
+
 Thu Apr 28 18:32:36 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)
 
+       * disassemble.c: New file.
+       * Makefile.in (OFILES): Add disassemble.o.
+       (disassemble.o): Provide dependencies; compile with $(ARCHDEFS).
+       * configure.in: Define ARCHDEFS in Makefile.  Code taken from
+       binutils/configure.in.
+
        * m68k-dis.c (print_insn_m68k): If F_ALIAS flag is set, skip the
        opcode being examined.