summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2018-06-10 11:31:39 +0100
committerSergei Trofimovich <slyfox@gentoo.org>2018-06-10 11:31:51 +0100
commit3e1ae2cc5e50abb42aa264893d64a05fcb4341a6 (patch)
treedd572210cb8b945385ae57bd834523cdc470f764 /dev-lang
parentsys-cluster/slurm: Disable ld.gold, bug filed upstream (diff)
downloadgentoo-3e1ae2cc5e50abb42aa264893d64a05fcb4341a6.tar.gz
gentoo-3e1ae2cc5e50abb42aa264893d64a05fcb4341a6.tar.bz2
gentoo-3e1ae2cc5e50abb42aa264893d64a05fcb4341a6.zip
dev-lang/ghc: restore missing binutils-2.13 patch
Reported-by: Toralf Förster Closes: https://bugs.gentoo.org/657712 Package-Manager: Portage-2.3.40, Repoman-2.3.9
Diffstat (limited to 'dev-lang')
-rw-r--r--dev-lang/ghc/files/ghc-8.0.2-binutils-2.30.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/dev-lang/ghc/files/ghc-8.0.2-binutils-2.30.patch b/dev-lang/ghc/files/ghc-8.0.2-binutils-2.30.patch
new file mode 100644
index 000000000000..f02cb238c6b9
--- /dev/null
+++ b/dev-lang/ghc/files/ghc-8.0.2-binutils-2.30.patch
@@ -0,0 +1,65 @@
+From 358b508051333882d4099acca8f269e6fb2b7d65 Mon Sep 17 00:00:00 2001
+From: Bertram Felgenhauer <int-e@gmx.de>
+Date: Thu, 3 May 2018 18:03:53 +0300
+Subject: [PATCH] Compute DW_FORM_block length correctly; also fixes #15068
+
+Before this patch, the pprUnwindwExpr function computed the length of
+by the following assembly fragment:
+
+ .uleb128 1f-.-1
+ <expression data>
+1:
+
+That is, to compute the length, it takes the difference of the label 1
+and the address of the .uleb128 directive, and subtracts 1.
+
+In #15068 it was reported that `as` from binutils 4.30 has trouble with
+evaluating the `.` part of the expression. However, there is actually a
+problem with the expression, if the length of the data ever becomes
+larger than 128: In that case, the .uleb128 directive will emit more
+than 1 byte, and the computed length will be wrong.
+
+The present patch changes the assembly fragment to use two labels,
+which fixes both these problems.
+
+ .uleb128 2f-1f
+1:
+ <expression data>
+2:
+
+Test Plan: validate
+
+Reviewers: bgamari, osa1
+
+Reviewed By: bgamari
+
+Subscribers: thomie, carter
+
+GHC Trac Issues: #15068
+
+Differential Revision: https://phabricator.haskell.org/D4654
+---
+ compiler/nativeGen/Dwarf/Types.hs | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/compiler/nativeGen/Dwarf/Types.hs b/compiler/nativeGen/Dwarf/Types.hs
+index 23a2c920e7..579ed0d256 100644
+--- a/compiler/nativeGen/Dwarf/Types.hs
++++ b/compiler/nativeGen/Dwarf/Types.hs
+@@ -492,9 +492,11 @@ pprUnwindExpr spIsCFA expr
+ pprE (UwPlus u1 u2) = pprE u1 $$ pprE u2 $$ pprByte dW_OP_plus
+ pprE (UwMinus u1 u2) = pprE u1 $$ pprE u2 $$ pprByte dW_OP_minus
+ pprE (UwTimes u1 u2) = pprE u1 $$ pprE u2 $$ pprByte dW_OP_mul
+- in text "\t.uleb128 1f-.-1" $$ -- DW_FORM_block length
++ in text "\t.uleb128 2f-1f" $$ -- DW_FORM_block length
++ -- computed as the difference of the following local labels 2: and 1:
++ text "1:" $$
+ pprE expr $$
+- text "1:"
++ text "2:"
+
+ -- | Generate code for re-setting the unwind information for a
+ -- register to @undefined@
+--
+2.17.0
+