diff options
author | Jim Ramsay <lack@gentoo.org> | 2011-02-17 20:43:29 +0000 |
---|---|---|
committer | Jim Ramsay <lack@gentoo.org> | 2011-02-17 20:43:29 +0000 |
commit | 7313989e44599fcda8c1303c7406b62b0805e710 (patch) | |
tree | 7cf74ba9cfd7959d32ad6abd9de785cffa2a7ad0 /www-plugins/adobe-flash | |
parent | Version bump, remove old (diff) | |
download | gentoo-2-7313989e44599fcda8c1303c7406b62b0805e710.tar.gz gentoo-2-7313989e44599fcda8c1303c7406b62b0805e710.tar.bz2 gentoo-2-7313989e44599fcda8c1303c7406b62b0805e710.zip |
Bug #354073: Patch 64-bit flash to fix memcpy issue with glibc-2.13
(Portage version: 2.1.9.34/cvs/Linux i686)
Diffstat (limited to 'www-plugins/adobe-flash')
-rw-r--r-- | www-plugins/adobe-flash/ChangeLog | 8 | ||||
-rw-r--r-- | www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild | 216 | ||||
-rw-r--r-- | www-plugins/adobe-flash/files/memcpy-to-memmove.sh | 40 |
3 files changed, 263 insertions, 1 deletions
diff --git a/www-plugins/adobe-flash/ChangeLog b/www-plugins/adobe-flash/ChangeLog index ef77dd27156f..9952cb064ede 100644 --- a/www-plugins/adobe-flash/ChangeLog +++ b/www-plugins/adobe-flash/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for www-plugins/adobe-flash # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/ChangeLog,v 1.64 2011/02/13 00:58:41 fauli Exp $ +# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/ChangeLog,v 1.65 2011/02/17 20:43:29 lack Exp $ + +*adobe-flash-10.2.152.27_p201011173-r2 (17 Feb 2011) + + 17 Feb 2011; Jim Ramsay <lack@gentoo.org> + +adobe-flash-10.2.152.27_p201011173-r2.ebuild, +files/memcpy-to-memmove.sh: + Bug #354073: Patch 64-bit flash to fix memcpy issue with glibc-2.13 13 Feb 2011; Christian Faulhammer <fauli@gentoo.org> adobe-flash-10.2.152.27.ebuild: diff --git a/www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild b/www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild new file mode 100644 index 000000000000..1cb070946ba9 --- /dev/null +++ b/www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild @@ -0,0 +1,216 @@ +# Copyright 1999-2011 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.2.152.27_p201011173-r2.ebuild,v 1.1 2011/02/17 20:43:29 lack Exp $ + +EAPI=3 +inherit rpm nsplugins multilib toolchain-funcs versionator + +# Note: There is no "square" for 32-bit! Just use the current 32-bit release: +PV_REL=$(get_version_component_range 1-4) +MY_32B_URI="http://fpdownload.macromedia.com/get/flashplayer/current/flash-plugin-${PV_REL}-release.i386.rpm" + +# Specal version parsing for date-based 'square' releases +# For proper date ordering in the ebuild we are using CCYYMMDD, whereas Adobe +# uses MMDDYY in their filename. Plus we tack on the release number, too. +EBUILD_DATE=$(get_version_component_range $(get_version_component_count)) +DATE_SUFFIX=${EBUILD_DATE: -5:4}${EBUILD_DATE:3:2} +REL_SUFFIX=${EBUILD_DATE: -1} +MY_64B_URI="http://download.macromedia.com/pub/labs/flashplayer10/flashplayer10_2_p${REL_SUFFIX}_64bit_linux_${DATE_SUFFIX}.tar.gz" + +DESCRIPTION="Adobe Flash Player" +SRC_URI="x86? ( ${MY_32B_URI} ) +amd64? ( + multilib? ( + 32bit? ( ${MY_32B_URI} ) + 64bit? ( ${MY_64B_URI} ) + ) + !multilib? ( ${MY_64B_URI} ) +)" +#HOMEPAGE="http://www.adobe.com/" +HOMEPAGE="http://labs.adobe.com/technologies/flashplayer10/" +IUSE="multilib nspluginwrapper +32bit +64bit vdpau bindist" +SLOT="0" + +KEYWORDS="-* ~amd64 ~x86" +LICENSE="AdobeFlash-10.1" +RESTRICT="strip mirror" + +S="${WORKDIR}" + +NATIVE_DEPS="x11-libs/gtk+:2 + media-libs/fontconfig + dev-libs/nss + net-misc/curl + 32bit? ( vdpau? ( x11-libs/libvdpau ) ) + >=sys-libs/glibc-2.4" + +EMUL_DEPS="vdpau? ( >=app-emulation/emul-linux-x86-xlibs-20110129 ) + >=app-emulation/emul-linux-x86-gtklibs-20100409-r1 + app-emulation/emul-linux-x86-soundlibs" + +DEPEND="amd64? ( multilib? ( 32bit? ( nspluginwrapper? ( + www-plugins/nspluginwrapper ) ) ) )" +RDEPEND="x86? ( $NATIVE_DEPS ) + amd64? ( + multilib? ( + 64bit? ( $NATIVE_DEPS ) + 32bit? ( $EMUL_DEPS ) + ) + !multilib? ( $NATIVE_DEPS ) + ) + || ( media-fonts/liberation-fonts media-fonts/corefonts ) + ${DEPEND}" + +# Where should this all go? (Bug #328639) +INSTALL_BASE="opt/Adobe/flash-player" + +# Ignore QA warnings in these binary closed-source libraries, since we can't fix +# them: +QA_EXECSTACK="${INSTALL_BASE}32/libflashplayer.so + ${INSTALL_BASE}/libflashplayer.so" + +QA_DT_HASH="${INSTALL_BASE}32/libflashplayer.so + ${INSTALL_BASE}/libflashplayer.so" + +pkg_setup() { + einfo "Date is $EBUILD_DATE suffix is $DATE_SUFFIX" + 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 + else + unset native_install + fi + + if use multilib && use 32bit; then + export amd64_32bit=1 + else + unset amd64_32bit + fi + + if use multilib && ! use 32bit && ! use 64bit; then + eerror "You must select at least one architecture USE flag (32bit or 64bit)" + die "No library version selected [-32bit -64bit]" + fi + + unset need_lahf_wrapper + if [[ $native_install ]]; then + # 64bit flash requires the 'lahf' instruction (bug #268336) + # Also, check if *any* of the processors are affected (bug #286159) + if grep '^flags' /proc/cpuinfo | grep -qv 'lahf_lm'; then + export need_lahf_wrapper=1 + fi + + if use vdpau; then + ewarn "You have tried to enable VDPAU acceleration, but this is only" + ewarn "available for the 32-bit flash plugin at this time." + ewarn "Continuing with an unaccelerated 64-bit plugin." + if [[ $amd64_32bit ]]; then + ewarn "The 32-bit plugin will be accelerated." + fi + fi + 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. + $(tc-getCC) -fPIC -shared -nostdlib -lc -oflashplugin-lahf-fix.so \ + "${FILESDIR}/flashplugin-lahf-fix.c" \ + || die "Compile of flashplugin-lahf-fix.so failed" + fi + if use amd64 && ! use bindist && [[ $native_install ]]; then + # Bug #354073: Patch binary to use memmove instead of memcpy from + # Redhat's bug https://bugzilla.redhat.com/show_bug.cgi?id=638477#c94 + cp libflashplayer.so libflashplayer.so.orig + sh "${FILESDIR}/memcpy-to-memmove.sh" libflashplayer.so \ + || die "memcpy-to-memmove.sh failed" + fi + # TODO: Apparently changing memcpy to memmove helps the 32-bit plugin too... +} + +src_install() { + if [[ $native_install ]]; then + # 32b RPM has things hidden in funny places + use x86 && pushd "${S}/usr/lib/flash-plugin" + + exeinto /${INSTALL_BASE} + doexe libflashplayer.so + inst_plugin /${INSTALL_BASE}/libflashplayer.so + + use x86 && popd + + # 64b tarball has no readme file. + use x86 && dodoc "${S}/usr/share/doc/flash-plugin-${PV_REL}/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 /${INSTALL_BASE} + doexe flashplugin-lahf-fix.so + inst_plugin /${INSTALL_BASE}/flashplugin-lahf-fix.so + fi + + if [[ $amd64_32bit ]]; then + local oldabi="${ABI}" + ABI="x86" + + # 32b plugin + pushd "${S}/usr/lib/flash-plugin" + exeinto /${INSTALL_BASE}32 + doexe libflashplayer.so + inst_plugin /${INSTALL_BASE}32/libflashplayer.so + popd + + ABI="${oldabi}" + fi + + # The magic config file! + insinto "/etc/adobe" + doins "${FILESDIR}/mms.cfg" +} + +pkg_postinst() { + if use amd64; then + 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]" + elog + fi + 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 + else + einfo "nspluginwrapper detected: Installing plugin wrapper" + local oldabi="${ABI}" + ABI="x86" + local FLASH_SOURCE="${ROOT}/${INSTALL_BASE}32/libflashplayer.so" + nspluginwrapper -i "${FLASH_SOURCE}" + ABI="${oldabi}" + fi + elif [[ ! $native_install ]]; then + elog "To use the 32-bit flash player in a native 64-bit browser," + elog "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" +} diff --git a/www-plugins/adobe-flash/files/memcpy-to-memmove.sh b/www-plugins/adobe-flash/files/memcpy-to-memmove.sh new file mode 100644 index 000000000000..b1632e583484 --- /dev/null +++ b/www-plugins/adobe-flash/files/memcpy-to-memmove.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# Quick and dirty, but inefficient shellscript that +# turns all memcpy calls into memmove calls +# From Ray Strode + +set -e + +INPUT="$1" + +MEMCPY=0x$(objdump -S -j .plt $INPUT | grep memcpy |awk '{ print $1 }') +[ $MEMCPY = "0x" ] && echo "Can't find memcpy call in $INPUT PLT" 1>&2 && exit 1 + +MEMMOVE=0x$(objdump -S -j .plt $INPUT | grep memmove |awk '{ print $1 }') +[ $MEMMOVE = "0x" ] && echo "Can't find memmove call in $INPUT PLT" 1>&2 && exit 2 + +DELTA=$(($MEMMOVE - $MEMCPY)) +MEMCPY="$(printf '%x' $MEMCPY)" + +TEMP_OUTPUT="$(mktemp)" +trap "rm -f $TEMP_OUTPUT" ERR + +cp $INPUT $TEMP_OUTPUT +objdump -S -j .text $INPUT | while read offset e8 byte1 byte2 byte3 byte4 call call_offset rest; do + test "$call_offset" = "$MEMCPY" || continue; + + OFFSET=$(printf "0x%x" $((0x${offset%:} + 1))) + NUMBER="0x${byte4}${byte3}${byte2}${byte1}" + echo -n "Changing call at offset $OFFSET from [${byte1} ${byte2} ${byte3} ${byte4}]" + NUMBER=$(printf "0x%08x" $(($NUMBER + $DELTA))) + + BYTE1=$(printf "%02x" $((($NUMBER >> 24) & 0xff))) + BYTE2=$(printf "%02x" $((($NUMBER >> 16) & 0xff))) + BYTE3=$(printf "%02x" $((($NUMBER >> 8) & 0xff))) + BYTE4=$(printf "%02x" $((($NUMBER >> 0) & 0xff))) + + echo " to [${BYTE4} ${BYTE3} ${BYTE2} ${BYTE1}]" + echo -ne "\x$BYTE4\x$BYTE3\x$BYTE2\x$BYTE1" | dd of=$TEMP_OUTPUT bs=1 seek=$(($OFFSET)) count=4 conv=notrunc 2> /dev/null +done + +mv $TEMP_OUTPUT $INPUT |