aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <danglin@gcc.gnu.org>2014-04-06 15:17:41 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2014-04-06 15:17:41 +0000
commita9a302d9f272cd36af49ce47863f79ef13eb9c3a (patch)
treec102081e90d2f8b561245f905223d831098460f9
parentcce24f8eee4a7941cd6ba6a3000ab2702828c8fe (diff)
downloadgcc-a9a302d9f272cd36af49ce47863f79ef13eb9c3a.zip
gcc-a9a302d9f272cd36af49ce47863f79ef13eb9c3a.tar.gz
gcc-a9a302d9f272cd36af49ce47863f79ef13eb9c3a.tar.bz2
re PR debug/55794 (FAIL: g++.dg/debug/dwarf2/non-virtual-thunk.C -std=gnu++98 and -std=gnu++11)
PR debug/55794 * config/pa/pa.c (pa_output_function_epilogue): Skip address and code size accounting for thunks. (pa_asm_output_mi_thunk): Use final_start_function() and final_end_function() to output function start and end directives. From-SVN: r209163
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/pa/pa.c20
2 files changed, 15 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index da2eff7..80a39f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2014-04-06 John David Anglin <danglin@gcc.gnu.org>
+
+ PR debug/55794
+ * config/pa/pa.c (pa_output_function_epilogue): Skip address and code
+ size accounting for thunks.
+ (pa_asm_output_mi_thunk): Use final_start_function() and
+ final_end_function() to output function start and end directives.
+
2014-04-05 Pitchumani Sivanupandi <Pitchumani.S@atmel.com>
* config/avr/avr-arch.h (avr_mcu_t): Add dev_attribute field to have device
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index fb698d2..871e4e5 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -4187,13 +4187,17 @@ pa_output_function_epilogue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
if (TARGET_SOM && TARGET_GAS)
{
- /* We done with this subspace except possibly for some additional
+ /* We are 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;
}
+ /* Thunks do their own accounting. */
+ if (cfun->is_thunk)
+ return;
+
if (INSN_ADDRESSES_SET_P ())
{
insn = get_last_nonnote_insn ();
@@ -8259,8 +8263,7 @@ pa_asm_output_mi_thunk (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta,
xoperands[1] = XEXP (DECL_RTL (thunk_fndecl), 0);
xoperands[2] = GEN_INT (delta);
- ASM_OUTPUT_LABEL (file, XSTR (xoperands[1], 0));
- fprintf (file, "\t.PROC\n\t.CALLINFO FRAME=0,NO_CALLS\n\t.ENTRY\n");
+ final_start_function (emit_barrier (), file, 1);
/* Output the thunk. We know that the function is in the same
translation unit (i.e., the same space) as the thunk, and that
@@ -8466,16 +8469,7 @@ 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;
- }
+ final_end_function ();
if (TARGET_SOM && flag_pic && TREE_PUBLIC (function))
{