Allow bogus .stabd with 4 arguments for PowerPC Solaris

This commit is contained in:
Michael Meissner 1996-05-23 21:49:18 +00:00
parent 31778db0db
commit 63cafcefea
2 changed files with 77 additions and 17 deletions

View File

@ -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

View File

@ -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 ();
}