re PR target/25258 ([4.0 regression/hpux] gcc generates incorrect stabs debug output)
PR target/25258 * pa.c (pa_output_function_epilogue): Set cfun->machine->in_nsubspa to indicate function epilogue has been output. (pa_asm_output_mi_thunk): Likewise. (output_deferred_plabels): Put plabels in readonly data section when not generating PIC code. (som_output_text_section_asm_op): Use .NSUBSPA to output debug information. Add assert. (som_output_comdat_data_section_asm_op): New function. (pa_som_asm_init_sections): Use som_output_comdat_data_section_asm_op instead of output_section_asm_op for COMDAT sections. From-SVN: r108420
This commit is contained in:
parent
ffb99c1eba
commit
1a83bfc389
@ -1,3 +1,16 @@
|
||||
2005-12-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
* pa.c (pa_output_function_epilogue): Set cfun->machine->in_nsubspa to
|
||||
indicate function epilogue has been output.
|
||||
(pa_asm_output_mi_thunk): Likewise.
|
||||
(output_deferred_plabels): Put plabels in readonly data section when
|
||||
not generating PIC code.
|
||||
(som_output_text_section_asm_op): Use .NSUBSPA to output debug
|
||||
information. Add assert.
|
||||
(som_output_comdat_data_section_asm_op): New function.
|
||||
(pa_som_asm_init_sections): Use som_output_comdat_data_section_asm_op
|
||||
instead of output_section_asm_op for COMDAT sections.
|
||||
|
||||
2005-12-12 J"orn Rennecke <joern.rennecke@st.com>
|
||||
|
||||
* cfgcleanup.c (condjump_equiv_p, try_crossjump_to_edge):
|
||||
|
@ -3935,6 +3935,7 @@ pa_output_function_epilogue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
|
||||
debug information. Forget that we are in this subspace to ensure
|
||||
that the next function is output in its own subspace. */
|
||||
in_section = NULL;
|
||||
cfun->machine->in_nsubspa = 2;
|
||||
}
|
||||
|
||||
if (INSN_ADDRESSES_SET_P ())
|
||||
@ -5300,12 +5301,13 @@ static void
|
||||
output_deferred_plabels (void)
|
||||
{
|
||||
size_t i;
|
||||
/* If we have deferred plabels, then we need to switch into the data
|
||||
section and align it to a 4 byte boundary before we output the
|
||||
deferred plabels. */
|
||||
|
||||
/* If we have some deferred plabels, then we need to switch into the
|
||||
data or readonly data section, and align it to a 4 byte boundary
|
||||
before outputing the deferred plabels. */
|
||||
if (n_deferred_plabels)
|
||||
{
|
||||
switch_to_section (data_section);
|
||||
switch_to_section (flag_pic ? data_section : readonly_data_section);
|
||||
ASM_OUTPUT_ALIGN (asm_out_file, TARGET_64BIT ? 3 : 2);
|
||||
}
|
||||
|
||||
@ -7799,6 +7801,15 @@ pa_asm_output_mi_thunk (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta,
|
||||
|
||||
fprintf (file, "\t.EXIT\n\t.PROCEND\n");
|
||||
|
||||
if (TARGET_SOM && TARGET_GAS)
|
||||
{
|
||||
/* We done with this subspace except possibly for some additional
|
||||
debug information. Forget that we are in this subspace to ensure
|
||||
that the next function is output in its own subspace. */
|
||||
in_section = NULL;
|
||||
cfun->machine->in_nsubspa = 2;
|
||||
}
|
||||
|
||||
if (TARGET_SOM && flag_pic && TREE_PUBLIC (function))
|
||||
{
|
||||
switch_to_section (data_section);
|
||||
@ -7806,8 +7817,6 @@ pa_asm_output_mi_thunk (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta,
|
||||
ASM_OUTPUT_LABEL (file, label);
|
||||
output_asm_insn (".word P'%0", xoperands);
|
||||
}
|
||||
else if (TARGET_SOM && TARGET_GAS)
|
||||
in_section = NULL;
|
||||
|
||||
current_thunk_number++;
|
||||
nbytes = ((nbytes + FUNCTION_BOUNDARY / BITS_PER_UNIT - 1)
|
||||
@ -9058,27 +9067,39 @@ som_output_text_section_asm_op (const void *data ATTRIBUTE_UNUSED)
|
||||
if (cfun->decl
|
||||
&& DECL_ONE_ONLY (cfun->decl)
|
||||
&& !DECL_WEAK (cfun->decl))
|
||||
output_section_asm_op ("\t.SPACE $TEXT$\n"
|
||||
"\t.NSUBSPA $CODE$,QUAD=0,ALIGN=8,"
|
||||
"ACCESS=44,SORT=24,COMDAT");
|
||||
else
|
||||
output_section_asm_op ("\t.SPACE $TEXT$\n\t.NSUBSPA $CODE$");
|
||||
return;
|
||||
{
|
||||
output_section_asm_op ("\t.SPACE $TEXT$\n"
|
||||
"\t.NSUBSPA $CODE$,QUAD=0,ALIGN=8,"
|
||||
"ACCESS=44,SORT=24,COMDAT");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* There isn't a current function or the body of the current
|
||||
function has been completed. So, we are changing to the
|
||||
text section to output debugging information. Do this in
|
||||
the default text section. We need to forget that we are
|
||||
in the text section so that varasm.c will call us when
|
||||
text_section is selected again. */
|
||||
text section to output debugging information. Thus, we
|
||||
need to forget that we are in the text section so that
|
||||
varasm.c will call us when text_section is selected again. */
|
||||
gcc_assert (!cfun || cfun->machine->in_nsubspa == 2);
|
||||
in_section = NULL;
|
||||
}
|
||||
output_section_asm_op ("\t.SPACE $TEXT$\n\t.NSUBSPA $CODE$");
|
||||
return;
|
||||
}
|
||||
output_section_asm_op ("\t.SPACE $TEXT$\n\t.SUBSPA $CODE$");
|
||||
}
|
||||
|
||||
/* A get_unnamed_section callback for switching to comdat data
|
||||
sections. This function is only used with SOM. */
|
||||
|
||||
static void
|
||||
som_output_comdat_data_section_asm_op (const void *data)
|
||||
{
|
||||
in_section = NULL;
|
||||
output_section_asm_op (data);
|
||||
}
|
||||
|
||||
/* Implement TARGET_ASM_INITIALIZE_SECTIONS */
|
||||
|
||||
static void
|
||||
@ -9097,7 +9118,7 @@ pa_som_asm_init_sections (void)
|
||||
data one-only by creating a new $LIT$ subspace in $TEXT$ with
|
||||
the comdat flag. */
|
||||
som_one_only_readonly_data_section
|
||||
= get_unnamed_section (0, output_section_asm_op,
|
||||
= get_unnamed_section (0, som_output_comdat_data_section_asm_op,
|
||||
"\t.SPACE $TEXT$\n"
|
||||
"\t.NSUBSPA $LIT$,QUAD=0,ALIGN=8,"
|
||||
"ACCESS=0x2c,SORT=16,COMDAT");
|
||||
@ -9106,7 +9127,8 @@ pa_som_asm_init_sections (void)
|
||||
/* When secondary definitions are not supported, SOM makes data one-only
|
||||
by creating a new $DATA$ subspace in $PRIVATE$ with the comdat flag. */
|
||||
som_one_only_data_section
|
||||
= get_unnamed_section (SECTION_WRITE, output_section_asm_op,
|
||||
= get_unnamed_section (SECTION_WRITE,
|
||||
som_output_comdat_data_section_asm_op,
|
||||
"\t.SPACE $PRIVATE$\n"
|
||||
"\t.NSUBSPA $DATA$,QUAD=1,ALIGN=8,"
|
||||
"ACCESS=31,SORT=24,COMDAT");
|
||||
|
Loading…
Reference in New Issue
Block a user