From efa0c22e67c2858aec856d734b2a89da68cde606 Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Thu, 21 Oct 1993 20:03:19 +0000 Subject: [PATCH] Various arious PA changes from Utah. V9 bugfix. See changelog... --- gas/ChangeLog | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ gas/ChangeLog.v9 | 6 ++++ gas/write.c | 33 ++++++++++++++++--- 3 files changed, 117 insertions(+), 5 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 0b1caff4d0a..863b15c3199 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,86 @@ +Thu Oct 21 12:52:01 1993 Ken Raeburn (raeburn@cygnus.com) + + * config/tc-m68k.h: Don't define REGISTER_PREFIX or + OPTIONAL_REGISTER_PREFIX if either is already defined. + + * config/tc-m68k.c (m68k_ip): Delete some code in "#if 0". + + * configure.in: Set bfd_gas for all sparc targets. Added facility + for keeping or rejecting configurations still under development; + default is to assume production environment, and reject configs + still being worked on. Mark Elf configurations (except sparc and + i386) as developmental. Deleted cases matching some generic names + in favor of more specific names. (E.g., when we get Alpha + support, we'll still only support VMS for Vax.) + + * config/tc-sparc.h (md_end): New macro. + * config/tc-sparc.c (md_end): Function deleted. + (BFD_RELOC_*): Delete macros that used to help keep the non-bfd + version compiling. All sparc targets will use bfd now. + * tc.h (md_end): Don't declare if it's defined as a macro. + + Changes from Jeff Law and Peter Hoogenboom: + + * read.c (next_char_of_string): Limit octal character constants to + three digits. + + * config/tc-hppa.h: Major cleanup. Use GNU-style comments. Warn + against placing additional object-file dependent code here. Warn + against contaminating all of GAS with the internals of tc-hppa.c + through inclusion of tc-hppa.h. Delete all forward declarations + for functions only used within tc-hppa.c, likewise for structures, + variables, and #defines. Try to group OBJ_ELF and OBJ_SOM + conditional code in a few small places. + + * config/tc-hppa.c: Major cleanup. Use GNU-style comments. Group + structures, global variables, forward declarations together. + Reduce (or in some cases eliminate) OBJ_ELF and OBJ_SOM + conditional code -- try to group conditional code together + into a few places. Make all functions and variables which + are only used within tc-hppa.c static. PARAMize all functions. + Add comments to functions. Delete unused functions, variables, + #defines, etc. Delete unused members within structures. Delete + ldil;ble hacks -- it is believed they were installed to work + around old gas bugs. Avoid using mixed case for local + functions, variables, and structures. Fix formatting problems + not found by GNU-indent. Add FIXME notices for things which + should be worked on the near future. Delete lots of old + useless (1.36 PA-SOM) code. + + * config/tc-hppa.c: (fix_new_hppa): Initialize the fx_r_type + field of the fixS structure. Needed to build unwind + descriptors correctly. + + * write.c: (fixup_segment): Allow expressions such as + sym1-sym2+const as long as sym2 is $global$. + + * write.c (adjust_reloc_syms): Provide a hook so that a target + cpu configuration can reject certain relocation reductions. + * tc-hppa.h (tc_fix_adjustable): New macro. Only accept relocations + which do not involve function symbols. + + * config/tc-hppa.h: Reindent with GNU-indent. Delete references + to OBJ_OSFROSE. Fix typos (OBJ_SOME -> OBJ_SOM). Delete unused + STAB_FIXUP macro. + * config/tc-hppa.c: Likewise. + + * config/tc-hppa.c (md_apply_fix_1): Use elf_symbol_type, instead + of elf32_symbol_type. + (pa_export_args): Likewise. + (elf_hppa_final_processing): Likewise. + (pa_desc): Do not call obj_elf_desc. (Is pa_desc even needed + anymore?) + (hppa_tc_make_sections): Do not declare elf_get_symtab_map any + ore. + + * config/tc-hppa.c: (md_section_align): Align all sections to + a multiple of the section alignment rather than always a + multiple of 8. + + * config/tc-hppa.c (hppa_tc_symbol): If the argument relocation + bits are zero (eg they specify no relocations), then do not even + bother adding their entries to thesymextn section. + Thu Oct 21 15:44:55 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * config/tc-sparc.c (md_parse_option): Accept and ignore -sparc diff --git a/gas/ChangeLog.v9 b/gas/ChangeLog.v9 index 7b1a32335eb..8686be76c19 100644 --- a/gas/ChangeLog.v9 +++ b/gas/ChangeLog.v9 @@ -1,3 +1,9 @@ +Wed Oct 20 12:26:33 1993 Ken Raeburn (raeburn@rover.cygnus.com) + + * config/tc-sparc.c (sparc_ip, label "immediate"): Convert relocs + operating on upper 32 bits of immediate constants to lower-half + relocs with adjusted constants. + Fri Sep 3 18:17:32 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) * config/obj-elf.h (elf_symbol): No longer special-cased on diff --git a/gas/write.c b/gas/write.c index 38771b460f5..2b8aec97c87 100644 --- a/gas/write.c +++ b/gas/write.c @@ -544,6 +544,15 @@ adjust_reloc_syms (abfd, sec, xxx) continue; } #endif + + /* Is there some other (target cpu dependent) reason we can't adjust + this one? (E.g. relocations involving function addresses on + the PA. */ +#ifdef tc_fix_adjustable + if (! tc_fix_adjustable (fixp)) + continue; +#endif + /* If the section symbol isn't going to be output, the relocs at least should still work. If not, figure out what to do when we run into that case. */ @@ -858,6 +867,7 @@ relax_and_size_all_segments () bss_address_frag.fr_address = (H_GET_TEXT_SIZE (&headers) + H_GET_DATA_SIZE (&headers)); +#endif /* ! OBJ_BOUT */ /* Slide all the frags */ if (bss_frag_root) @@ -870,8 +880,6 @@ relax_and_size_all_segments () } /* for each bss frag */ } -#endif /* ! OBJ_BOUT */ - if (bss_last_frag) H_SET_BSS_SIZE (&headers, bss_last_frag->fr_address - bss_frag_root->fr_address); @@ -1865,6 +1873,7 @@ fixup_segment (fixP, this_segment_type) add_symbolP = NULL; fixP->fx_addsy = NULL; } +#if !defined(SEG_DIFF_ALLOWED) && !defined (GLOBAL_DIFF_ALLOWED) else { /* Different segments in subtraction. */ @@ -1896,6 +1905,14 @@ fixup_segment (fixP, this_segment_type) segment_name (S_GET_SEGMENT (sub_symbolP)), S_GET_NAME (sub_symbolP), buf); } +#else + else + { + seg_reloc_count++; + fixP->fx_addnumber = add_number; /* Remember value for emit_reloc */ + continue; + } /* if absolute */ +#endif } } @@ -1920,7 +1937,9 @@ fixup_segment (fixP, this_segment_type) add_number += S_GET_VALUE (add_symbolP); add_number -= md_pcrel_from (fixP); pcrel = 0; /* Lie. Don't want further pcrel processing. */ +#ifndef TC_HPPA fixP->fx_addsy = NULL; /* No relocations please. */ +#endif } else { @@ -1994,10 +2013,14 @@ fixup_segment (fixP, this_segment_type) if ((add_number & mask) != 0 && (add_number & mask) != mask) { - char buf[50]; + char buf[50], buf2[50]; sprint_value (buf, fragP->fr_address + where); - as_bad ("Value of %ld too large for field of %d bytes at %s", - (long) add_number, size, buf); + if (add_number > 1000) + sprint_value (buf2, add_number); + else + sprintf (buf2, "%d", (long) add_number); + as_bad ("Value of %s too large for field of %d bytes at %s", + buf2, size, buf); } /* generic error checking */ #ifdef WARN_SIGNED_OVERFLOW_WORD /* Warn if a .word value is too large when treated as a signed -- 2.30.2