diff options
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch')
-rw-r--r-- | toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch new file mode 100644 index 0000000000..12c578c2b4 --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch @@ -0,0 +1,61 @@ +2011-08-18 Richard Sandiford <richard.sandiford@linaro.org> + + gcc/ + Backport from mainline: + + 2011-08-12 Richard Sandiford <rdsandiford@googlemail.com> + + * config/arm/arm.c (get_label_padding): New function. + (create_fix_barrier, arm_reorg): Use it. + +=== modified file 'gcc/config/arm/arm.c' +--- old/gcc/config/arm/arm.c 2011-07-04 14:03:49 +0000 ++++ new/gcc/config/arm/arm.c 2011-08-12 08:08:31 +0000 +@@ -11769,6 +11769,19 @@ + return 0; + } + ++/* Return the maximum amount of padding that will be inserted before ++ label LABEL. */ ++ ++static HOST_WIDE_INT ++get_label_padding (rtx label) ++{ ++ HOST_WIDE_INT align, min_insn_size; ++ ++ align = 1 << label_to_alignment (label); ++ min_insn_size = TARGET_THUMB ? 2 : 4; ++ return align > min_insn_size ? align - min_insn_size : 0; ++} ++ + /* Move a minipool fix MP from its current location to before MAX_MP. + If MAX_MP is NULL, then MP doesn't need moving, but the addressing + constraints may need updating. */ +@@ -12315,8 +12328,12 @@ + within range. */ + gcc_assert (GET_CODE (from) != BARRIER); + +- /* Count the length of this insn. */ +- count += get_attr_length (from); ++ /* Count the length of this insn. This must stay in sync with the ++ code that pushes minipool fixes. */ ++ if (LABEL_P (from)) ++ count += get_label_padding (from); ++ else ++ count += get_attr_length (from); + + /* If there is a jump table, add its length. */ + tmp = is_jump_table (from); +@@ -12736,6 +12753,11 @@ + insn = table; + } + } ++ else if (LABEL_P (insn)) ++ /* Add the worst-case padding due to alignment. We don't add ++ the _current_ padding because the minipool insertions ++ themselves might change it. */ ++ address += get_label_padding (insn); + } + + fix = minipool_fix_head; + |