Deleted some unused code.
Fixed some declarations to use PARAMS macro.
Fixed up configure.in for new targets.
Some whitespace/comment fixes.
Merged config/ChangeLog.
+Thu Dec 3 01:24:07 1992 Ken Raeburn (raeburn@kr-pc.cygnus.com)
+
+ * config/ho-generic.h (malloc, realloc): Declare.
+
+ * Lots of comment/whitespace changes.
+
+ * write.h (struct fix): Some fields reordered, narrowed.
+
+ * read.c (MASK_CHAR): Define using C types, not magic number.
+
+ * as.c, input-file.c: Deleted some unused code.
+
+ * app.c, as.h: Doc fix.
+
+ * flonum-konst.c, flonum-mult.c: Include ansidecl.h.
+
+ * as.h (xmalloc): Argument is long.
+
+ * xmalloc.c (error): Remove declaration; as.h takes care of it.
+
+Mon Nov 30 11:42:11 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * configure.in: Accept target OS "vms".
+
+ * symbols.c: Merged ANSI and non-ANSI function decls, using
+ PARAMS macro.
+
+ * xmalloc.c: Just include as.h, don't bother trying to figure out
+ other header files.
+
+ * strstr.c, strerror.c: Deleted.
+ * Makefile.in: Deleted references.
+
+ * config/tc-ns32k.c: Don't include header file for string
+ declarations; leave that to ho-*.h.
+
+Fri Nov 27 04:11:36 1992 Ken Raeburn (raeburn at cambridge-laptop.cygnus.com)
+
+ * config/coff_gnu.h [TC_I860]: Guesses for reloc type values,
+ imported from FSF sources.
+
+ * messages.c (strerror): Declare unconditionally.
+
+ * as.h: Delete alloca and register definitions.
+
+ * config/atof-ieee.c (mask): Now const.
+
+ * obstack.c, obstack.h: Deleted.
+
+ * as.h (flag_readonly_data_in_text): New flag.
+ * as.c (main): Set it for -R.
+
+ * as.h (flag_suppress_warnings): New flag.
+ * as.c (main): Set it for -W.
+ * messages.c (as_warn): Check it instead of flagseen['W'].
+
+ * as.h (flag_always_generate_output): New flag.
+ * as.c (main): Set it for -Z.
+
+ * config/tc-sparc.h: Define NEED_FX_R_TYPE.
+ * config/tc-a29k.h: Ditto.
+ * write.h (struct fix): Don't conditionalize fx_r_type field on TC
+ macros.
+
+ * as.h: Merged ANSI and non-ANSI function decls, using PARAMS
+ macro.
+ * bignum.h, expr.h, flonum.h, frags.h, input-file.h, listing.h,
+ obj.h, output-file.h, read.h, struc-symbol.h, symbols.h, tc.h,
+ write.h: Likewise.
+ * read.c: Likewise.
+
+ * xmalloc.c: Conditionalize on HAVE_MALLOC_H, not USG. Fold in
+ xrealloc from xrealloc.c.
+ * xrealloc.c: Deleted.
+ * Makefile.in (REAL_SOURCES, OBJS): Adjusted.
+
+ * configure.in: For host CPU a29k, rs6000, vax, consider using bsd
+ or vms ho- files.
+
+ * config/ho-sysv.h (setbuffer, HO_USG): Deleted.
+
+ * config/atof-ieee.c (atof_ieee): Exponent field isn't a pointer;
+ don't initialize it with NULL.
+
+ * config/ho-vax.h (M_VAX): Deleted; was unused.
+
+ * README-vms, config/ho-vms.h, config/obj-vms.c, config/obj-vms.h:
+ New files imported from FSF version, contributed by Eric Youngdale.
+ * README-vms-dbg, config/vms: Deleted.
+
+ * ChangeLog, config/ChangeLog: Merged.
+
+ * config/*tahoe*, configure.in: Tahoe support brought in from FSF
+ version.
+
+ * input-file.c (input_file_open): Eliminate call to setvbuf.
+ [USG] (setbuffer): Deleted macro.
+
Mon Nov 23 11:00:16 1992 Ken Raeburn (raeburn@cygnus.com)
* all files: Whitespace changes for GNU indentation style, done by
- GNU `indent'. Some cleanup still needed.
+ GNU `indent'. Some cleanup still needed, especially of comments.
* configure.in: No te-386bsd.h file exists; don't try to use it.
+ * obj-coff.c (obj_coff_endef): Use as_warn, not fprintf.
+
+ * tc-m68k.c (md_assemble): Don't complain about 68000 with 68881;
+ could be doing emulation.
+
Tue Nov 10 09:49:24 1992 Ian Lance Taylor (ian@cygnus.com)
* Makefile.in (as.o, obj-format.o): added dependency on subsegs.h.
read.c, app.c: removed definitions of comment_chars,
line_comment_chars, and line_separator_chars.
+ * tc-m68k.c (m68k_reg_parse): If REGISTER_PREFIX isn't defined,
+ still accept (but don't require) OPTIONAL_REGISTER_PREFIX before
+ the register name.
+ (insert_reg): put REGISTER_PREFIX before register names before
+ putting them in the symbol table.
+ * tc-m68k.h (OPTIONAL_REGISTER_PREFIX): Define to be "%", if not
+ M68KCOFF.
+
+ * obj-coffbfd.c (fill_section): set STYP_NOLOAD bit for .bss
+ section.
+
+ * atof-ieee.c, atof-ns32k.c, tc-*.c: made EXP_CHARS, FLT_CHARS,
+ comment_chars, line_comment_chars and line_seperator_chars
+ consistently const, and always initialized them. Included read.h.
+
+Thu Nov 5 17:55:41 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
+
+ * tc-sparc.c (sparc_ip): Add code to flag error if an absolute
+ constant will not fit in an immediate field.
+ (md_apply_fix, RELOC_BASE13 case): Check for relocation overflow.
+
+Wed Nov 4 07:50:46 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * obj-coff.c (callj_table): Delete global variable.
+ (obj_emit_relocations): Define it locally here, and only if
+ TC_I960 is defined.
+
+ * tc-m68k.c (m68k_reg_parse): Underscore is part of a symbol name.
+ (m68k_ip): Don't warn about bignum used as float bit-pattern.
+
+ * obj-coff.c: Replaced ANSI and non-ANSI function declarations
+ with a single set using PARAMS macro.
+
+ * tc-i960.c (tc_bout_fix_to_chars): Bit-field fixups want a length
+ of 2.
+
+ * tc-i960.c: Missed a couple of 0->NO_RELOC conversions.
+
+ * tc-i960.h (N_BALNAME, N_CALLNAME): Define as char-type values,
+ so widening works consistently.
+
Wed Oct 28 08:52:34 1992 Ken Raeburn (raeburn@cygnus.com)
* version.c: Put conditional "const" before version_string, not
* app.c (do_scrub_next_char): Need double-\ before `000' to show
printed rep of null character.
+Fri Oct 23 14:40:38 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * obj-coffbfd.c (write_object_file): check return value of
+ bfd_close_all_done.
+
Tue Oct 20 12:18:08 1992 Ian Lance Taylor (ian@cygnus.com)
+ * Support for i386-sysv.
+ obj-coffbfd.c (do_relocs_for, write_object_file): set segment
+ addresses to reasonable sizes. New define ZERO_BASED_SEGMENTS can
+ be used to set them all to zero as was done before.
+ (fill_section): segment addresses now set in write_object_file.
+ (fill_section): Don't set STYP_NOLOAD for .bss section.
+ (fixup_segment): 386 uses strange common symbol format.
+ tc-i386.c (tc_coff_fix2rtype): use R_DIR32, not R_RELLONG, for
+ compatibility with SVR3.2 linker.
* configure.in: i386-sysv and i386-sco use coffbfd.
* app.c (do_scrub_next_char): discard whitespace after a label.
* configure.in: differentiate between SunOS 4 and Solaris2 for Sun4
hosts, use the sysv configuration for solaris2
+Mon Oct 5 09:28:57 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ fix i960+non-bfd coff bit rot.
+ * obj-coff.c (c_dot_file_symbol, obj_coff_ln, obj_coff_line):
+ support for C source listings. (obj_coff_endef): look in the right
+ part of the symbol for the symbol name
+
+ * tc-m68k.c (get_num): make it work for all segments, not just the
+ first three.
+
Mon Oct 5 03:30:36 1992 Mark Eichin (eichin at tweedledumber.cygnus.com)
* configure.in: recognize i386-*-bsd emulation.
* configure.in: use the cpu-vendor-os triple for host and target
+Tue Sep 29 12:22:52 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * obj-coffbfd.c (write_object_file): don't fixup for the z8k
+ * tc-z8k.c: lots of bug fixes
+
+Tue Sep 29 10:51:55 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * tc-i960.h, tc-i960.c: avoid the ANSI preprocessor addition
+ #elif, since it is not supported by old compilers.
+ ho-rs6000.h, tc-m68k.c: the native RS/6000 compiler miscompiles a
+ couple of expressions in tc-m68k.c.
+
Mon Sep 28 21:18:24 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
* read.c (cons): If NO_RELOC is defined, use it.
+ * tc-i960.c (get_cdisp): Use NO_RELOC, not 0, in call to fix_new.
+
+Fri Sep 25 18:18:52 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * tc-m68k.h: if M68KCOFF, define DOT_LABEL_PREFIX (to require
+ local labels to start with a .) and set REGISTER_PREFIX to %.
+ tc-m68k.c (m68k_reg_parse): accept REGISTER_PREFIX if defined.
+
Fri Sep 25 17:53:43 1992 John Gilmore (gnu@cygnus.com)
* messages.c: Comment changes.
* listing.c (debugging_pseudo): Add stabs and stabn as things to
ignore.
+Tue Sep 22 13:02:07 1992 Sean Eric Fagan (sef@cygnus.com)
+
+ * obj-coffbfd.c (do_relocs_for,fill_section): now allocate all
+ sections starting from zero, rather than making them consecutive.
+ This makes subsequent reloc calculations easier, esp if the object
+ format doesn't understand addends. (obj_coff_lcomm): (maybe temporarily)
+ allocate lcomm in .data rather than in .bss. It seems that some
+ tools can't cope with a non-zero sized bss before linkage.
+
+Tue Sep 22 15:10:51 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
+
+ * tc-m68k.c: Replace "enum m68k_architecture" with "int"
+ throughout. That enum no longer means what we thought it meant.
+
+ * tc-m68k.c (md_assemble, md_parse_option): Handle new
+ "-mno-688[58]1" options.
+
+ * tc-m68k.c: Added CPU32 support.
+
+Fri Sep 18 08:02:18 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * tc-m68k.c (m68k_ip): An(disp) is not pc relative.
+
Tue Sep 15 17:25:05 1992 Jim Wilson (wilson@sphagnum.cygnus.com)
* Makefile.in (as.new): Remove dependence on LOCAL_LOADLIBES.
* write.c (fixup_segment): fixed missing parens in expression
checking for byte or word overflow.
+ * obj-coffbfd.h: define WARN_SIGNED_OVERFLOW_WORD.
+ obj-coffbfd.c (fixup_segment): check for signed .word overflow if
+ WARN_SIGNED_OVERFLOW_WORD.
+
+ * obj-coffbfd.c (fixup_segment): fixed missing parens in
+ expression checking for byte or word overflow.
+
+Fri Sep 11 10:21:04 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ Support for i386 coff
+ * obj-coffbfd.h : added stuff
+ * tc-i386.c (tc_coff_fix2rtype): new function
+ * tc-i386.h : new coff defines
+
Thu Sep 10 09:23:15 1992 Ian Lance Taylor (ian@cygnus.com)
* input-scrub.c (input_scrub_push): call input_file_begin, not
Makefile.in: Handle m68*-*-coff*.
read.c, read.h: add mult argument to s_space
+ * tc-m68k.c (m68k_ip, m68k_ip_op, get_num, try_moto_index): merge
+ Motorola and MIT syntax; gas can now assemble either type of
+ file.
+ tc-m68kmote.c, tc-m68kmote.h: removed now superfluous files.
+ From Steve Chamberlain:
+ m68kcoff.mt: for m68k COFF.
+ obj-coffbfd.c: (fixup_mdeps) added
+ (size_section) removed bad sanity check
+ (fill_section) added rs_machine_dependent case
+ (write_object_file) call fixup_mdeps
+ (fixup_segment) set fx_subsy to 0.
+ obj-coffbfd.h: define WORKING_DOT_WORD (too hard to support) and
+ handle m68k.
+ tc-m68k.c, config/tc-m68k.h: added m68k COFF support and Motorala
+ pseudo ops.
+
Tue Sep 8 17:10:58 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
* Makefile.in (LIBS): Include opcode library.
* Makefile.in (as.new): Depend on LOCAL_LOADLIBES.
+Fri Aug 28 16:25:22 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * obj-bout.h, obj-bout.c (obj_header_append, obj_symbol_to_chars),
+ tc-i960.c (md_ri_to_chars): Always output bout object file in
+ little endian byte order (used to use endianness of host).
+
Tue Aug 25 15:50:48 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
* config/tc-m68k.c (init_table): Now const. Always include 68851
* listing.c (buffer_line): rewind to the start of include
files, they might be included twice.
+ * z8k.c, z8k.h, z8k.mt: z8000 support stuff
+
Mon Aug 24 12:45:43 1992 Ian Lance Taylor (ian@cygnus.com)
* Makefile.in: defined TARGET_CPU for C code so that it can choose
one element of a family.
+ * tc-m68k.c: use TARGET_CPU to choose default cpu type.
+
+ * te-generic.h: default to LOCAL_LABELS_DOLLAR and LOCAL_LABELS_FB
+ so that we can assemble hand-written libgcc code.
+
Fri Aug 21 14:38:44 1992 Ken Raeburn (raeburn@cambridge.cygnus.com)
* messages.c (as_warn): Use fputs, not fprintf, with a buffer that
has already been formatted (but may still contain %-characters).
(as_bad): Likewise.
+Wed Aug 19 11:20:59 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * tc-m68k.c, tc-m68kmote.c: the cas2 instruction is supposed to be
+ written with indirection on the last two operands, which can be
+ either data or address registers. Added a new operand type 'r'
+ which accepts either register type. Added '(' to notend stuff in
+ tc-m68kmote.c to accept (a0):(a2) in cas2 instruction.
+
Wed Aug 19 09:25:09 1992 Ken Raeburn (raeburn@cygnus.com)
* as.h (enum _relax_state): Start off at one, not zero, to better
(free): Declare it.
(BROKEN_ASSERT): Define it if not __STDC__.
+Tue Aug 11 12:58:14 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * sparc.mt: New file.
+
+Mon Aug 10 14:37:08 1992 Per Bothner (bothner@cygnus.com)
+
+ * tc-m68k.c: ".align N" means align to N-byte boundary *only*
+ if TN_SUN3; otherwise align to 2**N-byte bounary.
+
Thu Aug 6 12:10:39 1992 Steve Chamberlain (sac@thepub.cygnus.com)
* read.c (s_fill): make the .fill size clamped error a warn and
fix bug where 0's were always placed.
+ * config/tc-h8300.c: if a :8 is seen after an operand, fill top
+ two bytes of any constant with 0xff:
+
Wed Aug 5 12:02:40 1992 Steve Chamberlain (sac@thepub.cygnus.com)
* config/tc-m68k.c (md_pseudo_table): fix the .align thing
the right way; for just the 68k. Sun 3 .align is nbytes, not ptwo.
+Wed Aug 5 01:54:34 1992 John Gilmore (gnu at cygnus.com)
+
+ * tc-m68k.c (try_index): Error if index scaling specified and
+ assembling for an older CPU than a 68020.
+
Sat Aug 1 19:10:13 1992 Ken Raeburn (raeburn@cygnus.com)
* config/tc-sparc.c (tc_aout_fix_to_chars): If pc-relative, take
(relax_segment): SEG_BSS is ok now
* config/tc-m68k.c (m68k_ip_op): can now parse more @( modes
+Mon Jul 6 17:09:32 1992 Steve Chamberlain (sac@cygnus.com)
+
+ * obj-coffbfd.c (fill_section): mark .lit sections as STYP_LIT
+
Mon Jun 1 16:20:22 1992 Michael Tiemann (tiemann@cygnus.com)
* configure.in: recognize m680x0 as having sun3 emulation mode for
* write.c (write_object_file): various changes to handle data in
the BSS segment in much the same was as stuff in the DATA segment.
+ * tc-m68k.c (m68kip): Fix typo so that only arch's >=68020 do
+ pcrel data stuff. (md_estimate_size_before_relax): when relaxing a
+ 68010 bxx into a bra+6 jmpxx, put the bytes of the jmp opcode into
+ the right place. (s_bss): Don't put .bss stuff into SEG_DATA, put
+ it into SEG_BSS
Thu Jun 4 11:59:13 1992 Steve Chamberlain (sac@thepub.cygnus.com)
* configure.in: Recognize sparclite as a sparc variant.
+ * tc-sparc.c: Use new ARCHITECTURES_CONFLICT_P macro. Mention new
+ -Asparclite flag.
+
Tue May 26 16:47:56 1992 Steve Chamberlain (sac@thepub.cygnus.com)
* config/tc-a29k.c: lint
* listing.c, expr.c: patches from Andrew Smith
+Mon May 4 18:56:19 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * obj-coffbfd.c: use is a synonym for section, (do_relocs_for):
+ calc the base of relocs correctly.
+ * tc-a29k.c (parse_operand): allow expressions to be in any section.
+
Mon Apr 27 13:13:31 1992 K. Richard Pixley (rich@cygnus.com)
* as.c, write.c: use -K rather than -k for the broken word warning
* flonum-const.c: renamed flonum-konst.c to stop dos name
conflict.
+Thu Mar 12 04:42:38 1992 K. Richard Pixley (rich@cygnus.com)
+
+ * tc-m68k.h, te-sun3.h: moved LOCAL_LABELS_FB definition from
+ tc-m68k.h to te-sun3.h.
+
Wed Mar 11 23:32:42 1992 K. Richard Pixley (rich@cygnus.com)
* configure.in: vxworks68 gets te-sun3.h.
* symbols.c: remove local_labels_dollar, replace with a function
interface for a sparse array. All users adjusted.
+ * te-sun3.h: add LOCAL_LABELS_DOLLAR.
+
Fri Mar 6 21:57:18 1992 K. Richard Pixley (rich@cygnus.com)
* Makefile.in: added check target.
* read.c, write.c subsegs.c: back out the .bss changes.
+ * obj-aout.c: do not include stab.gnu.h if NO_LISTING.
+
+ * tc-i860.c, a.out.gnu.h: move i860 relocs to a proper place.
+
+ * a.out.h: removed.
+
Fri Feb 21 01:08:48 1992 Minh Tran-Le (TRANLE@INTELLICORP.COM)
* symbols.c (local_label_name): symbols now start with ^A.
* as.c (perform_an_assembly_pass): zero bss_fix_root, too.
+ * tc-i386.c: tc-i386.c: added handling of the following opcodes:
+ i/o opcodes - inb, inw, outb and outw. string manipulation with
+ att syntax - scmp, slod, smov, ssca, ssto.
+
+ * obj-coff.c: (for aix386) Moved the symbols .text, .data and .bss
+ to just after .file .
+
+ In obj_crawl_symbol_chain() where it tries to put the external
+ symbols apart, with the condition:
+ (!S_IS_DEFINED(symbolP) &&
+ !S_IS_DEBUG(symbolP) &&
+ !SF_GET_STATICS(symbolP))
+ it was moving too many symbols out. So I switch it back to the
+ condition:
+ (S_GET_STORAGE_CLASS(symbolP) == C_EXT && !SF_GET_FUNCTION(symbolP))
+
+ In obj_emit_relocations() added the conditional on KEEP_RELOC_INFO
+ so that we don't use the F_RELFLG which make the linker complain
+ that somebody has stripped the relocation info.
+
+ Also, the AIX ld program require that the relocation table
+ is sorted by r_vaddr like the standard ATT assembler does.
+
+ [he also changed the sizeof(struct ...)'s into the coff
+ style FOOSZ macros. I'm not sure this is right, but I can't
+ remember why. xoxorich.]
+
Fri Feb 21 01:08:48 1992 K. Richard Pixley (rich@cygnus.com)
* Makefile.in, configure.in, doc: use the doc. Build it, install
* write.c: comment change only.
+ * tc-m88k.[hc]: pulled in from hack's unfinished work. These
+ aren't yet integrated.
+
+ * tc-i860.[hc]: blew off the dust. Something must still be done
+ about conflicting relocation types.
+
+ * tc-ns32k.c: Replaced previous tc_aout_fix_to_chars stub with the
+ real thing.
+
+ * tc-i960.c, tc-sparc.c: white space and comments only.
+
+ * tc-a29k.h: delete duplicate macro definition.
+
+ * new file atof-ns32k.c copied from hack's last unreleased gas.
+
Mon Feb 17 07:51:06 1992 K. Richard Pixley (rich at cygnus.com)
* config/tc-ns32k.c: actually make tc_aout_fix_to_chars work
$(srcdir)/input-file.c \
$(srcdir)/input-scrub.c \
$(srcdir)/messages.c \
- $(srcdir)/obstack.c \
$(srcdir)/output-file.c \
$(srcdir)/read.c \
- $(srcdir)/strerror.c \
- $(srcdir)/strstr.c \
$(srcdir)/subsegs.c \
$(srcdir)/symbols.c \
$(srcdir)/version.c \
$(srcdir)/write.c \
$(srcdir)/listing.c \
- $(srcdir)/xmalloc.c \
- $(srcdir)/xrealloc.c
+ $(srcdir)/xmalloc.c
# in an expedient order
LINKED_SOURCES = \
$(srcdir)/listing.h \
$(srcdir)/tc.h \
$(srcdir)/obj.h \
- $(srcdir)/obstack.h \
$(srcdir)/read.h \
$(srcdir)/struc-symbol.h \
$(srcdir)/subsegs.h \
input-file.o \
input-scrub.o \
messages.o \
- obstack.o \
output-file.o \
read.o \
- strerror.o \
- strstr.o \
subsegs.o \
symbols.o \
version.o \
write.o \
listing.o \
- xmalloc.o \
- xrealloc.o
+ xmalloc.o
#### host, target, and site specific Makefile frags come in here.
# Files to be copied away after each stage in building.
STAGESTUFF = *.o as.new
-as.new: $(OBJS) $(LIBDEPS) $(LOCAL_LOADLIBES)
+as.new: $(OBJS) $(LIBS)
[ ! -f as.new ] || mv as.new as.old
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o as.new $(OBJS) $(LIBS) $(LOADLIBES)
write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h
as.o : as.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
- write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h
+ write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h subsegs.h \
+ tc.h obj.h
atof-generic.o : atof-generic.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h
messages.o : messages.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h
-obstack.o : obstack.c
output-file.o : output-file.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h \
read.o : read.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h
-
-strerror.o : strerror.c
-strstr.o : strstr.c
subsegs.o : subsegs.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h symbols.h tc.h obj.h \
subsegs.h output-file.h
xmalloc.o : xmalloc.c
-xrealloc.o : xrealloc.c
atof-targ.o : atof-targ.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h \
obj-format.o : obj-format.c as.h host.h targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h \
- symbols.h tc.h obj.h
+ subsegs.h symbols.h tc.h obj.h
targ-cpu.o : targ-cpu.c targ-env.h obj-format.h \
targ-cpu.h struc-symbol.h \
write.h flonum.h bignum.h expr.h frags.h hash.h read.h \
#endif /* const */
#endif /* __STDC__ */
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#define register
-#endif /* __GNUC__ */
-
#ifndef __LINE__
#define __LINE__ "unknown"
#endif /* __LINE__ */
#define DEBUG /* temporary */
#ifdef BROKEN_ASSERT
-/* turn off all assertion checks */
+/* Turn off all assertion checks, on machines where the assert macro
+ is buggy. (For example, on the RS/6000, Reiser-cpp substitution is
+ done to put the condition into a string, so if the condition contains
+ a string, parse errors result.) */
#undef DEBUG
#define NDEBUG
#endif
typedef int subsegT;
-COMMON subsegT now_subseg;
/* What subseg we are accreting now? */
+COMMON subsegT now_subseg;
-
-COMMON segT now_seg;
/* Segment our instructions emit to. */
/* Only OK values are SEG_TEXT or SEG_DATA. */
-
+COMMON segT now_seg;
extern char *const seg_name[];
extern int section_alignment[];
typedef enum _relax_state
{
- rs_fill = 1, /* Variable chars to be repeated fr_offset times.
- Fr_symbol unused. Used with fr_offset == 0 for a
- constant length frag. */
+ /* Variable chars to be repeated fr_offset times.
+ Fr_symbol unused. Used with fr_offset == 0 for a
+ constant length frag. */
+ rs_fill = 1,
- rs_align, /* Align: Fr_offset: power of 2. 1 variable char: fill
- character. */
+ /* Align: Fr_offset: power of 2. 1 variable char: fill character. */
+ rs_align,
- rs_org, /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill
- character. */
+ /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill
+ character. */
+ rs_org,
rs_machine_dependent,
#ifndef WORKING_DOT_WORD
- rs_broken_word, /* JF: gunpoint */
+ /* JF: gunpoint */
+ rs_broken_word,
#endif
} relax_stateT;
boundry. Be very careful with this. */
typedef unsigned long relax_substateT;
-typedef unsigned long relax_addressT; /* Enough bits for address. */
-/* Still an integer type. */
+/* Enough bits for address, but still an integer type.
+ Could be a problem, cross-assembling for 64-bit machines. */
+typedef unsigned long relax_addressT;
\f
/* frags.c */
*/
struct frag /* a code fragment */
{
- unsigned long fr_address; /* Object file address. */
- struct frag *fr_next; /* Chain forward; ascending address order. */
+ /* Object file address. */
+ unsigned long fr_address;
+ /* Chain forward; ascending address order. */
/* Rooted in frch_root. */
+ struct frag *fr_next;
- long fr_fix; /* (Fixed) number of chars we know we have. */
+ /* (Fixed) number of chars we know we have. */
/* May be 0. */
- long fr_var; /* (Variable) number of chars after above. */
+ long fr_fix;
+ /* (Variable) number of chars after above. */
/* May be 0. */
- struct symbol *fr_symbol; /* For variable-length tail. */
- long fr_offset; /* For variable-length tail. */
- char *fr_opcode; /*->opcode low addr byte,for relax()ation*/
- relax_stateT fr_type; /* What state is my tail in? */
+ long fr_var;
+ /* For variable-length tail. */
+ struct symbol *fr_symbol;
+ /* For variable-length tail. */
+ long fr_offset;
+ /*->opcode low addr byte,for relax()ation*/
+ char *fr_opcode;
+ /* What state is my tail in? */
+ relax_stateT fr_type;
relax_substateT fr_subtype;
+
/* These are needed only on the NS32K machines */
char fr_pcrel_adjust;
char fr_bsr;
#ifndef NO_LISTING
struct list_info_struct *line;
#endif
- char fr_literal[1]; /* Chars begin here. */
- /* One day we will compile fr_literal[0]. */
+ /* Chars begin here.
+ One day we will compile fr_literal[0]. */
+ char fr_literal[1];
};
#define SIZEOF_STRUCT_FRAG \
typedef struct frag fragS;
-COMMON fragS *frag_now; /* -> current frag we are building. */
-/* This frag is incomplete. */
-/* It is, however, included in frchain_now. */
-/* Frag_now->fr_fix is bogus. Use: */
-/* Virtual frag_now->fr_fix==obstack_next_free(&frags)-frag_now->fr_literal.*/
+/* Current frag we are building. This frag is incomplete. It is, however,
+ included in frchain_now. The fr_fix field is bogus; instead, use:
+ obstack_next_free(&frags)-frag_now->fr_literal. */
+COMMON fragS *frag_now;
-COMMON fragS zero_address_frag; /* For foreign-segment symbol fixups. */
-COMMON fragS bss_address_frag; /* For local common (N_BSS segment) fixups. */
+/* For foreign-segment symbol fixups. */
+COMMON fragS zero_address_frag;
+/* For local common (N_BSS segment) fixups. */
+COMMON fragS bss_address_frag;
/* main program "as.c" (command arguments etc) */
-COMMON char flagseen[128]; /* ['x'] TRUE if "-x" seen. */
+/* ['x'] TRUE if "-x" seen. */
+COMMON char flagseen[128];
+COMMON unsigned char flag_readonly_data_in_text;
+COMMON unsigned char flag_suppress_warnings;
+COMMON unsigned char flag_always_generate_output;
-COMMON char *out_file_name; /* name of emitted object file */
+/* name of emitted object file */
+COMMON char *out_file_name;
-COMMON int need_pass_2; /* TRUE if we need a second pass. */
+/* TRUE if we need a second pass. */
+COMMON int need_pass_2;
-COMMON int linkrelax; /* TRUE if we should do no relaxing, and
- leave lots of padding. */
+/* TRUE if we should do no relaxing, and
+ leave lots of padding. */
+COMMON int linkrelax;
-typedef struct
+struct _pseudo_type
{
- char *poc_name; /* assembler mnemonic, lower case, no '.' */
- void (*poc_handler) (); /* Do the work */
- int poc_val; /* Value to pass to handler */
- }
+ /* assembler mnemonic, lower case, no '.' */
+ char *poc_name;
+ /* Do the work */
+ void (*poc_handler) ();
+ /* Value to pass to handler */
+ int poc_val;
+ };
-pseudo_typeS;
+typedef struct _pseudo_type pseudo_typeS;
-#ifdef __STDC__
+#ifndef NO_STDARG
-int had_errors (void);
-int had_warnings (void);
-void as_bad (const char *Format,...);
-void as_fatal (const char *Format,...);
-void as_tsktsk (const char *Format,...);
-void as_warn (const char *Format,...);
+int had_errors PARAMS ((void));
+int had_warnings PARAMS ((void));
+void as_bad PARAMS ((const char *Format,...));
+void as_fatal PARAMS ((const char *Format,...));
+void as_tsktsk PARAMS ((const char *Format,...));
+void as_warn PARAMS ((const char *Format,...));
#else
#endif /* __STDC__ & !NO_STDARG */
-#ifdef __STDC__
-
-char *app_push (void);
-char *atof_ieee (char *str, int what_kind, LITTLENUM_TYPE * words);
-char *input_scrub_include_file (char *filename, char *position);
-char *input_scrub_new_file (char *filename);
-char *input_scrub_next_buffer (char **bufp);
-char *strstr (const char *s, const char *wanted);
-char *xmalloc (int size);
-char *xrealloc (char *ptr, long n);
-int do_scrub_next_char (int (*get) (), void (*unget) ());
-int gen_to_words (LITTLENUM_TYPE * words, int precision, long exponent_bits);
-int had_err (void);
-int had_errors (void);
-int had_warnings (void);
-int ignore_input (void);
-int scrub_from_file (void);
-int scrub_from_file (void);
-int scrub_from_string (void);
-int seen_at_least_1_file (void);
-void app_pop (char *arg);
-void as_howmuch (FILE * stream);
-void as_perror (char *gripe, char *filename);
-void as_where (void);
-void bump_line_counters (void);
-void do_scrub_begin (void);
-void input_scrub_begin (void);
-void input_scrub_close (void);
-void input_scrub_end (void);
-void int_to_gen (long x);
-void new_logical_line (char *fname, int line_number);
-void scrub_to_file (int ch);
-void scrub_to_string (int ch);
-void subseg_change (segT seg, int subseg);
-void subseg_new (segT seg, subsegT subseg);
-void subsegs_begin (void);
-
-#else /* not __STDC__ */
-
-char *app_push ();
-char *atof_ieee ();
-char *input_scrub_include_file ();
-char *input_scrub_new_file ();
-char *input_scrub_next_buffer ();
-char *strstr ();
-char *xmalloc ();
-char *xrealloc ();
-int do_scrub_next_char ();
-int gen_to_words ();
-int had_err ();
-int had_errors ();
-int had_warnings ();
-int ignore_input ();
-int scrub_from_file ();
-int scrub_from_file ();
-int scrub_from_string ();
-int seen_at_least_1_file ();
-void app_pop ();
-void as_howmuch ();
-void as_perror ();
-void as_where ();
-void bump_line_counters ();
-void do_scrub_begin ();
-void input_scrub_begin ();
-void input_scrub_close ();
-void input_scrub_end ();
-void int_to_gen ();
-void new_logical_line ();
-void scrub_to_file ();
-void scrub_to_string ();
-void subseg_change ();
-void subseg_new ();
-void subsegs_begin ();
-
-#endif /* not __STDC__ */
+char *app_push PARAMS ((void));
+char *atof_ieee PARAMS ((char *str, int what_kind, LITTLENUM_TYPE * words));
+char *input_scrub_include_file PARAMS ((char *filename, char *position));
+char *input_scrub_new_file PARAMS ((char *filename));
+char *input_scrub_next_buffer PARAMS ((char **bufp));
+char *strstr PARAMS ((const char *s, const char *wanted));
+char *xmalloc PARAMS ((long size));
+char *xrealloc PARAMS ((char *ptr, long n));
+int do_scrub_next_char PARAMS ((int (*get) (), void (*unget) ()));
+int gen_to_words PARAMS ((LITTLENUM_TYPE * words, int precision,
+ long exponent_bits));
+int had_err PARAMS ((void));
+int had_errors PARAMS ((void));
+int had_warnings PARAMS ((void));
+int ignore_input PARAMS ((void));
+int scrub_from_file PARAMS ((void));
+int scrub_from_file PARAMS ((void));
+int scrub_from_string PARAMS ((void));
+int seen_at_least_1_file PARAMS ((void));
+void app_pop PARAMS ((char *arg));
+void as_howmuch PARAMS ((FILE * stream));
+void as_perror PARAMS ((char *gripe, char *filename));
+void as_where PARAMS ((void));
+void bump_line_counters PARAMS ((void));
+void do_scrub_begin PARAMS ((void));
+void input_scrub_begin PARAMS ((void));
+void input_scrub_close PARAMS ((void));
+void input_scrub_end PARAMS ((void));
+void int_to_gen PARAMS ((long x));
+void new_logical_line PARAMS ((char *fname, int line_number));
+void scrub_to_file PARAMS ((int ch));
+void scrub_to_string PARAMS ((int ch));
+void subseg_change PARAMS ((segT seg, int subseg));
+void subseg_new PARAMS ((segT seg, subsegT subseg));
+void subsegs_begin PARAMS ((void));
/* this one starts the chain of target dependant headers */
#include "targ-env.h"
/* these define types needed by the interfaces */
#include "struc-symbol.h"
-/*#include "aout/reloc.h"*/
#include "write.h"
#include "expr.h"
#include "listing.h"
-/*
- * Local Variables:
- * comment-column: 0
- * fill-column: 131
- * End:
- */
-
/* end of as.h */
{
#ifdef VMS
/*
- * Under VAX/VMS, the linker (and PSECT specifications)
- * take care of correctly aligning the segments.
- * Doing the alignment here (on initialized data) can
- * mess up the calculation of global data PSECT sizes.
- */
+ * Under VAX/VMS, the linker (and PSECT specifications)
+ * take care of correctly aligning the segments.
+ * Doing the alignment here (on initialized data) can
+ * mess up the calculation of global data PSECT sizes.
+ */
#undef SUB_SEGMENT_ALIGN
#define SUB_SEGMENT_ALIGN ((frchainP->frch_seg != SEG_DATA) ? 2 : 0)
#endif /* VMS */
/* frag_align will have left a new frag. */
/* Use this last frag for an empty ".fill". */
/*
- * For this segment ...
- * Create a last frag. Do not leave a "being filled in frag".
- */
+ * For this segment ...
+ * Create a last frag. Do not leave a "being filled in frag".
+ */
frag_wane (frag_now);
frag_now->fr_fix = 0;
know (frag_now->fr_next == NULL);
} /* walk the frag chain */
/*
- * From now on, we don't care about sub-segments.
- * Build one frag chain for each segment. Linked thru fr_next.
- * We know that there is at least 1 text frchain & at least 1 data
- * frchain.
- */
+ * From now on, we don't care about sub-segments.
+ * Build one frag chain for each segment. Linked thru fr_next.
+ * We know that there is at least 1 text frchain & at least 1 data
+ * frchain.
+ */
remove_subsegs (frchain_root, SEG_TEXT, &text_frag_root, &text_last_frag);
remove_subsegs (data0_frchainP, SEG_DATA, &data_frag_root, &data_last_frag);
remove_subsegs (bss0_frchainP, SEG_BSS, &bss_frag_root, &bss_last_frag);
/*
- * We have two segments. If user gave -R flag, then we must put the
- * data frags into the text segment. Do this before relaxing so
- * we know to take advantage of -R and make shorter addresses.
- */
+ * We have two segments. If user gave -R flag, then we must put the
+ * data frags into the text segment. Do this before relaxing so
+ * we know to take advantage of -R and make shorter addresses.
+ */
#ifndef OBJ_AOUT
if (flagseen['R'])
{
relax_segment (data_frag_root, SEG_DATA);
relax_segment (bss_frag_root, SEG_BSS);
/*
- * Now the addresses of frags are correct within the segment.
- */
+ * Now the addresses of frags are correct within the segment.
+ */
know (text_last_frag->fr_type == rs_fill && text_last_frag->fr_offset == 0);
H_SET_TEXT_SIZE (&headers, text_last_frag->fr_address);
text_last_frag->fr_address = H_GET_TEXT_SIZE (&headers);
/*
- * Join the 2 segments into 1 huge segment.
- * To do this, re-compute every rn_address in the SEG_DATA frags.
- * Then join the data frags after the text frags.
- *
- * Determine a_data [length of data segment].
- */
+ * Join the 2 segments into 1 huge segment.
+ * To do this, re-compute every rn_address in the SEG_DATA frags.
+ * Then join the data frags after the text frags.
+ *
+ * Determine a_data [length of data segment].
+ */
if (data_frag_root)
{
register relax_addressT slide;
#ifdef OBJ_BOUT
#define RoundUp(N,S) (((N)+(S)-1)&-(S))
/* For b.out: If the data section has a strict alignment
- requirement, its load address in the .o file will be
- rounded up from the size of the text section. These
- two values are *not* the same! Similarly for the bss
- section.... */
+ requirement, its load address in the .o file will be
+ rounded up from the size of the text section. These
+ two values are *not* the same! Similarly for the bss
+ section.... */
slide = RoundUp (slide, 1 << section_alignment[SEG_DATA]);
#endif
H_SET_BSS_SIZE (&headers, local_bss_counter);
/*
- *
- * Crawl the symbol chain.
- *
- * For each symbol whose value depends on a frag, take the address of
- * that frag and subsume it into the value of the symbol.
- * After this, there is just one way to lookup a symbol value.
- * Values are left in their final state for object file emission.
- * We adjust the values of 'L' local symbols, even if we do
- * not intend to emit them to the object file, because their values
- * are needed for fix-ups.
- *
- * Unless we saw a -L flag, remove all symbols that begin with 'L'
- * from the symbol chain. (They are still pointed to by the fixes.)
- *
- * Count the remaining symbols.
- * Assign a symbol number to each symbol.
- * Count the number of string-table chars we will emit.
- * Put this info into the headers as appropriate.
- *
- */
+ *
+ * Crawl the symbol chain.
+ *
+ * For each symbol whose value depends on a frag, take the address of
+ * that frag and subsume it into the value of the symbol.
+ * After this, there is just one way to lookup a symbol value.
+ * Values are left in their final state for object file emission.
+ * We adjust the values of 'L' local symbols, even if we do
+ * not intend to emit them to the object file, because their values
+ * are needed for fix-ups.
+ *
+ * Unless we saw a -L flag, remove all symbols that begin with 'L'
+ * from the symbol chain. (They are still pointed to by the fixes.)
+ *
+ * Count the remaining symbols.
+ * Assign a symbol number to each symbol.
+ * Count the number of string-table chars we will emit.
+ * Put this info into the headers as appropriate.
+ *
+ */
know (zero_address_frag.fr_address == 0);
string_byte_count = sizeof (string_byte_count);
H_SET_STRING_SIZE (&headers, string_byte_count);
/*
- * Addresses of frags now reflect addresses we use in the object file.
- * Symbol values are correct.
- * Scan the frags, converting any ".org"s and ".align"s to ".fill"s.
- * Also converting any machine-dependent frags using md_convert_frag();
- */
+ * Addresses of frags now reflect addresses we use in the object file.
+ * Symbol values are correct.
+ * Scan the frags, converting any ".org"s and ".align"s to ".fill"s.
+ * Also converting any machine-dependent frags using md_convert_frag();
+ */
subseg_change (SEG_TEXT, 0);
for (fragP = text_frag_root; fragP; fragP = fragP->fr_next)
know ((fragP->fr_next == NULL) || ((fragP->fr_next->fr_address - fragP->fr_address) == fragP->fr_fix));
/*
- * After md_convert_frag, we make the frag into a ".space 0".
- * Md_convert_frag() should set up any fixSs and constants
- * required.
- */
+ * After md_convert_frag, we make the frag into a ".space 0".
+ * Md_convert_frag() should set up any fixSs and constants
+ * required.
+ */
frag_wane (fragP);
break;
/* In case md_estimate_size_before_relax() wants to make fixSs. */
subseg_change (segment, 0);
- /*
- * For each frag in segment: count and store (a 1st guess of)
- * fr_address.
- */
+ /* For each frag in segment: count and store (a 1st guess of)
+ fr_address. */
address = 0;
for (fragP = segment_frag_root; fragP; fragP = fragP->fr_next)
{
break;
case rs_org:
- /*
- * Assume .org is nugatory. It will grow with 1st
- * relax.
- */
+ /* Assume .org is nugatory. It will grow with 1st relax. */
break;
case rs_machine_dependent:
} /* switch(fr_type) */
} /* for each frag in the segment */
- /*
- * Do relax().
- */
+ /* Do relax(). */
{
- register long stretch; /* May be any size, 0 or negative. */
+ long stretch; /* May be any size, 0 or negative. */
/* Cumulative number of addresses we have */
/* relaxed this pass. */
/* We may have relaxed more than one address. */
- register long stretched; /* Have we stretched on this pass? */
- /* This is 'cuz stretch may be zero, when,
- in fact some piece of code grew, and
- another shrank. If a branch instruction
- doesn't fit anymore, we could be scrod */
+ long stretched; /* Have we stretched on this pass? */
+ /* This is 'cuz stretch may be zero, when, in fact some piece of code
+ grew, and another shrank. If a branch instruction doesn't fit anymore,
+ we could be scrod. */
do
{
stretch = stretched = 0;
for (fragP = segment_frag_root; fragP; fragP = fragP->fr_next)
{
- register long growth = 0;
- register unsigned long was_address;
- /* register long var; */
- register long offset;
- register symbolS *symbolP;
- register long target;
- register long after;
- register long aim;
+ long growth = 0;
+ unsigned long was_address;
+ long offset;
+ symbolS *symbolP;
+ long target;
+ long after;
+ long aim;
was_address = fragP->fr_address;
address = fragP->fr_address += stretch;
symbolP = fragP->fr_symbol;
offset = fragP->fr_offset;
- /* var = fragP->fr_var; */
switch (fragP->fr_type)
{
#ifndef WORKING_DOT_WORD
/* JF: This is RMS's idea. I do *NOT* want to be blamed
- for it I do not want to write it. I do not want to have
- anything to do with it. This is not the proper way to
- implement this misfeature. */
+ for it I do not want to write it. I do not want to have
+ anything to do with it. This is not the proper way to
+ implement this misfeature. */
case rs_broken_word:
{
struct broken_word *lie;
extern int md_long_jump_size;
/* Yes this is ugly (storing the broken_word pointer
- in the symbol slot). Still, this whole chunk of
- code is ugly, and I don't feel like doing anything
- about it. Think of it as stubbornness in action */
+ in the symbol slot). Still, this whole chunk of
+ code is ugly, and I don't feel like doing anything
+ about it. Think of it as stubbornness in action. */
growth = 0;
for (lie = (struct broken_word *) (fragP->fr_symbol);
lie && lie->dispfrag == fragP;
if (lie->added)
continue;
- offset = lie->add->sy_frag->fr_address + S_GET_VALUE (lie->add) + lie->addnum -
- (lie->sub->sy_frag->fr_address + S_GET_VALUE (lie->sub));
+ offset = (lie->add->sy_frag->fr_address
+ + S_GET_VALUE (lie->add)
+ + lie->addnum
+ - (lie->sub->sy_frag->fr_address
+ + S_GET_VALUE (lie->sub)));
if (offset <= -32768 || offset >= 32767)
{
if (flagseen['K'])
fragP->fr_subtype++;
growth += md_short_jump_size;
}
- for (untruth = lie->next_broken_word; untruth && untruth->dispfrag == lie->dispfrag; untruth = untruth->next_broken_word)
+ for (untruth = lie->next_broken_word;
+ untruth && untruth->dispfrag == lie->dispfrag;
+ untruth = untruth->next_broken_word)
if ((untruth->add->sy_frag == lie->add->sy_frag)
&& S_GET_VALUE (untruth->add) == S_GET_VALUE (lie->add))
{
} /* case rs_broken_word */
#endif
case rs_align:
- growth = relax_align ((relax_addressT) (address + fragP->fr_fix), offset)
- - relax_align ((relax_addressT) (was_address + fragP->fr_fix), offset);
+ growth = (relax_align ((relax_addressT) (address + fragP->fr_fix), offset)
+ - relax_align ((relax_addressT) (was_address + fragP->fr_fix), offset));
break;
case rs_org:
know (fragP->fr_next);
after = fragP->fr_next->fr_address;
growth = ((target - after) > 0) ? (target - after) : 0;
- /* Growth may be -ve, but variable part */
- /* of frag cannot have < 0 chars. */
- /* That is, we can't .org backwards. */
+ /* Growth may be -ve, but variable part of frag cannot have
+ fewer than 0 chars. That is, we can't .org backwards. */
growth -= stretch; /* This is an absolute growth factor */
break;
case rs_machine_dependent:
{
- register const relax_typeS *this_type;
- register const relax_typeS *start_type;
- register relax_substateT next_state;
- register relax_substateT this_state;
+ const relax_typeS *this_type;
+ const relax_typeS *start_type;
+ relax_substateT next_state;
+ relax_substateT this_state;
- start_type = this_type = md_relax_table + (this_state = fragP->fr_subtype);
+ this_state = fragP->fr_subtype;
+ start_type = this_type = md_relax_table + this_state;
target = offset;
if (symbolP)
+ symbolP->sy_frag->fr_address;
/* If frag has yet to be reached on this pass,
- assume it will move by STRETCH just as we did.
- If this is not so, it will be because some frag
- between grows, and that will force another pass. */
+ assume it will move by STRETCH just as we did.
+ If this is not so, it will be because some frag
+ between grows, and that will force another pass. */
/* JF was just address */
/* JF also added is_dnrange hack */
/* There's gotta be a better/faster/etc way
- to do this. . . */
+ to do this. . . */
/* gnu@cygnus.com: I changed this from > to >=
- because I ran into a zero-length frag (fr_fix=0)
- which was created when the obstack needed a new
- chunk JUST AFTER the opcode of a branch. Since
- fr_fix is zero, fr_address of this frag is the same
- as fr_address of the next frag. This
- zero-length frag was variable and jumped to .+2
- (in the next frag), but since the > comparison
- below failed (the two were =, not >), "stretch"
- was not added to the target. Stretch was 178, so
- the offset appeared to be .-176 instead, which did
- not fit into a byte branch, so the assembler
- relaxed the branch to a word. This didn't compare
- with what happened when the same source file was
- assembled on other machines, which is how I found it.
- You might want to think about what other places have
- trouble with zero length frags... */
+ because I ran into a zero-length frag (fr_fix=0)
+ which was created when the obstack needed a new
+ chunk JUST AFTER the opcode of a branch. Since
+ fr_fix is zero, fr_address of this frag is the same
+ as fr_address of the next frag. This
+ zero-length frag was variable and jumped to .+2
+ (in the next frag), but since the > comparison
+ below failed (the two were =, not >), "stretch"
+ was not added to the target. Stretch was 178, so
+ the offset appeared to be .-176 instead, which did
+ not fit into a byte branch, so the assembler
+ relaxed the branch to a word. This didn't compare
+ with what happened when the same source file was
+ assembled on other machines, which is how I found it.
+ You might want to think about what other places have
+ trouble with zero length frags... */
if (symbolP->sy_frag->fr_address >= was_address
&& is_dnrange (fragP, symbolP->sy_frag))
{
target += stretch;
- } /* */
-
+ }
} /* if there's a symbol attached */
aim = target - address - fragP->fr_fix;
/* The displacement is affected by the instruction size
- * for the 32k architecture. I think we ought to be able
- * to add fragP->fr_pcrel_adjust in all cases (it should be
- * zero if not used), but just in case it breaks something
- * else we'll put this inside #ifdef NS32K ... #endif
- */
+ for the 32k architecture. I think we ought to be able
+ to add fragP->fr_pcrel_adjust in all cases (it should be
+ zero if not used), but just in case it breaks something
+ else we'll put this inside #ifdef NS32K ... #endif */
#ifdef TC_NS32K
aim += fragP->fr_pcrel_adjust;
#endif /* TC_NS32K */
{
/* Look backwards. */
for (next_state = this_type->rlx_more; next_state;)
- {
- if (aim >= this_type->rlx_backward)
- {
- next_state = 0;
- }
- else
- { /* Grow to next state. */
- this_type = md_relax_table + (this_state = next_state);
- next_state = this_type->rlx_more;
- }
- }
+ if (aim >= this_type->rlx_backward)
+ next_state = 0;
+ else
+ {
+ /* Grow to next state. */
+ this_state = next_state;
+ this_type = md_relax_table + this_state;
+ next_state = this_type->rlx_more;
+ }
}
else
{
-#ifdef DONTDEF
- /* JF these next few lines of code are for the mc68020 which can't handle short
- offsets of zero in branch instructions. What a kludge! */
- if (aim == 0 && this_state == (1 << 2 + 0))
- { /* FOO hard encoded from m.c */
- aim = this_type->rlx_forward + 1; /* Force relaxation into word mode */
- }
-#endif
#ifdef M68K_AIM_KLUDGE
M68K_AIM_KLUDGE (aim, this_state, this_type);
#endif
- /* JF end of 68020 code */
/* Look forwards. */
for (next_state = this_type->rlx_more; next_state;)
- {
- if (aim <= this_type->rlx_forward)
- {
- next_state = 0;
- }
- else
- { /* Grow to next state. */
- this_type = md_relax_table + (this_state = next_state);
- next_state = this_type->rlx_more;
- }
- }
+ if (aim <= this_type->rlx_forward)
+ next_state = 0;
+ else
+ {
+ /* Grow to next state. */
+ this_state = next_state;
+ this_type = md_relax_table + this_state;
+ next_state = this_type->rlx_more;
+ }
}
- if ((growth = this_type->rlx_length - start_type->rlx_length) != 0)
+ growth = this_type->rlx_length - start_type->rlx_length;
+ if (growth != 0)
fragP->fr_subtype = this_state;
-
- break;
- } /* case rs_machine_dependent */
+ }
+ break;
default:
BAD_CASE (fragP->fr_type);
} /* do_relax */
/*
- * We now have valid fr_address'es for each frag.
- */
+ * We now have valid fr_address'es for each frag.
+ */
/*
- * All fr_address's are correct, relative to their own segment.
- * We have made all the fixS we will ever make.
- */
+ * All fr_address's are correct, relative to their own segment.
+ * We have made all the fixS we will ever make.
+ */
} /* relax_segment() */
/*
malloc()
*/
-#include <stdio.h>
-
-#if __STDC__ == 1
-#include <stdlib.h>
-#else
-#ifdef USG
-#include <malloc.h>
-#else
-char *malloc ();
-#endif /* USG */
-#endif /* not __STDC__ */
+
+#include "as.h"
#define error as_fatal
long n;
{
char *retval;
- void error ();
- if ((retval = malloc ((unsigned) n)) == NULL)
- {
- error ("virtual memory exceeded");
- }
+ retval = malloc ((unsigned) n);
+ if (retval == NULL)
+ error ("virtual memory exceeded");
return (retval);
}
+char *
+xrealloc (ptr, n)
+ register char *ptr;
+ long n;
+{
+ ptr = realloc (ptr, (unsigned) n);
+ if (ptr == 0)
+ error ("virtual memory exceeded");
+ return (ptr);
+}
/* end of xmalloc.c */