Allow bogus .stabd with 4 arguments for PowerPC Solaris
This commit is contained in:
parent
31778db0db
commit
63cafcefea
2 changed files with 77 additions and 17 deletions
|
@ -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
|
||||
|
|
64
gas/stabs.c
64
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 ();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue