undefined symbols.
Fixes PR 2997.
* read.c (s_data), config/obj-coffbfd.c (obj_coff_data): If -R,
switch to text section rather than data section.
Fixes PR 2971.
by md_pcrel_from if we are relocating against a symbol (we still
need md_pcrel_from for a PC relative relocation within the same
file).
* config/tc-m88k.c (md_pcrel_from): Corrected return value.
* configure.in (m88k-*-coff*): New target. Use coffbfd and
m88kcoff.
* config/m88kcoff.mt: New file.
* read.c (lex_type): New macro LEX_AT to set lex type of '@'.
(pseudo_set): Handle difference of symbols in different fragments
by saving the entire expression as the value of the symbol.
* symbols.c (resolve_symbol_value): Resolve difference
expressions.
* config/obj-coffbfd.c (obj_pseudo_table): If TC_M88K, accept
"sdef" as a synonym for "def".
* config/obj-coffbfd.h: If TC_M88K, include coff/m88k.h and set
TARGET_FORMAT.
(S_IS_LOCAL): Any symbol which includes \001 in the name is local.
* config/tc-m88k.c, config/tc-m88k.h: Numerous changes to bring
m88k port up to date, and to add COFF support.
as the value of a symbol.
* struc-symbol.h (struct symbol): Removed sy_forward field. Added
sy_resolved and sy_resolving single bit fields.
* symbols.c (symbol_new): Don't initialize sy_forward field.
(resolve_symbol_value): New function to adjust symbol value by
fragment address, using recursion to resolve forward symbols.
* symbols.h: Added prototype for new function.
* read.c (pseudo_set): Set symbolP->sy_value to an undefined
expression rather than setting symbolP->sy_forward.
* write.c (write_object_file): Use resolve_symbol_value on
symbols, keeping the common case (the old behaviour) inline.
* config/obj-aout.c (obj_aout_frob_symbol): Removed sy_forward
handling (subsumed by write.c change).
* config/obj-coff.c, config/obj-coffbfd.c (obj_coff_val): Set
sy_value rather than sy_forward.
* config/obj-coffbfd.c (obj_coff_endef, yank_symbols): Check
expression segment rather than sy_forward.
(yank_symbols): Use resolve_symbol_value.
(crawl_symbols): Removed extra pass over symbols.
* config/obj-aout.c, config/obj-bout.c, config/obj-coff.c,
config/obj-vms.c (obj_crawl_symbol_chain): Removed extra pass over
symbols which handled sy_forward; use resolve_symbol_value
instead.
* config/obj-coff.h, config/obj-coffbfd.h (obj_frob_forward_symbol):
Define.
* config/obj-elf.c (obj_elf_stab_generic): Check expression
segment rather than sy_forward.
* config/obj-vms.c (VMS_Check_For_Main): Don't initialize
sy_forward; do initialize sy_resolved and sy_resolving.
* config/tc-hppa.h (STAB_FIXUP): Use sy_value, not sy_forward.
just a longword:
* struc-symbol.h: New field sy_value.
* as.h: Include expr.h before struc-symbol.h.
* expr.h: Use struct symbol rather than symbolS.
* symbols.c (S_GET_VALUE, S_SET_VALUE): Rewrote to retrieve value
of sy_value field; compile unconditionally, not just if
BFD_ASSEMBLER.
* symbols.h: Compile S_{SG}ET_VALUE prototypes unconditionally.
* write.c (write_object_file): Set BFD symbol value to gas symbol
value.
* config/obj-aout.h, config/obj-bout.h, config/obj-coff.h,
config/obj-coffbfd.h, config/obj-generic.h, config/obj-vms.h
(S_GET_VALUE, S_SET_VALUE): Removed macro definitions.
* config/obj-ieee.c (S_GET_VALUE, S_SET_VALUE): Removed.
* config/obj-coff.h, obj-coffbfd.h: Rewrote several macros to use
S_GET_VALUE rather than ost_entry.n_value.
* config/obj-aout.c (obj_symbol_to_chars), config/obj-bout.c
(obj_symbol_to_chars), config/obj-coff.c (obj_symbol_to_chars),
config/obj-coffbfd.c (symbol_to_chars): Get value to write out
using S_GET_VALUE--don't assume it is already set.
* config/obj-ieee.c (do_symbols): Set BFD symbol value to gas
symbol value.
* config/obj-vms.c (various): Don't assign directly to
S_GET_VALUE; use S_SET_VALUE instead.
putting value into object file into separate function. Separate
out MRI and WANT_BITFIELDS cases into separate functions.
(emit_expr): New function to write data into object file.
Conditionalize on TC_CONS_FIX_NEW and TC_CONS_RELOC rather than on
processor types.
(parse_bitfield_cons): New function to parse bitfield expressions
as used by i960 assemblers. Only compiled if
BITFIELD_CONS_EXPRESSIONS is defined.
(parse_mri_cons): New function to parse MRI style strings. Only
compiled if MRI is defined.
(parse_repeat_cons): New function to parse repeat counts. Only
compiled if REPEAT_CONS_EXPRESSIONS is defined.
* read.h (emit_expr): Added declaration of new function.
* config/tc-a29k.h (TC_CONS_RELOC): Define to be RELOC_32.
* config/tc-h8300.h (TC_CONS_RELOC): Define to be R_RELWORD.
* config/tc-hppa.c (parse_cons_expression_hppa): New function to
parse a HPPA expression, rather than special case in cons
function.
(cons_fix_new_hppa): New function to emit an HPPA fixup, rather
than special case in emit_expr function.
* config/tc-hppa.h (TC_PARSE_CONS_EXPRESSION, TC_CONS_FIX_NEW):
Define to use new functions from tc-hppa.c.
* config/tc-i960.h (BITFIELD_CONS_EXPRESSIONS): Define.
(WANT_BITFIELDS): Removed; now obsolete.
* config/tc-mips.h (REPEAT_CONS_EXPRESSIONS): Define.
* config/tc-ns32k.c (cons_fix_new_ns32k): New function to emit an
NS32K fixup, rather than special case in emit_expr function.
* config/tc-ns32k.h (TC_CONS_FIX_NEW): Define to be
cons_fix_new_ns32k. Also use PARAMS rather than checking
__STDC__.
* config/tc-sparc.h (TC_CONS_RELOC): Define to RELOC_32.
* write.c (relax_and_size_seg, adjust_reloc_syms, write_contents):
Don't core dump if gas has no information about a section.
expr.c (__): Undefine before defining.
as.c (got_sig): Don't return anything; return type might be void.
Whitespace/comment cleanup in frags.c.
Some patches for `-pedantic' or `-fno-common' compilation.
(Some of these changes are from Michael Meissner; see change log.)
comment_chars.
(do_scrub_next_char): If a line comment character is not at the
start of a line, treat it as a comment character if it is one.
For a CPP line comment use pseudo-op .appline rather than .line.
* input-scrub.c (logical_input_line): Make int rather than
unsigned.
(input_scrub_push, input_scrub_begin): Initialize
logical_input_line to -1 rather than 0.
(bump_line_counters): Increment logical_input_line.
(new_logical_line): If line_number is -2, decrement
logical_input_line.
(as_where): Use logical_input_line even if it is 0.
* read.h (s_app_file prototype): Now takes an int argument.
* read.c (potable): Make .appfile call s_app_file with 1. New
.appline pseudo-op calls s_app_line.
(s_app_file): If .appfile, call new_logical_line with -2 to
account for newline inserted by do_scrub_next_char. If listing,
call listing_source_file.
(s_app_line): New function to handle fake pseudo-op .appline.
* config/obj-coff.c (obj_pseudo_table): Make .appline call
obj_coff_ln.
(obj_coff_ln): Added argument to indicate whether .appline.
* config/obj-coffbfd.c (obj_pseudo_table): Make .appline call
obj_coff_ln.
(obj_coff_ln): Added argument to indicate whether .appline.
* config/tc-mips.c (s_file): Pass argument to s_app_file.
to want it that way.
(ecoff_build_symbols): Turn local st_Proc symbols into
st_StaticProc symbols. Set index field of external st_Proc and
st_staticProc symbols correctly.
* config/tc-mips.h (NO_LISTING): Don't define. People might want
listings.
* as.c (perform_an_assemly_pass): Don't set output_section here.
* expr.c (expr_part, expr): Turn off section assertions for ECOFF,
since it has additional sections.
* read.c (s_lcomm): For MIPS ECOFF, put small objects in .sbss,
not bss_section.
* config/obj-ecoff.h (TARGET_SYMBOL_FIELDS): Added
ecoff_undefined field.
* config/obj-ecoff.c (obj_symbol_new_hook): Initialize
ecoff_undefined field.
(add_file): If using stabs, just output a stabs symbol rather than
creating a new fdr.
(obj_ecoff_begin, obj_ecoff_bend): Ignore line number by reading
it with get_absolute_expression, rather than skipping it by hand.
(obj_ecoff_loc): If using stabs, just output a stabs symbol rather
than ECOFF line number information.
(obj_ecoff_stab): Accept non-zero values for stabs line number.
(ecoff_build_symbols): Set ifilesym correctly. Set storage class
to small, undefined and/or readonly sections if appropriate.
Don't output symbol names containing \001 characters.
(ecoff_frob_file): Make sure at least one fdr is output.
* config/tc-mips.h: Define TC_MIPS.
* config/tc-mips.c (g_switch_value): New static variable.
(md_assemble): Set gp size of output BFD.
(gp_reference): New function; returns 1 if expression can be
accesssed via gp. Always returns 0 if not using ECOFF.
(macro_build): Convert BFD_RELOC_LO16 to BFD_RELOC_MIPS_GPREL if
possible.
(macro): Generate sequences using gp if possible.
(md_parse_option): Ignore -EL and -EB. Parse -G.
(md_apply_fix): Added BFD_RELOC_MIPS_GPREL to ignored case.
(s_change_sec): Handle .rdata and .sdata for ECOFF.
(s_extern): Mark symbol as external. Set ecoff_undefined field.
wasn't being stored into scnhdr.
* config/obj-coffbfd.h: Add prototype of s_get_segment.
* read.c (TC_START_LABEL): Default definition.
(read_a_source_file): Use TC_START_LABEL macro to work out
if a label has been seen.
dropping a space immediately following an identifier.
* expr.c, write.c: Rewrote assert expressions to not use multiple
lines; I don't think that can be done portably.
* config/tc-mips.c (macro): Use $AT if target register is zero in
load instruction, which it can be for a floating point load.
Also a bunch more changes to config/obj-ecoff.c, still in flux.
the section contents.
* config/obj-ecoff.h, config/obj-ecoff.c: Numerous changes to get
symbol table and values right.
* config/tc-mips.h (LOCAL_LABEL): If OBJ_ECOFF, any label starting
with $L is local.
* config/tc-mips.c (tc_gen_reloc): If OBJ_ECOFF, adjust the addend
by the section vma.
* config/z8k.mt (TARG_CPU_DEPENDENTS): The relevant file is
z8k-opc.h, not z8k.h.
Misc optimizations, a couple of bugfixes.
Merged doc/ChangeLog.
Ralph Campbell's MIPS support.
And any other changes I've been putting in, save whitespace/comment adjustments.
* app.c, config/tc-*.c: Don't include read.h, since it is already
included by as.h.
* These are based on patches from Minh Tran-le
<mtranle@paris.intellicorp.com>.
* configure.in (i[34]86-ibm-aix*): Accept i486 for host. Use
obj_format coffbfd and gas_target i386coff for target.
(i[34]86-*-isc*): New host (uses sysv).
* config/i386aix.mt: Removed (no longer used).
* config/mh-i386aix (RANLIB): Use true rather than /bin/true.
(MINUS_G): Removed.
(LDFLAGS): Added, defined as -shlib.
* config/te-i386aix.h (REVERSE_SORT_RELOCS): Undefine.
* config/te-sco386.h (LOCAL_LABEL): Don't define.
(DOT_LABEL_PREFIX): Define.
* expr.c (operand): If DOT_LABEL_PREFIX, use .L0\001 as a label
name rather than L0\001.
* read.c (s_lcomm): Make a frag in SEG_BSS rather than using
local_bss_counter.
* symbols.c, symbols.h (local_bss_counter): Removed.
* write.c (write_object_file): bss no longer uses
local_bss_counter. Pass correct data and bss size to
VMS_write_object_file.
* config/obj-vms.c (VMS_write_object_file): Accept bss size as
argument, rather than using local_bss_counter.
* config/tc-m88k.c (s_bss): Don't use local_bss_counter.
* config/tc-sparc.c (s_reserve): Don't use local_bss_counter.
* config/obj-coffbfd.c (had_lineno, had_reloc): Removed.
(size_section): Restored sanity check.
(do_relocs_for): Base section address on s_paddr rather than
computing it. Adjust a29k R_IHIHALF special case to account for
section paddr (used to require paddr to be zero). If there are no
reclos, set s_relptr to 0. Set relocation size in object_headers.
(fill_section): Always set s_vaddr here, removing
ZERO_BASED_SEGMENTS case. Force s_scnptr for bss to 0. Don't set
NOLOAD for i386 .bss, because it confuses the SVR3 native linker.
Set STYP_INFO for .comment.
(coff_header_append): Use object headers and H_{SET,GET}_* macros.
Make aouthdr writing depend on OBJ_COFF_OMIT_OPTIONAL_HEADER.
(crawl_symbols): Handle 8 character section name correctly. Use
H_{SET,GET}_* macros.
(do_linenos_for): Set lineno size in object_headers.
(write_object_file): Use H_{SET,GET}_* macros. Don't bother to
set s_vaddr here. If string_byte_count remains 4, set it back to
0, and only write strings out if there are some. Call
fill_section before do_relocs_for and do_linenos_for.
(obj_coff_section): Handle optional quoted second argument giving
section characteristics.
(obj_coff_bss): Added to handle .bss.
(obj_coff_ident): Added to handle .ident (puts string in .comment
section).
(obj_coff_lcomm): Put common symbols in .bss, not .data.
(fixup_mdeps): Change to segment. Call frag_wane after
md_convert_frag.
(fixup_segment): Explicitly check S_IS_COMMON before making 386
adjustment (already happened only for common symbols, but this is
clearer).
* config/obj-coffbfd.h (OBJ_COFF_OMIT_OPTIONAL_HEADER): Define.
* config/tc-i386.c (s_bss): Don't use if I386COFF.
(md_pseudo_table): Ignore .optim and .noopt.
(tc_coff_sizemachdep): New function.
* config/tc-i386.h (REVERSE_SORT_RELOCS): Undef, for SVR3
compatibility.
(LOCAL_LABEL): Removed definition.
(DOT_LABEL_PREFIX): Defined.
* listing.c: Call xmalloc, not malloc; don't declare malloc.
* Changes to support SCO 3.2v4:
* read.c (s_align_bytes, s_align_ptwo): If not SEG_DATA or
SEG_BSS, fill with NOP_OPCODE.
* config/i386coff.mt: Add opcode/i386.h to TARG_CPU_DEPENDENTS.
* config/obj-coffbfd.c (do_relocs_for): Increment addr even if not
using ZERO_BASED_SEGMENTS.
(fill_section): If ZERO_BASED_SEGMENTS, set segment addresses, but
never set segment address for SEG_E2 (.bss) and don't write out
SEG_E2 contents. Set .init and .fini sections to STYP_TEXT.
(obj_coff_endef): Don't merge labels or symbols awaiting forward
definitions, and don't merge tags with non-tags. Check for .bf
rather than just checking whether the second character is b and
the third character is f.
(obj_coff_val): gcc can generate values which we don't handle
correctly; discard information for now, since it only affects the
debugging information.
(tag_find_or_name): Don't insert tags in the symbol table.
(yank_symbols): Don't merge labels.
(write_object_file): Don't define SUB_SEGMENT_ALIGN if it is
already defined. Fill subsegments with NOP_OPCODE, not 0. Don't
set segment address if ZERO_BASED_SEGMENTS.
(obj_coff_section): Accept and ignore a trailing quoted string, as
used in AT&T i386 syntax.
(fixup_segment): Take segment as argument. On the i386, adjust PC
relative addends by the segment vaddr.
* tc-i386.h: Define SUB_SEGMENT_ALIGN.
* tc-a29k.h: Define ZERO_BASED_SEGMENTS.
* tc-i386.c: (i386_operand): If I386COFF, accept any segment type.
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.
* Added WARN_SIGNED_OVERFLOW_WORD define to give an error if any
.word is < -32768 or > 32767. The -J flag causes the error to be
ignored. This is to catch over-sized switches generated by gcc on
systems which don't support the broken .word hack.
as.c (main): permit -J if WARN_SIGNED_OVERFLOW_WORD.
write.c (fixup_segment): check for signed .word overflow if
WARN_SIGNED_OVERFLOW_WORD.
* input-scrub.c (input_scrub_push): call input_file_begin, not
input_scrub_begin.
messages.c (as_perror): print ": " between the passed in error and
the strerror, like perror does.
* Makefile.in: use gas_target instead of modifying target_cpu.
From Steve Chamberlain:
Makefile.in: Handle m68*-*-coff*.
read.c, read.h: add mult argument to s_space
data, so that "bc" is available to 68040 cache instructions. Added
"tt0", "tt1", and 68ec030 variants.
(md_assemble): Complain if 68000 (only) and 68881 are specified.
(enum _register): Added TT0, TT1.
(m68k_ip, cases '3' and 't'): Handle new operand type codes. Pass
line number correctly in "internal error" messages. Don't print
architecture-mismatch message for operand errors.
From Colin Smith (colin@wrs.com):
* config/tc-m68k.c (m68k_ip, case '_'): Use addword twice rather than
install_operand.
* messages.c (as_warn): Use fputs, not fprintf, with a buffer that
has already been formatted (but may still contain %-characters).
(as_bad): Likewise.
Tue Aug 18 14:16:38 1992 Ian Lance Taylor (ian@cygnus.com)
* Makefile.in: always create installation directories. Removed
MINUS_G, set CFLAGS to default to -g, added FLAGS_TO_PASS, passed
FLAGS_TO_PASS to recursive makes.
* expr.c (floating_constant): Separate "=-" to avoid confusing
ancient or broken compilers.
* config/tc-m68k.c (m68k_ip): Mismatch error could also indicate
processor/opcode mismatch, so reword the error message.
(md_assemble): If no CPU has been set (even if FPU/PMMU
characteristics have been), default to 68020. Don't need extra
quotes around error string.
* app.c (process_escape): new function to handle escapes the right
way, (do_scrub_next_char): use new function
* cond.c (s_ifdef): do ifdef/ifndef right
* read.c (s_fill): make the , expressions optional like the doc
says
* config/tc-h8300.[ch]: better warnings
as data0_frchainP
* 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.
* subsegs.c (subseg_change): allow and handle a change into SEG_BSS.
* expr.c(expr): allow SEG_REGISTER in expressions.
* read.c(pseudo_set): register expressions can be the source of a
set.
* subsegs.c (subseg_new): Now -R forces all changes to SEG_DATA to
goto SEG_TEXT (if a.out)
* write.c (write_object_file): If a.out don't use the old way for
-R.
* config/obj-a.out (s_sect): complain if the user tries to use a
subsegment with a value which might interfere with out -R hackery.
* config/tc-m68k.c (m68k_reg_parse): lookup names in symbol table
rather than use ugly if tree. (init_regtable): insert register
names into symbol table.
* expr.c: remove limitation that local_labels_dollar or
local_labels_fb must be < 10.
* symbols.c: remove local_labels_dollar, replace with a function
interface for a sparse array. All users adjusted.
* expr.c: LOCAL_LABELS_FB had been changed to lower case - so
local labels didn't work.
* listing.c (list_symbol_table): don't core dump when there's no
symbol there.
* write.c, write.h: call fix_new with the right number of args on
the H8.
* config/tc-h8300.[ch] : fix bugs reported by HMSI, and make
errors nicer
* as.c: fix typo recently introduced.
* as.h : Don't include aout/reloc.h - it's not right for COFF!
* expr.c: Much rewriting, to accomodate MRI syntax for
expressions. Also easier to read now.
* listing.c: Put back defuns
* read.c: modified to accept MRI syntax, put back listing pseudo
ops so that an assembler built with NO_LISTING ignores list ops
rather than pukes.
* write.c, write.h: fixs - only keep a reloc type in a fix if the target
machine is a SPARC or a 29K.
* config/obj-aout.c: added s_sect pseudo op
* config/obj-coffbfd.c: lints, set the filehdr flags right and
fill in the timestamp.
* config/obj-coffbfd.h: Since we don't include aout/reloc.h
anymore, define all the relocs which the tc-<x> bit will use so we
can translate from them to the coff types.
* config/tc-a29k.c: reloc_type isn't ane enum any more
* config/tc-m68k.c: Added NO_RELOC definition.
Now compiles for sparc aout, 68k aout (MRI and MIT syntax),
29k coff.
So far works as replacement for sparc and 68k /bin/as.
Added support for listings
* Makefile.in: include listing.[co]
* as.c: parse -l
* as.h: include listing.h, include listing hook into frag
* frags.c (frag_new): hook for creating line number info
* messages.c (as_warn, as_bad): remember message for listing
* read.c: add new pseudos to the table
* write.c: (relax_segment): need to cope with branches with 0
offsets, so create M68K_AIM_KLUDGE- this came to light because
listings make lots of zero length frags.
* listing.c, listing.h: new files
* read.c: Use xmalloc, not malloc.
* expr.c, input-scrub.c, write.c: Avoid "know" macros
that cover more than one line, since this causes char strings
with embedded newlines.
* Makefile.in: install using INSTALL_DATA and INSTALL_PROGRAM.
correct include directory locations. added standards.text
support.
* configure.in: mark this directory as target dependent.
Thu Dec 5 22:46:23 1991 K. Richard Pixley (rich at rtl.cygnus.com)
* Makefile.in: idestdir and ddestdir go away. Added
copyrights and shift gpl to v2. Added ChangeLog if it
didn't exist. docdir and mandir now keyed off datadir by
default.
* as.c: (perform_an_assembly_pass): moved declaration of i to
avoid a syntax error. Now always create the three default
sections when in MANY_SEGMENTS mode.
* as.h: New improved way of specifying MANY_SEGMENTS
* configure.in: hds object format is now coff-bfd
* subsegs.h: add line numbers and section stuff to the
segment_info structure. (But go back later and fix.. this is
COFF specific)
* output-file.c (output_file_create, output_file_close) added
stuff to use bfd.
* write.c: more bfd support
* config/obj-coff.c config/obj-coff.h use bfd for swapping
header info.
* tc-a29k: added the reloc types we support now