diff options
author | Jim Ramsay <lack@gentoo.org> | 2009-07-20 13:54:59 +0000 |
---|---|---|
committer | Jim Ramsay <lack@gentoo.org> | 2009-07-20 13:54:59 +0000 |
commit | 506f535447a74e78a8a9cf92d33d6b29a02e75a3 (patch) | |
tree | ce92cc4c409584fbaaeff9955e1e5688cae14578 /www-plugins/adobe-flash | |
parent | Version bump (diff) | |
download | gentoo-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)
Diffstat (limited to 'www-plugins/adobe-flash')
-rw-r--r-- | www-plugins/adobe-flash/ChangeLog | 9 | ||||
-rw-r--r-- | www-plugins/adobe-flash/adobe-flash-10.0.22.87-r2.ebuild | 197 | ||||
-rw-r--r-- | www-plugins/adobe-flash/files/flashplugin-lahf-fix.c | 29 |
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*)®s[REG_RAX])[1] = ((char*)®s[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; } |