coff-a29k.c
coff-alpha.c
coff-apollo.c
+coff-go32.c
coff-h8300.c
coff-h8500.c
coff-i386.c
+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
coff-h8300.o \
coff-h8500.o \
coff-i386.o \
+ coff-go32.o \
coff-i960.o \
coff-m68k.o \
coff-m88k.o \
# 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 \
# 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' \
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
-@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
--- /dev/null
+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
#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
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;
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},
#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)
/* 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. */
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,
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
{
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),
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;
}
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
+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__.
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
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}
# 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
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
./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
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
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
@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
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
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
+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.
includedir = $(prefix)/include
docdir = $(datadir)/doc
-VERSION=cygnus-2.2.90
+VERSION=cygnus-2.3.1
SHELL = /bin/sh
#endif /* not ansi */
extern char *malloc ();
+extern char *realloc ();
extern int free ();
/* end of ho-vax.h */
#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 */
char vms_name_mapping = 0;
-
-extern char *strchr ();
extern char *myname;
static symbolS *Entry_Point_Symbol = 0; /* Pointer to "_main" */
PUT_CHAR (TIR_S_C_STA_WPB);
PUT_SHORT (Psect_Index);
PUT_CHAR (Offset);
- };
- };
+ }
+ }
/*
* Set relocation base
*/
!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 */
break;
if (fpnt->spnt == sp)
return fpnt;
- };
+ }
for (fpnt = file_root; fpnt; fpnt = fpnt->next)
{
if (fpnt == (struct input_file *) NULL)
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
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;
{
if (*pnt1 == '.')
*pnt1 = '$';
- };
+ }
return pnt;
}
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)
overflow = 1;
Lpnt = 1;
return;
- };
+ }
Lpnt -= size1;
md_number_to_chars (&Local[Lpnt + 1], value, size1);
}
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 */
spnt = find_symbol (spnt->type2);
if (spnt == (struct VMS_DBG_Symbol *) NULL)
return;
- };
+ }
spnt1 = spnt;
spnt1 = spnt;
total_size = 1;
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);
{
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
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;
total_len = 2;
push (total_len, -2);
return 1;
- };
+ }
push (0, -4);
push (0xfa02, -2);
total_len = -2;
push (DBG_S_C_POINTER, -1);
total_len += 3;
push (total_len, -2);
- };
+ }
return 1;
case ARRAY:
spnt1 = spnt;
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);
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,
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);
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];
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
Local[Lpnt++] = 0;
VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
Lpnt = 0;
- };
+ }
i = 0;
while (i < Apoint)
Local[Lpnt++] = Asuffix[i++];
{
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 */
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)
(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))
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),
/* fool assembler to not output this
* as a routine in the TBT */
return 1;
- };
- };
- };
+ }
+ }
+ }
*pnt1 = ':'; /* and restore the string */
return 0;
}
{
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
* 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, ':');
if (spnt1 == (struct VMS_DBG_Symbol *) NULL)
break;
spnt = spnt1;
- };
- };
+ }
+ }
pnt = cvt_integer (pnt + 1, &i);
pnt = cvt_integer (pnt + 1, &i);
} while (*++pnt != ';');
(spnt1 == (struct VMS_DBG_Symbol*) NULL))return 1;
if(spnt1 == (struct VMS_DBG_Symbol*) NULL) break;
spnt=spnt1;
- };
- };
+ }
+ }
return 0; /* no forward refences found */
}
{ /* 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 */
/* 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
pnt = str + 1; /* point to character past equal sign */
if ((*pnt == 'u') || (*pnt == 's'))
{
- };
+ }
if ((*pnt <= '9') && (*pnt >= '0'))
{
if (type_check ("void"))
*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)
{
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)
}
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':
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);
{
pnt += strlen (pnt);
*pnt = ':';
- }; /* replace colon for later */
+ } /* replace colon for later */
while (*++pnt1 != ';')
{
pnt = (char *) strchr (pnt1, ':');
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;
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);
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);
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;
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';
} while (1 == 1);
str = parse_buffer;
symbol_name = str;
- };
+ }
pnt = (char *) strchr (str, ':');
if (pnt != (char *) NULL)
{
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 */
{
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);*/
{
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)
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
{
char * pnt=(char*) strchr (S_GET_NAME (symbolP1), ':') + 1;
if (*pnt == 'F' || *pnt == 'f') break;
- };
+ }
/*
* Deal with STAB symbols
*/
{
char * pnt=(char*) strchr (S_GET_NAME (symbolP1), ':') + 1;
if (*pnt == 'F' || *pnt == 'f') break;
- };
+ }
/*
* Deal with STAB symbols
*/
{
sprintf (str, "$%d", rcount++);
VMS_TBT_Block_Begin (symbolP1, Text_Psect, str);
- };
+ }
Offset = S_GET_VALUE (symbolP1);
Define_Local_Symbols (sstart, symbolP1);
symbolP1 =
/*
* 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)
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
*Out++ = isupper(*In) ? tolower(*In++) : *In++;
}
break;
- };
+ }
}
/*
* If we saw a dollar sign, we don't do case hacking
tolower(*In++) :
*In++;
break;
- };
+ }
}
}
}
else
{
PUT_SHORT (GSY_S_M_DEF);
- };
+ }
/*
* Psect Number
*/
else
{
PUT_SHORT (0);
- };
+ }
}
/*
* Finally, the global symbol name
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)
{
Name);
error (Error_Line);
break;
- };
- }; /* switch */
- };
+ }
+ } /* switch */
+ }
Psect_Attributes &= 0xffff; /* clear out the globalref/def stuff */
/*
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);
default:
printf (" Invalid globalvalue of %s\n", stripped_name);
break;
- }; /* switch */
- }; /* if */
+ } /* switch */
+ } /* if */
free (stripped_name); /* clean up */
- }; /* for */
+ } /* for */
}
\f
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;
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))
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 */
#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
if (!strcmp (*argP, "bump"))
{
warn_on_bump = 1;
-
}
else if (**argP == 'A')
{
{
/* use .stab instead of .stab.excl */
}
+ else if (**argP == 'q')
+ {
+ /* quick -- native assembler does fewer checks */
+ }
#endif
else if (strcmp (*argP, "sparc") == 0)
{
-@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
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
+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.
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
+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
--- /dev/null
+@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
#include "gprof.h"
+#ifndef FOPEN_RB
+#define FOPEN_RB "r"
+#endif
+
bfd *abfd;
char *whoami;
struct rawhdr raw;
FILE *pfile;
- if((pfile = fopen(filename, "r")) == NULL) {
+ if((pfile = fopen(filename, FOPEN_RB)) == NULL) {
perror(filename);
done();
}
* 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;
*/
#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;
if (tim.it_interval.tv_usec < 2)
return(HZ_WRONG);
return (1000000 / tim.it_interval.tv_usec);
+#endif
}
#define OFFSET_OF_CODE 0
#define UNITS_TO_CODE (OFFSET_OF_CODE / sizeof(UNIT))
+#ifdef __MSDOS__
+#define FOPEN_RB "rb"
+#endif
+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.
# 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}
-HDEFINES=-DHOST_64_BIT="long "
-CFLAGS=-non_shared
NATIVE_LIB_DIRS=/usr/ccs/lib
HOSTING_CRT0=/usr/ccs/lib/crt0.o
-@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
-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
-
Things-to-keep:
README
+stringify.sed
elf32.em
generic.em
gld960.em
--- /dev/null
+s/["\\]/\\&/g
+s/$/\\n\\/
+1 s/^/"/
+$ s/$/n"/
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)
{
-# 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}
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)} :
{
*(COMMON)
${RELOCATING+ end = .};
}
- ${RELOCATING- ${INIT}}
- ${RELOCATING- ${FINI}}
- .stab . (NOLOAD) :
- {
- [ .stab ]
- }
- .stabstr . (NOLOAD) :
- {
- [ .stabstr ]
- }
}
EOF
# 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
+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.