diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 30 | ||||
-rw-r--r-- | gas/stabs.c | 64 |
2 files changed, 77 insertions, 17 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 115b3ea..7f612f1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,33 @@ +Thu May 23 17:34:24 1996 Michael Meissner <meissner@tiktok.cygnus.com> + + * stabs.c (s_stab_generic): For PowerPC ELF, allow .stabd to take + 4 arguments, providing the 4th argument is 0, to allow + compatibility with the Solaris assembler. + +Thu May 16 15:51:48 1996 Ian Lance Taylor <ian@cygnus.com> + + * config/tc-sh.h (struct sh_segment_info_type): Define. + (TC_SEGMENT_INFO_TYPE): Define. + (sh_frob_label): Declare. + (tc_frob_label): Define. + (sh_flush_pending_output): Declare. + (md_flush_pending_output): Define. + * config/tc-sh.c (md_assemble): If relaxing, emit a R_SH_CODE + reloc before the instruction if necessary. + (sh_frob_label): New function. + (sh_flush_pending_output): New function. + (sh_coff_frob_file): Ignore ALIGN, CODE, DATA, and LABEL relocs + when looking for the reloc for the target of .uses. + (md_convert_frag): Fix printf format (%0xlx to 0x%lx). + (sh_force_relocation): Force CODE, DATA, and LABEL relocs to be + emitted. + (md_apply_fix): Ignore CODE, DATA, and LABEL relocs. + (sh_coff_reloc_mangle): Force CODE, DATA, and LABEL relocs to use + the absolute symbol. + + * subsegs.h (segment_info_type): Add tc_segment_info_data field if + TC_SEGMENT_INFO_TYPE is defined. + Wed May 15 12:23:53 1996 Ian Lance Taylor <ian@cygnus.com> * config/tc-i386.c (md_assemble): Make sure the opcode suffix diff --git a/gas/stabs.c b/gas/stabs.c index 38ef846..2b56894 100644 --- a/gas/stabs.c +++ b/gas/stabs.c @@ -224,6 +224,52 @@ s_stab_generic (what, stab_secname, stabstr_secname) SKIP_WHITESPACE (); } +#ifdef TC_PPC +#ifdef OBJ_ELF + /* Solaris on PowerPC has decided that .stabd takes 4 arguments, so emulate it. */ + else if (what == 'd') + { + char *save_location = input_line_pointer; + + SKIP_WHITESPACE (); + if (*input_line_pointer == ',') + { + int dummy; + + input_line_pointer++; + SKIP_WHITESPACE (); + + dummy = get_absolute_expression (); + if (dummy != 0) + { + as_warn (".stabd: Fourth field must be 0"); + ignore_rest_of_line (); + return; + } + SKIP_WHITESPACE (); + } + else + input_line_pointer = save_location; + } +#endif /* OBJ_ELF */ +#endif /* TC_PPC */ + +#ifndef NO_LISTING + if (listing) + { + switch (type) + { + case N_SLINE: + listing_source_line ((unsigned int) desc); + break; + case N_SO: + case N_SOL: + listing_source_file (string); + break; + } + } +#endif /* ! NO_LISTING */ + /* We have now gathered the type, other, and desc information. For .stabs or .stabn, input_line_pointer is now pointing at the value. */ @@ -310,7 +356,7 @@ s_stab_generic (what, stab_secname, stabstr_secname) } #ifdef OBJ_PROCESS_STAB - OBJ_PROCESS_STAB (seg, what, string + stroff, type, other, desc); + OBJ_PROCESS_STAB (seg, what, string, type, other, desc); #endif subseg_set (saved_seg, saved_subseg); @@ -324,22 +370,6 @@ s_stab_generic (what, stab_secname, stabstr_secname) #endif } -#ifndef NO_LISTING - if (listing) - { - switch (type) - { - case N_SLINE: - listing_source_line ((unsigned int) desc); - break; - case N_SO: - case N_SOL: - listing_source_file (string); - break; - } - } -#endif /* ! NO_LISTING */ - demand_empty_rest_of_line (); } |