aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch')
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch b/meta-oe/recipes-devtools/gcc/gcc-4.6/linaro/gcc-4.6-linaro-r106792.patch
new file mode 100644
index 0000000000..12c578c2b4
--- /dev/null
+++ b/meta-oe/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;
+