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>
|
Wed May 15 12:23:53 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
* config/tc-i386.c (md_assemble): Make sure the opcode suffix
|
* 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 ();
|
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
|
/* We have now gathered the type, other, and desc information. For
|
||||||
.stabs or .stabn, input_line_pointer is now pointing at the
|
.stabs or .stabn, input_line_pointer is now pointing at the
|
||||||
value. */
|
value. */
|
||||||
|
@ -310,7 +356,7 @@ s_stab_generic (what, stab_secname, stabstr_secname)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OBJ_PROCESS_STAB
|
#ifdef OBJ_PROCESS_STAB
|
||||||
OBJ_PROCESS_STAB (seg, what, string + stroff, type, other, desc);
|
OBJ_PROCESS_STAB (seg, what, string, type, other, desc);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
subseg_set (saved_seg, saved_subseg);
|
subseg_set (saved_seg, saved_subseg);
|
||||||
|
@ -324,22 +370,6 @@ s_stab_generic (what, stab_secname, stabstr_secname)
|
||||||
#endif
|
#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 ();
|
demand_empty_rest_of_line ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue