1 http://lists.debian.org/debian-arm/2007/05/msg00039.html
3 From: Lennert Buytenhek <buytenh@wantstofly.org>
7 The reason that building nss (i.e., firefox) would segfault on ARM EABI
8 systems is an assumption about the layout of the jmp_buf structure in
9 the nspr library (which nss depends on) that does hold on old-ABI but
10 no longer holds on EABI. The attached patch fixes this assumption,
11 and fixes the shlibsign segfault during the building of nss (it also
12 fixes a floating point byte order assumption.)
16 It's of course a stupid idea to depend on a particular layout of the
17 jmp_buf structure in application programs, but oh well. People write
18 ugly buggy code, film at 11.
21 --- mozilla/nsprpub/pr/src/misc/prdtoa.c.orig 2007-05-06 02:39:00.000000000 +0200
22 +++ mozilla/nsprpub/pr/src/misc/prdtoa.c 2007-05-06 02:39:22.000000000 +0200
24 /* FIXME: deal with freelist and p5s. */
27 -#if defined(__arm) || defined(__arm__) || defined(__arm26__) \
28 - || defined(__arm32__)
29 +#if (defined(__arm) || defined(__arm__) || defined(__arm26__) \
30 + || defined(__arm32__)) && !defined(__ARM_EABI__) && !defined(__ARMEB__)
32 #elif defined(IS_LITTLE_ENDIAN)
34 --- mozilla/nsprpub/pr/include/md/_linux.h.orig 2007-05-06 02:39:45.000000000 +0200
35 +++ mozilla/nsprpub/pr/include/md/_linux.h 2007-05-06 02:40:57.000000000 +0200
37 #error "Linux/MIPS pre-glibc2 not supported yet"
38 #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
40 -#elif defined(__arm__)
41 +#elif defined(__arm__) && !defined(__ARM_EABI__)
43 #if defined(__GLIBC__) && __GLIBC__ >= 2
44 #define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[20]
46 #error "ARM/Linux pre-glibc2 not supported yet"
47 #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
49 +#elif defined(__arm__) && defined(__ARM_EABI__)
51 +#if defined(__GLIBC__) && __GLIBC__ >= 2
52 +#define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[8]
53 +#define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[7] = (val))
54 +#define _MD_GET_SP_PTR(_t) &(_MD_GET_SP(_t))
55 +#define _MD_GET_FP_PTR(_t) (&(_t)->md.context[0].__jmpbuf[7])
56 +#define _MD_SP_TYPE __ptr_t
58 +#error "ARM/Linux pre-glibc2 not supported yet"
59 +#endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
63 #error "Unknown CPU architecture"