Breaks with the HP compilers.
* config/tc-hppa.c (struct call_info): Remove fields which were
set but never used. Remove all code which sets those fields.
(struct subspace_dictionary_chain): Likewise.
(struct space_dictionary_chain): Likewise.
(pa_desc): Delete useless function. Delete all references.
(hppa_tc_make_sections): No need to count the number of symbols for
the symbol extension section.
SOM BFD backend.
(obj_som_copyright): New function. Much like obj_som_version.
* config/tc-hppa.c (obj_copyright): Define as appropriate for
SOM and ELF.
(pa_copyright): Just a stub now.
(md_apply_fix_1): Rename to md_apply_fix. Fix argument decls.
Fix comments in various places. Always return a value.
Avoid dereferencing a NULL fx_addsy.
(hppa_force_relocation): Avoid dereferencing a NULL fx_addsy.
- sparc[lite]-coff as well as sparc-lynx
- producing coff (including debug info) under BFD_ASSEMBLER option
- cleanup of cpu-specific code in non-cpu-specific files
(especially write.c)
- providing common code to avoid duplication in cpu-specific files
(specifically, md_number_to_chars)
- stylistic changes & misc cleanup
================
* config/tc-sparc.c (tc_gen_reloc): Make adjustment to addend be dependent on
howto fields, not on format flavour.
* struc-symbol.h (struct symbol): New fields sy_obj and sy_tc, defined as types
OBJ_SYMFIELD_TYPE and TC_SYMFIELD_TYPE, if those macros are defined.
* config/obj-coff.h (TC_SYMFIELD_TYPE, OBJ_SYMFIELD_TYPE): Define.
(TARGET_SYMBOL_FIELDS, I960_SYM_FIELDS): Don't define.
(sy_tc, sy_obj): Define so that the fields look like they used to, until all
references get changed.
* write.c (fixup_segment): Lots of variables no longer register. Reordered
some code for easier reading.
* config/obj-coff.c (obj_coff_dim): dim_index no longer register. Deleted
superfluous return statement.
(obj_coff_line, obj_coff_size, obj_coff_scl, obj_coff_type, obj_coff_val,
tag_init, tag_insert): Deleted superfluous return statement.
(align, obj_coff_section): Deleted debugging printfs.
* config/tc-i386.c (md_assemble): Discard some register decls. Use assignment
rather than memcpy to copy template.
(op_hash, reg_hash, prefix_hash): Default C initialization of statics is
sufficient.
* config/tc-sparc.c (print_insn): Array Reloc is now const, and points to
const.
* config/obj-coff.h (TARGET_FORMAT): Only use coff-sparc-lynx if TE_LYNX; use
coff-sparc otherwise.
[USE_NATIVE_HEADERS]: Delete this code; it isn't used.
* write.c (fixup_segment): Call TC_VALIDATE_FIX, if defined, before processing
a fixup. Call TC_ADJUST_RELOC_COUNT just before returning. Remove some
i960-coff-specific code.
(TC_ADJUST_RELOC_COUNT): Default to doing nothing.
* config/tc-i960.h (TC_ADJUST_RELOC_COUNT) [OBJ_COFF]: Define.
(i960_validate_fix): Declare.
(TC_VALIDATE_FIX): Define.
* config/tc-i960.c (i960_validate_fix): New function.
* write.c (number_to_chars_littleendian): New function. Write out bytes in
little endian order, doing size and range checking.
(number_to_chars_bigendian): New function, similar.
* write.h: Declare them.
* config/tc-*.c (md_number_to_chars): Use them.
* config/tc-vax.c (md_apply_fix): Ditto.
* config/tc-i386.c (md_apply_fix): Ditto.
* config/obj-coff.c: Rearranged code for handling line number data.
(line_fsym): Renamed from function_lineoff in BFD_ASSEMBLER case, since the
usage is different from non-BFD_ASSEMBLER case.
(in_function, clear_function, set_function): New macros, to combine some of the
functionality implemented in differnet ways in BFD_ASSEMBLER and non-... code.
Used in other functions that used to check function_lineoff &c.
(obj_emit_lineno): Split into two copies, one for BFD_ASSEMBLER, one for not.
Non-BFD_ASSEMBLER version now has temporary variable to contain char* pointer
pointed to by char** argument. Always follow CROSS_COMPILE code; easier to
read that way.
(obj_coff_ln): Don't call add_lineno or c_line_new if appline is set.
(obj_coff_endef) [BFD_ASSEMBLER]: Don't do anything special for ".bf", it's
been done elsewhere.
(coff_frob_symbol): If ilne number data is pending, call add_linesym to flush it.
(coff_frob_file): Don't do that here.
* config/obj-coff.h (coff_frob_file): Declare.
(obj_frob_file): Define, to call it.
* config/tc-sparc.h (md_create_short_jump, md_create_long_jump,
md_estimate_size_before_relax: Define them as macros calling as_fatal.
* config/tc-sparc.c: Don't define them as functions.
(fixup_segment): Allow the target machine to specify that a
relocation must be generated for a particular fixup. Remove
#ifndef TC_HPPA hack.
* config/tc-hppa.h (TC_FORCE_RELOCATION): Define.
* config/tc-hppa.c (md_apply_fix_1): Never change fx_addsy to
be NULL. Only fixup_segment is supposed to do that.
(hppa_force_relocation): New function.
exists before trying to peek at its name.
(pa_space): Do not call pa_align_subseg. See hppa/unsorted/align3.s
for testcase.
(pa_align_subseg): Delete unused/unwanted function.
Changed to not actually build the external symbol information, as
that is now done by the ECOFF back end.
(ecoff_build_debug): Changed accordingly.
* ecoff.h (obj_ecoff_set_ext): Declare. obj-format.c function
called by ecoff_setup_ext.
* config/obj-ecoff.c (ecoff_frob_file): If debug_info count is 0,
set corresponding pointer to NULL. Don't set raw_size and
raw_syments.
(obj_ecoff_set_sym_index): Removed.
(obj_ecoff_set_ext): New function.
* config/obj-ecoff.h (obj_set_sym_index): Don't define.
(obj_ecoff_set_sym_index): Don't declare.
* config/obj-elf.c (obj_ecoff_set_ext, elf_get_extr,
elf_set_index): New functions used for ECOFF_DEBUGGING.
(elf_frob_file): Reworked ECOFF debug generation to use
new functions in bfd/ecofflink.c.
OBJ_ECOFF in many cases.
(mips_any_noreorder): New variable.
(mips_cprestore_offset): Initialize to -1.
(mips_frame_reg): New variable.
(RELAX_ENCODE, RELAX_OLD, RELAX_NEW, RELAX_RELOC1,
RELAX_RELOC2, RELAX_RELOC3, RELAX_WARN): New macros.
(md_pseudo_table): Handle "gpword" and "cpadd".
(md_begin): Initialize ok to false. If OBJ_ELF, set alignment
of text, data and bss sections to 4. Set alignment of
.reginfo section to 2. If ECOFF_DEBUGGING, create .mdebug
section.
(ALIGN_ERR, ALIGN_ERR2): Removed unused and useless alignment
check.
(append_insn, macro_build, macro_build_lui): Take place
argument. Changed all callers.
(append_insn): If appending a nop, don't emit one.
(macro_build): Changed assertion for 'i', 'j', 'o' case.
(gp_reference): Removed.
(load_address): New function.
(macro): If mips_noreorder is used, set mips_any_noreorder.
Extensive changes to handle GP and PIC symbols differently.
Build both possible code choices using a variant frag, and
make a final decision at the end of assembly when all
information is known. Added PIC support for all symbol
references.
(mips_ip): Don't permit anything but a number after $ for a
coprocessor register. Don't use .lit4 or .lit8 sections when
generating PIC code. If OBJ_ELF, set alignment of .lit4 or
.lit8 section to 4.
(md_apply_fix): Accept and ignore GOT16 and GPREL32 relocs.
(s_change_sec): Set alignment of ELF .rodata or .sdata section
to 4.
(s_mipsset): If .set noreorder, set mips_any_noreorder.
(s_cpload): Ignore .cpload if not generating PIC code. Warn
if .cpload is not in noreorder section.
(s_cprestore): Ignore .cprestore if not generating PIC code.
(s_gpword, s_cpadd): New functions.
(tc_get_register): Added frame argument; if true, set
mips_frame_reg to return value. Changed all callers.
(md_estimate_size_before_relax): Don't error out, but instead
determine how much a frag should grow.
(tc_gen_reloc): Return multiple relocs if appropriate, as
determined by md_estimate_size_before_relax.
(md_convert_frag): New function.
(mips_elf_final_processing): Set ELF header flags based on
mips_any_noreorder and mips_pic.
* config/tc-mips.h (RELOC_EXPANSION_POSSIBLE): Define.
(MAX_RELOC_EXPANSION): Define to be 3.
(md_relax_frag): Define to be 0.
(md_convert_frag): Don't define.
(tc_get_register): Changed declaration.
field selector, rather than an int. All uses of field selectors
fixed.
(tc_gen_reloc): For SOM PLABELs, always set addend to zero for now.
(md_apply_fix_1): Do not call hppa_field_adjust for any PLABEL
field.
Accept new argument "is_export". All callers changed. When
processing a .export directive for a function, do not allow
the user to set the type to "CODE", instead warn and set the
type to "ENTRY".
* config/tc-hppa.c (fix_new_hppa): If the subtract symbol for
a fixup is $global$ change it to NULL as $global$ is really only
needed long enough to determine the base type of relocation to use.
predefined register table.
(pa_parse_number): Handle %rp in common register shortcut code.
Consistently set return value to -1 for an error. Clean up error
messages and only print them when "print_errors" is true. Handle
empty string case like the HP assembler -- assume a value of
zero.
so GAS can attach unwind descriptor information to a BFD symbol.
* config/tc-hppa.c (fix_new_hppa): If necessary attach unwind
descriptor information to the BFD symbol.
(md_apply_fix): R_HPPA_ENTRY and R_HPPA_EXIT can never be "applied",
they are simply markers. Make R_HPPA_UNWIND_* handling OBJ_ELF
dependent.
(pa_build_unwind_subspace): Whole function is OBJ_ELF dependent.
(pa_entry): Build a R_HPPA_ENTRY relocation when configured for SOM.
(pa_exit): Likewise, but built a R_HPPA_EXIT relocation. Do not
build "end-of-function" symbols for SOM, they are not needed.
(pa_callinfo): Insert framesize into the unwind information as
soon as it's available.
(pa_build_unwind_subspace): Do not insert framesize into the unwind
information here.
* config/obj-som.c (obj_som_init_stab_section): Set alignment
of stab sections. Make space for the special stab entry.
(adjust_stab_sections): Adjust the special entry in the
stabs section.
(som_frob_file): New function. Simply calls adjust_stab_sections
for each section.
field. Define SUBSPACE_DEFINED accessor macro.
(pa_subspace): Allow user to override subspace attributes for
built-in subspaces. Set ssd_defined at the end of fcn -- that
way the attributes can only be changed once. Pass newly allocated
name to is_defined_subspace, not a pointer to the input line.
Fix typo in space/subspace rework.
(is_defined_subspace): Delete unused 2nd arg. All callers changed.
* config/tc-hppa.c (pa_import): If currently in the text segment
and a symbol is imported without type information, set BSF_FUNCTION
for the symbol.
can properly set all the SOM symbol types.
* config/tc-hppa.c (pa_symbol_type): New enum to represent the
symbol types which can be set from an IMPORT/EXPORT statement.
(pa_export_args): Set the pa_symbol_type type based on arguments.
If defined, call obj_set_symbol_type to pass this information on
to the BFD backend.
SOM spaces/subspaces.
* config/tc-hppa.c (USE_ALIASES): New object-format dependent define
to control the use of space/subspace name aliases.
(update_subspace): Accept space chain entry for containing space
as a new parameter. All callers changed.
(pa_get_label): Use current_space rather than pa_segment_to_space.
(pa_define_label): Likewise.
(pa_undefine_label): Likewise.
(md_begin): Change into the (possibly modified) text_section.
(pa_parse_space_stmt): Create a new segment/space if create_flag
is true, and the space name is not one of the two predefined spaces.
(pa_subspace): Use current_space rather than a lookup via
pa_segment_to_space. Reset BFD section flags as required by
the .subspace directive. Likewise for the section alignment.
Pass the current space to update_subspace and create_new_subspace.
(pa_spaces_begin): Only use space/subspace aliases if USE_ALIASES
is true. When not using aliases, create a BFD section for each
subspace encountered. When not using aliases replace the default
text, data, and bss segments with new ones.
(create_new_subspace): When not using aliases each subspace has a
section/segment and subsegments are not needed, so set the subsegment
to zero.
obj_set_section_attributes to pass space attributes to the
BFD backend.
(create_new_space): Likewise.
(create_new_subspace): Likewise for subspace attributes using
obj_set_subsection_attributes.
(update_subspace): Likewise for subspace attributes using
obj_set_subsection_attributes.