games-emulation/dolphin: fix crash on pie-by-default profiles
authorSergei Trofimovich <slyfox@gentoo.org>
Sun, 22 Jul 2018 20:59:04 +0000 (21:59 +0100)
committerSergei Trofimovich <slyfox@gentoo.org>
Sun, 22 Jul 2018 21:06:31 +0000 (22:06 +0100)
Disable PIE-compatible code generation via CXXFLAGS+=-fno-pie.

Before upstream fix:
https://github.com/dolphin-emu/dolphin/commit/daa03cd1060cc826aca93a1dffc6e94bc6af6d5f
dolphin assumed executable image to be in low addresses (<2GB)
and hardcoded 32-bit absolute addresses during JIT phase.

PIE-compatible code does not have this restriction and
allows mapping binaries above 2GB area (and breaks dolphin's JIT).

Strictly speaking -no-pie (link-time flag) does not or guarantee
or require low address mapping for binary if it was already built
as PIC/PIE.

But -fno-pie imposes additional restrictions on generated code by GCC
and makes -no-pie to take effect.

We don't need this fix for live ebuild.

Closes: https://bugs.gentoo.org/640124
Package-Manager: Portage-2.3.43, Repoman-2.3.10

games-emulation/dolphin/dolphin-5.0.ebuild
games-emulation/dolphin/files/dolphin-5.0-no-pie.patch [new file with mode: 0644]

index 65b49e8a79dec05c92d32a495e45e2ba8c26002e..908b571cf426cabbe04ae804b8e2ca6a1e72b253 100644 (file)
@@ -73,6 +73,7 @@ DEPEND="${RDEPEND}
 PATCHES=(
        "${FILESDIR}"/${P}-CHAR_WIDTH-collision.patch
        "${FILESDIR}"/${P}-xgetbv.patch
+       "${FILESDIR}"/${P}-no-pie.patch
 )
 
 src_prepare() {
diff --git a/games-emulation/dolphin/files/dolphin-5.0-no-pie.patch b/games-emulation/dolphin/files/dolphin-5.0-no-pie.patch
new file mode 100644 (file)
index 0000000..949e42e
--- /dev/null
@@ -0,0 +1,26 @@
+Disable PIE-compatible code generation via -fno-pie.
+
+Before upstream fix:
+https://github.com/dolphin-emu/dolphin/commit/daa03cd1060cc826aca93a1dffc6e94bc6af6d5f
+dolphin assumed executable image to be in low addresses (<2GB)
+and hardcoded 32-bit absolute addresses during JIT phase.
+
+PIE-compatible code does not have this restriction and
+allows mapping binaries above 2GB area (and breaks dolphin's JIT).
+
+Strictly speaking -no-pie (link-time flag) does not or guarantee
+or require low address mapping for binary if it was already built
+as PIC/PIE.
+
+But -fno-pie imposes additional restrictions on generated code by GCC
+and makes -no-pie to take effect.
+Bug: https://bugs.gentoo.org/640124
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -189,4 +189,4 @@ if(NOT ENABLE_GENERIC)
+                       set(_M_X86_64 1)
+-                      add_definitions(-D_M_X86=1 -D_M_X86_64=1 -msse2)
+-                      set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-pie")
++                      add_definitions(-D_M_X86=1 -D_M_X86_64=1 -msse2 -fno-pie)
++                      set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-pie -no-pie")
+               else()