From: John Paul Adrian Glaubitz Date: Sun, 2 Apr 2017 07:14:39 +0000 (+0200) Subject: Add m68k support to Thunderbird X-Git-Tag: archive/raspbian/1%60.9.0-1_deb10u1+rpi1^2~19 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=578ea6fcb49ff39b55910c77275aa0900f0d7841;p=thunderbird.git Add m68k support to Thunderbird Origin: not yet exist Bug-Debian: https://bugs.debian.org/859271 Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1325771 Applied-Upstream: TBD All patches have been reviewed by positively by upstream with the exception of the alignment fixes where upstream wants to use a C++11 solution instead of the other suggestions I made. This patch currently uses __attribute__((aligned(4))) to ensure the alignment is at least 4 bytes. This method is safe and works on gcc and clang and unlike the suggested alignas() from C++11 does not break on architectures which require stricter alignment (e.g. alignas(4) would break on x86_64 while __attribute__((aligned(4))) does not as it still allows for 8 bytes alignment. Cherry-picked and adapted patches from Firefox upstream: - a31a2d92cf9a2f4e9ad2d12cb74f96579f54fa5e Bug 1325771 - layout:style: Make sure nsCSSValue has at least 4 bytes alignment - b65c6cf80f7038f47c7f5d223a6528d4aa4538cf Bug 1325771 - js:src: Make sure shadow::Shape has at least 4 bytes alignment - cbbe025c5034cfa28aa2a8a4e557f9a066ddd013 Bug 1325771 - js:src: Make sure Cell has at least 4 bytes alignment - 6441fad686d30230a6842a6432bc134ca20c4125 Bug 1325771 - js:jit: Use 'Feeling Lucky' atomic operations on m68k - ec66da836071ec0f05a3517947c8e1a68620c399 Bug 1325771 - mfbt:tests: Handle targets with less strict alignment in TestPair - 48f3a6331cad497b933dc6e197f7a006b9189290 Bug 1325771 - ipc:chromium: Add platform defines for m68k - 26cd64f37741d85bc13c19bc55e3c6e26da59052 Bug 1325771 - media:webrtc: Add platform defines for m68k - bd19fe85678f948f60caa864a2af28c3c39059c7 Bug 1325771 - mfbt:tests: Define RETURN_INSTR for m68k in TestPoisonArea - a3e704b48760e3d45d20fc6bb13282d3285ba6bb Bug 1325771 - xpcom: Fix type of result in NS_InvokeByIndex on Linux/m68k - 174cfc890291778d12241c9a4cfc25ea85fdd3a0 Bug 1325771 - xpcom: Fix syntax error in PrepareAndDispatch on Linux/m68k Additional changes: - Add defines for m68k to double-conversion library - Make sure both "struct Class" and "struct JSClass" have at least 4 bytes alignment Gbp-Pq: Topic porting-m68k Gbp-Pq: Name Add-m68k-support-to-Thunderbird.patch --- diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure index 83b8d70559..0d0f048c35 100644 --- a/build/moz.configure/init.configure +++ b/build/moz.configure/init.configure @@ -676,6 +676,9 @@ def split_triplet(triplet, allow_unknown=False): elif cpu == 'sh4': canonical_cpu = 'sh4' endianness = 'little' + elif cpu in ('m68k'): + canonical_cpu = 'm68k' + endianness = 'big' elif allow_unknown: canonical_cpu = cpu endianness = 'unknown' diff --git a/ipc/chromium/src/build/build_config.h b/ipc/chromium/src/build/build_config.h index 6196d9204c..1000d00190 100644 --- a/ipc/chromium/src/build/build_config.h +++ b/ipc/chromium/src/build/build_config.h @@ -81,6 +81,9 @@ #define ARCH_CPU_ARMEL 1 #define ARCH_CPU_32_BITS 1 #define WCHAR_T_IS_UNSIGNED 1 +#elif defined(__m68k__) +#define ARCH_CPU_M68K 1 +#define ARCH_CPU_32_BITS 1 #elif defined(__powerpc64__) #define ARCH_CPU_PPC64 1 #define ARCH_CPU_64_BITS 1 diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h index 4b8d18a4cb..4ff10b0b20 100644 --- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -563,7 +563,7 @@ class Shape { uint32_t slotInfo; static const uint32_t FIXED_SLOTS_SHIFT = 27; -}; +} __attribute__ ((aligned(4))); /** * This layout is shared by all native objects. For non-native objects, the diff --git a/layout/style/nsCSSValue.h b/layout/style/nsCSSValue.h index 53bd3ad1e1..fa3cdcd642 100644 --- a/layout/style/nsCSSValue.h +++ b/layout/style/nsCSSValue.h @@ -1017,7 +1017,7 @@ class nsCSSValue { mozilla::SharedFontList* MOZ_OWNING_REF mFontFamilyList; mozilla::css::ComplexColorValue* MOZ_OWNING_REF mComplexColor; } mValue; -}; +} __attribute__ ((aligned(4))); struct nsCSSValue::Array final { // return |Array| with reference count of zero diff --git a/media/webrtc/trunk/build/build_config.h b/media/webrtc/trunk/build/build_config.h index 312674baab..e10a234761 100644 --- a/media/webrtc/trunk/build/build_config.h +++ b/media/webrtc/trunk/build/build_config.h @@ -118,6 +118,16 @@ #define ARCH_CPU_LITTLE_ENDIAN 1 #elif defined(__pnacl__) #define ARCH_CPU_32_BITS 1 +#elif defined(__MIPSEL__) +#define ARCH_CPU_MIPS_FAMILY 1 +#define ARCH_CPU_MIPSEL 1 +#define ARCH_CPU_32_BITS 1 +#define ARCH_CPU_LITTLE_ENDIAN 1 +#elif defined(__m68k__) +#define ARCH_CPU_M68K_FAMILY 1 +#define ARCH_CPU_M68K 1 +#define ARCH_CPU_32_BITS 1 +#define ARCH_CPU_BIG_ENDIAN 1 #elif defined(__powerpc64__) #define ARCH_CPU_PPC_FAMILY 1 #define ARCH_CPU_PPC64 1 diff --git a/mfbt/tests/TestPair.cpp b/mfbt/tests/TestPair.cpp index f1fa9c554f..41b463a136 100644 --- a/mfbt/tests/TestPair.cpp +++ b/mfbt/tests/TestPair.cpp @@ -29,14 +29,19 @@ using mozilla::Pair; static_assert(sizeof(name##_2) == (size), \ "Pair<" #T2 ", " #T1 "> has an unexpected size"); +static constexpr size_t sizemax(size_t a, size_t b) +{ + return (a > b) ? a : b; +} + INSTANTIATE(int, int, prim1, 2 * sizeof(int)); -INSTANTIATE(int, long, prim2, 2 * sizeof(long)); +INSTANTIATE(int, long, prim2, sizeof(long) + sizemax(sizeof(int), alignof(long))); struct EmptyClass { explicit EmptyClass(int) {} }; struct NonEmpty { char mC; explicit NonEmpty(int) {} }; INSTANTIATE(int, EmptyClass, both1, sizeof(int)); -INSTANTIATE(int, NonEmpty, both2, 2 * sizeof(int)); +INSTANTIATE(int, NonEmpty, both2, sizeof(int) + alignof(int)); INSTANTIATE(EmptyClass, NonEmpty, both3, 1); struct A { char dummy; explicit A(int) {} }; diff --git a/mfbt/tests/TestPoisonArea.cpp b/mfbt/tests/TestPoisonArea.cpp index 06c24ed032..763dfbce13 100644 --- a/mfbt/tests/TestPoisonArea.cpp +++ b/mfbt/tests/TestPoisonArea.cpp @@ -133,6 +133,9 @@ #elif defined _ARCH_PPC || defined _ARCH_PWR || defined _ARCH_PWR2 #define RETURN_INSTR 0x4E800020 /* blr */ +#elif defined __m68k__ +#define RETURN_INSTR 0x4E754E75 /* rts; rts */ + #elif defined __sparc || defined __sparcv9 #define RETURN_INSTR 0x81c3e008 /* retl */ diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py index 33ae5a4568..a67ab80d21 100644 --- a/python/mozbuild/mozbuild/configure/constants.py +++ b/python/mozbuild/mozbuild/configure/constants.py @@ -46,6 +46,7 @@ CPU_bitness = { 'arm': 32, 'hppa': 32, 'ia64': 64, + 'm68k': 32, 'mips32': 32, 'mips64': 64, 'ppc': 32, @@ -89,6 +90,7 @@ CPU_preprocessor_checks = OrderedDict(( ('mips64', '__mips64'), ('mips32', '__mips__'), ('sh4', '__sh__'), + ('m68k', '__m68k__'), )) assert sorted(CPU_preprocessor_checks.keys()) == sorted(CPU.POSSIBLE_VALUES) diff --git a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py index cb7ff709e1..a1b444ac0d 100755 --- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py +++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py @@ -1165,6 +1165,9 @@ class LinuxCrossCompileToolchainTest(BaseToolchainTest): 'sh4-unknown-linux-gnu': little_endian + { '__sh__': 1, }, + 'm68k-unknown-linux-gnu': big_endian + { + '__m68k__': 1, + }, } PLATFORMS['powerpc64le-unknown-linux-gnu'] = \ diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_linux_m68k.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_linux_m68k.cpp index 7d042a7b01..6989340f3f 100644 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_linux_m68k.cpp +++ b/xpcom/reflect/xptcall/md/unix/xptcinvoke_linux_m68k.cpp @@ -100,7 +100,8 @@ EXPORT_XPCOM_API(nsresult) NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, uint32_t paramCount, nsXPTCVariant* params) { - uint32_t result, n; + nsresult result; + uint32_t n; n = invoke_count_words(paramCount, params) * 4; diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_linux_m68k.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_linux_m68k.cpp index 3720a5c37f..fc33ba09b3 100644 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_linux_m68k.cpp +++ b/xpcom/reflect/xptcall/md/unix/xptcstubs_linux_m68k.cpp @@ -63,7 +63,7 @@ extern "C" { case nsXPTType::T_U64 : dp->val.u64 = *((uint64_t*)ap); ap++; break; case nsXPTType::T_FLOAT : dp->val.f = *((float*) ap); break; case nsXPTType::T_DOUBLE : dp->val.d = *((double*) ap); ap++; break; - case nsXPTType::T_BOOL : dp->val.b = *((uint32_t* ap); break; + case nsXPTType::T_BOOL : dp->val.b = *((uint32_t*)ap); break; case nsXPTType::T_CHAR : dp->val.c = *(((char*) ap) + 3); break; case nsXPTType::T_WCHAR : dp->val.wc = *((wchar_t*) ap); break; default: