diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2018-06-10 11:31:39 +0100 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2018-06-10 11:31:51 +0100 |
commit | 3e1ae2cc5e50abb42aa264893d64a05fcb4341a6 (patch) | |
tree | dd572210cb8b945385ae57bd834523cdc470f764 /dev-lang | |
parent | sys-cluster/slurm: Disable ld.gold, bug filed upstream (diff) | |
download | gentoo-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.patch | 65 |
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 + |