1
0
This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
ZyXEL_PMG5617GA/toolchain/gcc/patches/4.6.2/830-arm-pr48308.patch
2022-11-27 10:16:14 +00:00

91 lines
2.7 KiB
Diff
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=197510
Fix PR48308 for the 4.6 branch.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48308
Bug 48308 - [4.6 Regression] crosscompiling to arm fails with assembler: can't resolve '.LC4' {.rodata.str1.1 section} - '.LPIC4' {*UND* section}
CSP 723931 Bug in GCC-4.6 is preventing compilation of openssl.
--- gcc-4_6-branch-org/gcc/combine.c 2013/04/05 08:10:58 197509
+++ gcc-4_6-branch/gcc/combine.c 2013/04/05 08:31:13 197510
@@ -341,14 +341,14 @@
/* Record one modification to rtl structure
to be undone by storing old_contents into *where. */
-enum undo_kind { UNDO_RTX, UNDO_INT, UNDO_MODE };
+enum undo_kind { UNDO_RTX, UNDO_INT, UNDO_MODE, UNDO_LINKS };
struct undo
{
struct undo *next;
enum undo_kind kind;
union { rtx r; int i; enum machine_mode m; } old_contents;
- union { rtx *r; int *i; } where;
+ union { rtx *r; int *i; } where;
};
/* Record a bunch of changes to be undone, up to MAX_UNDO of them.
@@ -671,7 +671,8 @@
that are perfectly valid, so we'd waste too much effort for
little gain doing the checks here. Focus on catching invalid
transformations involving integer constants. */
- if (GET_MODE_CLASS (GET_MODE (oldval)) == MODE_INT
+ if (oldval
+ && GET_MODE_CLASS (GET_MODE (oldval)) == MODE_INT
&& CONST_INT_P (newval))
{
/* Sanity check that we're replacing oldval with a CONST_INT
@@ -762,6 +763,34 @@
}
#define SUBST_MODE(INTO, NEWVAL) do_SUBST_MODE(&(INTO), (NEWVAL))
+
+#ifndef HAVE_cc0
+
+/* Similar to SUBST, but NEWVAL is a LOG_LINKS expression. */
+
+static void
+do_SUBST_LINK (rtx *into, rtx newval)
+{
+ struct undo *buf;
+ rtx oldval = *into;
+ if (oldval == newval)
+ return;
+
+ if (undobuf.frees)
+ buf = undobuf.frees, undobuf.frees = buf->next;
+ else
+ buf = XNEW (struct undo);
+
+ buf->kind = UNDO_LINKS;
+ buf->where.r = into;
+ buf->old_contents.r = oldval;
+ *into = newval;
+
+ buf->next = undobuf.undos, undobuf.undos = buf;
+}
+
+#define SUBST_LINK(oldval, newval) do_SUBST_LINK (&oldval, newval)
+#endif
/* Subroutine of try_combine. Determine whether the combine replacement
patterns NEWPAT, NEWI2PAT and NEWOTHERPAT are cheaper according to
@@ -2871,6 +2900,7 @@
SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0));
SUBST (XEXP (SET_SRC (PATTERN (i2)), 0),
SET_DEST (PATTERN (i1)));
+ SUBST_LINK (LOG_LINKS (i2), alloc_INSN_LIST (i1, LOG_LINKS (i2)));
}
}
#endif
@@ -4474,6 +4504,11 @@
case UNDO_MODE:
adjust_reg_mode (*undo->where.r, undo->old_contents.m);
break;
+
+ case UNDO_LINKS:
+ *undo->where.r = undo->old_contents.r;
+ break;
+
default:
gcc_unreachable ();
}