diff options
author | Patrick Williams <patrick@stwcx.xyz> | 2015-09-15 22:41:29 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2015-09-15 22:41:29 +0300 |
commit | 21f9b84b4b729fbd7acbd465e7a3f726e4d20f91 (patch) | |
tree | eb2d091d427ca0813b445509d59cc8e27e8ad25f /yocto-poky/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch | |
parent | 101cef31e2bf54c678501155cd2106251acbd076 (diff) | |
parent | c124f4f2e04dca16a428a76c89677328bc7bf908 (diff) | |
download | openbmc-21f9b84b4b729fbd7acbd465e7a3f726e4d20f91.tar.xz |
Merge commit 'c124f4f2e04dca16a428a76c89677328bc7bf908' as 'yocto-poky'
Diffstat (limited to 'yocto-poky/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch')
-rw-r--r-- | yocto-poky/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/yocto-poky/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch b/yocto-poky/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch new file mode 100644 index 000000000..d442ba8a8 --- /dev/null +++ b/yocto-poky/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch @@ -0,0 +1,113 @@ +From ca03cf1b133d66eb978c68f6dbc345e9aabcba88 Mon Sep 17 00:00:00 2001 +From: uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Mon, 30 Jun 2014 19:30:52 +0000 +Subject: [PATCH] r212171 + +* except.c (emit_note_eh_region_end): New helper + function. (convert_to_eh_region_ranges): Use + emit_note_eh_region_end to emit EH_REGION_END note. + * jump.c (cleanup_barriers): Do not split a call and its + corresponding CALL_ARG_LOCATION note. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212171 138bc75d-0d04-0410-961f-82ee72b054a4 + +Upstream-Status: Backport [https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=212171] +Signed-off-by: Baoshan Pang <baoshan.pang@windriver.com> +--- + gcc/except.c | 23 ++++++++++++++++++----- + gcc/jump.c | 19 +++++++++++++++---- + 2 files changed, 33 insertions(+), 9 deletions(-) + +diff --git a/gcc/except.c b/gcc/except.c +index dc5c1d2..7ac114f 100644 +--- a/gcc/except.c ++++ b/gcc/except.c +@@ -2466,6 +2466,20 @@ add_call_site (rtx landing_pad, int action, int section) + return call_site_base + crtl->eh.call_site_record_v[section]->length () - 1; + } + ++static rtx ++emit_note_eh_region_end (rtx insn) ++{ ++ rtx next = NEXT_INSN (insn); ++ ++ /* Make sure we do not split a call and its corresponding ++ CALL_ARG_LOCATION note. */ ++ if (next && NOTE_P (next) ++ && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) ++ insn = next; ++ ++ return emit_note_after (NOTE_INSN_EH_REGION_END, insn); ++} ++ + /* Turn REG_EH_REGION notes back into NOTE_INSN_EH_REGION notes. + The new note numbers will not refer to region numbers, but + instead to call site entries. */ +@@ -2544,8 +2558,8 @@ convert_to_eh_region_ranges (void) + note = emit_note_before (NOTE_INSN_EH_REGION_BEG, + first_no_action_insn_before_switch); + NOTE_EH_HANDLER (note) = call_site; +- note = emit_note_after (NOTE_INSN_EH_REGION_END, +- last_no_action_insn_before_switch); ++ note ++ = emit_note_eh_region_end (last_no_action_insn_before_switch); + NOTE_EH_HANDLER (note) = call_site; + gcc_assert (last_action != -3 + || (last_action_insn +@@ -2569,8 +2583,7 @@ convert_to_eh_region_ranges (void) + first_no_action_insn = NULL_RTX; + } + +- note = emit_note_after (NOTE_INSN_EH_REGION_END, +- last_action_insn); ++ note = emit_note_eh_region_end (last_action_insn); + NOTE_EH_HANDLER (note) = call_site; + } + +@@ -2617,7 +2630,7 @@ convert_to_eh_region_ranges (void) + + if (last_action >= -1 && ! first_no_action_insn) + { +- note = emit_note_after (NOTE_INSN_EH_REGION_END, last_action_insn); ++ note = emit_note_eh_region_end (last_action_insn); + NOTE_EH_HANDLER (note) = call_site; + } + +diff --git a/gcc/jump.c b/gcc/jump.c +index 9418f65..a5e5f52 100644 +--- a/gcc/jump.c ++++ b/gcc/jump.c +@@ -121,15 +121,26 @@ rebuild_jump_labels_chain (rtx chain) + static unsigned int + cleanup_barriers (void) + { +- rtx insn, next, prev; +- for (insn = get_insns (); insn; insn = next) ++ rtx insn; ++ for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + { +- next = NEXT_INSN (insn); + if (BARRIER_P (insn)) + { +- prev = prev_nonnote_insn (insn); ++ rtx prev = prev_nonnote_insn (insn); + if (!prev) + continue; ++ ++ if (CALL_P (prev)) ++ { ++ /* Make sure we do not split a call and its corresponding ++ CALL_ARG_LOCATION note. */ ++ rtx next = NEXT_INSN (prev); ++ ++ if (NOTE_P (next) ++ && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) ++ prev = next; ++ } ++ + if (BARRIER_P (prev)) + delete_insn (insn); + else if (prev != PREV_INSN (insn)) +-- +1.7.9.5 + |