summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Ramsay <lack@gentoo.org>2009-07-20 13:54:59 +0000
committerJim Ramsay <lack@gentoo.org>2009-07-20 13:54:59 +0000
commit506f535447a74e78a8a9cf92d33d6b29a02e75a3 (patch)
treece92cc4c409584fbaaeff9955e1e5688cae14578
parentVersion bump (diff)
downloadgentoo-2-506f535447a74e78a8a9cf92d33d6b29a02e75a3.tar.gz
gentoo-2-506f535447a74e78a8a9cf92d33d6b29a02e75a3.tar.bz2
gentoo-2-506f535447a74e78a8a9cf92d33d6b29a02e75a3.zip
Bug #268336 continued -> Use Maks Verver's clever sighandler solution to emulate the missing lahf instruction on affected platforms
(Portage version: 2.1.6.13/cvs/Linux x86_64)
-rw-r--r--www-plugins/adobe-flash/ChangeLog9
-rw-r--r--www-plugins/adobe-flash/adobe-flash-10.0.22.87-r2.ebuild197
-rw-r--r--www-plugins/adobe-flash/files/flashplugin-lahf-fix.c29
3 files changed, 234 insertions, 1 deletions
diff --git a/www-plugins/adobe-flash/ChangeLog b/www-plugins/adobe-flash/ChangeLog
index 3d19a33c52e0..6aed8071cec8 100644
--- a/www-plugins/adobe-flash/ChangeLog
+++ b/www-plugins/adobe-flash/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for www-plugins/adobe-flash
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/ChangeLog,v 1.3 2009/07/15 15:29:32 arfrever Exp $
+# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/ChangeLog,v 1.4 2009/07/20 13:54:59 lack Exp $
+
+*adobe-flash-10.0.22.87-r2 (20 Jul 2009)
+
+ 20 Jul 2009; Jim Ramsay <lack@gentoo.org>
+ +adobe-flash-10.0.22.87-r2.ebuild, +files/flashplugin-lahf-fix.c:
+ Bug #268336 continued -> Use Maks Verver's clever sighandler solution to
+ emulate the missing lahf instruction on affected platforms
15 Jul 2009; Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
adobe-flash-10.0.22.87-r1.ebuild:
diff --git a/www-plugins/adobe-flash/adobe-flash-10.0.22.87-r2.ebuild b/www-plugins/adobe-flash/adobe-flash-10.0.22.87-r2.ebuild
new file mode 100644
index 000000000000..04a72487baf9
--- /dev/null
+++ b/www-plugins/adobe-flash/adobe-flash-10.0.22.87-r2.ebuild
@@ -0,0 +1,197 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/adobe-flash-10.0.22.87-r2.ebuild,v 1.1 2009/07/20 13:54:59 lack Exp $
+
+EAPI=1
+inherit nsplugins rpm multilib
+
+MY_32B_URI="http://fpdownload.macromedia.com/get/flashplayer/current/flash-plugin-${PV}-release.i386.rpm"
+MY_64B_URI="http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-${PV}.linux-x86_64.so.tar.gz"
+
+DESCRIPTION="Adobe Flash Player"
+SRC_URI="x86? ( ${MY_32B_URI} )
+amd64? (
+ multilib? (
+ 32bit? ( ${MY_32B_URI} mirror://gentoo/flash-libcompat-0.2.tar.bz2 )
+ 64bit? ( ${MY_64B_URI} )
+ )
+ !multilib? ( ${MY_64B_URI} )
+)"
+HOMEPAGE="http://www.adobe.com/"
+IUSE="multilib +32bit +64bit"
+SLOT="0"
+
+KEYWORDS="-* ~amd64 ~x86"
+LICENSE="AdobeFlash-10"
+RESTRICT="strip mirror"
+
+S="${WORKDIR}"
+
+NATIVE_DEPS="x11-libs/gtk+:2
+ media-libs/fontconfig
+ dev-libs/nss
+ net-misc/curl
+ >=sys-libs/glibc-2.4
+ || ( media-fonts/freefont-ttf media-fonts/corefonts )"
+
+EMUL_DEPS="app-emulation/emul-linux-x86-baselibs
+ app-emulation/emul-linux-x86-gtklibs
+ app-emulation/emul-linux-x86-soundlibs
+ app-emulation/emul-linux-x86-xlibs"
+
+RDEPEND="x86? ( $NATIVE_DEPS )
+ amd64? (
+ multilib? (
+ 64bit? ( $NATIVE_DEPS )
+ 32bit? ( $EMUL_DEPS )
+ )
+ !multilib? ( $NATIVE_DEPS )
+ )"
+
+# Our new flash-libcompat suffers from the same EXESTACK problem as libcrypto
+# from app-text/acroread, so tell QA to ignore it.
+# Apparently the flash library itself also suffers from this issue
+QA_EXECSTACK="opt/flash-libcompat/libcrypto.so.0.9.7
+ opt/netscape/plugins32/libflashplayer.so
+ opt/netscape/plugins/libflashplayer.so"
+
+QA_DT_HASH="opt/flash-libcompat/lib.*
+ opt/netscape/plugins32/libflashplayer.so
+ opt/netscape/plugins/libflashplayer.so"
+
+pkg_setup() {
+ if use x86; then
+ export native_install=1
+ elif use amd64; then
+ # amd64 users may unselect the native 64bit binary, if they choose
+ if ! use multilib || use 64bit; then
+ export native_install=1
+ # 64bit flash requires the 'lahf' instruction (bug #268336)
+ if ! grep -q lahf_lm /proc/cpuinfo; then
+ export need_lahf_wrapper=1
+ else
+ unset need_lahf_wrapper
+ fi
+ else
+ unset native_install
+ fi
+
+ if use multilib && ! use 32bit && ! use 64bit; then
+ eerror "You must select at least one library USE flag (32bit or 64bit)"
+ die "No library version selected [-32bit -64bit]"
+ fi
+ fi
+}
+
+src_compile() {
+ if [[ $need_lahf_wrapper ]]; then
+ # This experimental wrapper, from Maks Verver via bug #268336 should
+ # emulate the missing lahf instruction affected platforms.
+ cc -fPIC -shared -nostdlib -lc -oflashplugin-lahf-fix.so \
+ "${FILESDIR}/flashplugin-lahf-fix.c" \
+ || die "Compile of flashplugin-lahf-fix.so failed"
+ fi
+}
+
+src_install() {
+ if [[ $native_install ]]; then
+ # 32b RPM has things hidden in funny places
+ use x86 && pushd "${S}/usr/lib/flash-plugin"
+
+ exeinto /opt/netscape/plugins
+ doexe libflashplayer.so
+ inst_plugin /opt/netscape/plugins/libflashplayer.so
+
+ use x86 && popd
+
+ # 64b tarball has no readme file.
+ use x86 && dodoc "${S}/usr/share/doc/flash-plugin-${PV}/readme.txt"
+ fi
+
+ if [[ $need_lahf_wrapper ]]; then
+ # This experimental wrapper, from Maks Verver via bug #268336 should
+ # emulate the missing lahf instruction affected platforms.
+ exeinto /opt/netscape/plugins
+ doexe flashplugin-lahf-fix.so
+ inst_plugin /opt/netscape/plugins/flashplugin-lahf-fix.so
+ fi
+
+ if use amd64 && has_multilib_profile && use 32bit; then
+ oldabi="${ABI}"
+ ABI="x86"
+
+ # 32b plugin
+ pushd "${S}/usr/lib/flash-plugin"
+ exeinto /opt/netscape/plugins32/
+ doexe libflashplayer.so
+ inst_plugin /opt/netscape/plugins32/libflashplayer.so
+ dodoc "${S}/usr/share/doc/flash-plugin-${PV}/readme.txt"
+ popd
+
+ # 32b library compatibility:
+ #
+ # libcurl and libnss are not currently available in any emul-linux-x86
+ # packages, so for amd64 we provide these snarfed out of other binary
+ # packages. libcurl and its ssl dependencies come from
+ # app-text/acroread; libnss and its friends come from
+ # net-libs/xulrunner-bin
+ exeinto /opt/flash-libcompat
+ pushd "${WORKDIR}/flash-libcompat-0.2/"
+ doexe *
+ popd
+ echo 'LDPATH="/opt/flash-libcompat"' > 99flash-libcompat
+ doenvd 99flash-libcompat
+
+ ABI="${oldabi}"
+ fi
+
+ # The magic config file!
+ insinto "/etc/adobe"
+ doins "${FILESDIR}/mms.cfg"
+}
+
+pkg_postinst() {
+ if use amd64; then
+ if has_version 'www-plugins/nspluginwrapper'; then
+ if [[ $native_install ]]; then
+ # TODO: Perhaps parse the output of 'nspluginwrapper -l'
+ # However, the 64b flash plugin makes 'nspluginwrapper -l' segfault.
+ local FLASH_WRAPPER="${ROOT}/usr/lib64/nsbrowser/plugins/npwrapper.libflashplayer.so"
+ if [[ -f ${FLASH_WRAPPER} ]]; then
+ einfo "Removing duplicate 32-bit plugin wrapper: Native 64-bit plugin installed"
+ nspluginwrapper -r "${FLASH_WRAPPER}"
+ fi
+ if [[ $need_lahf_wrapper ]]; then
+ ewarn "Your processor does not support the 'lahf' instruction which is used"
+ ewarn "by Adobe's 64-bit flash binary. We have installed a wrapper which"
+ ewarn "should allow this plugin to run. If you encounter problems, please"
+ ewarn "adjust your USE flags to install only the 32-bit version and reinstall:"
+ ewarn " ${CATEGORY}/$PN[+32bit -64bit]"
+ fi
+ else
+ oldabi="${ABI}"
+ ABI="x86"
+ local FLASH_SOURCE="${ROOT}/usr/$(get_libdir)/${PLUGINS_DIR}/libflashplayer.so"
+
+ einfo "nspluginwrapper detected: Installing plugin wrapper"
+ nspluginwrapper -i "${FLASH_SOURCE}"
+
+ ABI="${oldabi}"
+ fi
+ elif [[ ! $native_install ]]; then
+ einfo "To use the 32-bit flash player in a native 64-bit firefox,"
+ einfo "you must install www-plugins/nspluginwrapper"
+ fi
+ fi
+
+ ewarn "Flash player is closed-source, with a long history of security"
+ ewarn "issues. Please consider only running flash applets you know to"
+ ewarn "be safe. The 'flashblock' extension may help for mozilla users:"
+ ewarn " https://addons.mozilla.org/en-US/firefox/addon/433"
+
+ if has_version 'kde-base/konqueror'; then
+ elog "Konqueror users - You may need to follow the instructions here:"
+ elog " http://www.gentoo.org/proj/en/desktop/kde/kde-flash.xml"
+ elog "For flash to work with your browser."
+ fi
+}
diff --git a/www-plugins/adobe-flash/files/flashplugin-lahf-fix.c b/www-plugins/adobe-flash/files/flashplugin-lahf-fix.c
new file mode 100644
index 000000000000..9338b7337317
--- /dev/null
+++ b/www-plugins/adobe-flash/files/flashplugin-lahf-fix.c
@@ -0,0 +1,29 @@
+/* Simple work-around for running the 64-bit Adobe Flash plug-in version 10
+ on Athlon64 processors without support for the lahf instruction.
+
+Compile with:
+cc -fPIC -shared -nostdlib -lc -oflashplugin-lahf-fix.so flashplugin-lahf-fix.c
+Then place the .so file in the plug-in directory (e.g. $HOME/.mozilla/plugins)
+or use LD_PRELOAD to force Firefox to load the library.
+
+ - Maks Verver <maksverver@geocities.com> July 2009 */
+
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <signal.h>
+#include <ucontext.h>
+
+static void sig_handler(int signal, siginfo_t *info, void *context) {
+ if (signal != SIGILL) return;
+ if (*(char*)info->si_addr != (char)0x9f) abort();
+ greg_t *regs = ((ucontext_t*)context)->uc_mcontext.gregs;
+ ((char*)&regs[REG_RAX])[1] = ((char*)&regs[REG_EFL])[0];
+ regs[REG_RIP]++;
+}
+
+static struct sigaction old_sa, new_sa = {
+ .sa_flags = SA_SIGINFO,
+ .sa_sigaction = &sig_handler };
+
+int _init() { sigaction(SIGILL, &new_sa, &old_sa); return 0; }
+int _fini() { sigaction(SIGILL, &old_sa, &new_sa); return 0; }