Hi,
The attached patch fixes PR48203 for ARM by not splitting the call from
it's call_arg_location note while emitting literal pools. This is
similar to the patch for s390 and I notice one for sh that fixes a
similar issue.
The other patch in the audit trail by Jakub is needed to fix up the
issue with ICE in mem_loc_descriptor which also shows up in the
testsuite runs if the attached patch is tested alone.
Committed after testruns on qemu using cross-builds on armv7-a and
verifying that bootstrap is restored.
cheers
Ramana
2011-03-20 Ramana Radhakrishnan <ramana.radhakrish...@linaro.org>
PR debug/48023
* config/arm/arm.c (create_fix_barrier): Do not emit a minipool
between a call and its CALL_ARG_LOCATION note.
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c (revision 171192)
+++ gcc/config/arm/arm.c (working copy)
@@ -12022,6 +12022,16 @@
/* Make sure that we found a place to insert the jump. */
gcc_assert (selected);
+ /* Make sure we do not split a call and its corresponding
+ CALL_ARG_LOCATION note. */
+ if (CALL_P (selected))
+ {
+ rtx next = NEXT_INSN (selected);
+ if (next && NOTE_P (next)
+ && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION)
+ selected = next;
+ }
+
/* Create a new JUMP_INSN that branches around a barrier. */
from = emit_jump_insn_after (gen_jump (label), selected);
JUMP_LABEL (from) = label;