Source: iceweasel Version: 6.0-2 Severity: important Tags: patch iceweasel fails to build from source on s390x for two reasons. First a case is missing to detect s390x as a 64-bit platform, and secondly because JavaScript is broken on 64-bit big-endian, causing hangs in the testsuite. The patch below addresses both this issues.
The first part is almost trivial, the only things to know is that __s390__ matches both s390 and s390x, so __s390x__ has to be placed first. The second part is more complex, so I have added an explanation at the top of the patch, and report the issue upstream: https://bugzilla.mozilla.org/show_bug.cgi?id=680652 Would it be possible to include this patch in the next upload? Thanks in advance. diff -Nru iceweasel-6.0/debian/patches/porting/Add-mips-hppa-ia64-s390-and-sparc-defines-in-ipc-chr.patch iceweasel-6.0/debian/patches/porting/Add-mips-hppa-ia64-s390-and-sparc-defines-in-ipc-chr.patch --- iceweasel-6.0/debian/patches/porting/Add-mips-hppa-ia64-s390-and-sparc-defines-in-ipc-chr.patch 2011-08-15 15:33:46.000000000 +0000 +++ iceweasel-6.0/debian/patches/porting/Add-mips-hppa-ia64-s390-and-sparc-defines-in-ipc-chr.patch 2011-08-19 07:00:54.000000000 +0000 @@ -12,7 +12,7 @@ index f7293d9..3536d1c 100644 --- a/ipc/chromium/src/build/build_config.h +++ b/ipc/chromium/src/build/build_config.h -@@ -60,6 +60,21 @@ +@@ -60,6 +60,24 @@ #elif defined(__ppc__) || defined(__powerpc__) #define ARCH_CPU_PPC 1 #define ARCH_CPU_32_BITS 1 @@ -25,6 +25,9 @@ +#elif defined(__ia64__) +#define ARCH_CPU_IA64 1 +#define ARCH_CPU_64_BITS 1 ++#elif defined(__s390x__) ++#define ARCH_CPU_S390X 1 ++#define ARCH_CPU_64_BITS 1 +#elif defined(__s390__) +#define ARCH_CPU_S390 1 +#define ARCH_CPU_32_BITS 1 diff -Nru iceweasel-6.0/debian/patches/porting/Fix-js-engine-on-64-bit-big-endian.patch iceweasel-6.0/debian/patches/porting/Fix-js-engine-on-64-bit-big-endian.patch --- iceweasel-6.0/debian/patches/porting/Fix-js-engine-on-64-bit-big-endian.patch 1970-01-01 00:00:00.000000000 +0000 +++ iceweasel-6.0/debian/patches/porting/Fix-js-engine-on-64-bit-big-endian.patch 2011-08-19 20:04:47.000000000 +0000 @@ -0,0 +1,48 @@ +From: Aurelien Jarno <aure...@debian.org> +Date: Fri, 19 Aug 2011 21:53:45 +0200 +Subject: Fix JavaScript Engine on 64-bit big endian + +On 64-bit architectures, jsval is represented as an union mapping +double, 32- or 64-bit values. It uses the IEEE754 denormalized number +representation to encode the type of the variable when it is not a float +value. That's why the tag part is exactly at the same place and location +than the sign + exponent in a 64-bit double value, and the payload is +exactly at the same place than the mantissa. + +However this way only works for little-endian machines. On big-endian +machines the payload overrides the sign+exponent and the tag overrides +the mantissa. Moreover all the 64-bit macros in jsval.h assume a little +endian order. + +The patch below tries to fix that by modifying the jsval layout to make +it little-endian (at the 32-bit word level), by swapping the two 32-bit +words. For that it uses dummy 32-bit values in an anonymous structure to +force the location of the other 32-bit values. With this patch, the +JavaScript testsuite gives the same result than on a 64-bit little +endian machine (s390x versus amd64). + + +--- iceweasel-6.0.orig/js/src/jsval.h ++++ iceweasel-6.0/js/src/jsval.h +@@ -351,9 +351,18 @@ typedef union jsval_layout + } debugView; + struct { + union { +- int32 i32; +- uint32 u32; +- JSWhyMagic why; ++ struct { ++ int32 dummy1; ++ int32 i32; ++ }; ++ struct { ++ uint32 dummy2; ++ uint32 u32; ++ }; ++ struct { ++ JSWhyMagic dummy3; ++ JSWhyMagic why; ++ }; + jsuword word; + } payload; + } s; diff -Nru iceweasel-6.0/debian/patches/series iceweasel-6.0/debian/patches/series --- iceweasel-6.0/debian/patches/series 2011-08-15 15:46:35.000000000 +0000 +++ iceweasel-6.0/debian/patches/series 2011-08-19 20:16:06.000000000 +0000 @@ -29,6 +29,7 @@ porting/Allow-ARMv4T-in-nanojit.patch porting/Allow-ipc-code-to-build-on-GNU-kfreebsd.patch porting/Allow-ipc-code-to-build-on-GNU-Hurd.patch +porting/Fix-js-engine-on-64-bit-big-endian.patch prefs/Remove-general.useragent.locale-prefs-from-firefox-..patch prefs/Enable-intl.locale.matchOS-and-report-the-locale-cor.patch prefs/Set-javascript.options.showInConsole.patch -- System Information: Debian Release: wheezy/sid APT prefers unreleased APT policy: (500, 'unreleased'), (500, 'unstable') Architecture: s390x Kernel: Linux 3.0.0-1-s390x (SMP w/2 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org