diff options
Diffstat (limited to 'time/sunbird/patches/patch-bx')
-rw-r--r-- | time/sunbird/patches/patch-bx | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/time/sunbird/patches/patch-bx b/time/sunbird/patches/patch-bx new file mode 100644 index 00000000000..c032f287ea7 --- /dev/null +++ b/time/sunbird/patches/patch-bx @@ -0,0 +1,84 @@ +$NetBSD: patch-bx,v 1.1.1.1 2006/02/05 21:56:26 ghen Exp $ + +--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc_netbsd.cpp.orig 2006-02-02 16:57:57.000000000 +0100 ++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc_netbsd.cpp +@@ -119,8 +119,10 @@ PrepareAndDispatch(nsXPTCStubBase* self, + if ((PRUint32) ap & 4) ap++; // doubles are 8-byte aligned on stack + dp->val.d = *(double*) ap; + ap += 2; ++#if __GXX_ABI_VERSION < 100 + if (gpr < GPR_COUNT) + gpr += 2; ++#endif + } + continue; + } +@@ -130,8 +132,10 @@ PrepareAndDispatch(nsXPTCStubBase* self, + else { + dp->val.f = *(float*) ap; + ap += 1; ++#if __GXX_ABI_VERSION < 100 + if (gpr < GPR_COUNT) + gpr += 1; ++#endif + } + continue; + } +@@ -195,7 +199,9 @@ PrepareAndDispatch(nsXPTCStubBase* self, + // however, it's quick, dirty, and'll break when the ABI changes on + // us, which is what we want ;-). + +-#define STUB_ENTRY(n) \ ++#if __GXX_ABI_VERSION < 100 ++// gcc-2 version ++# define STUB_ENTRY(n) \ + __asm__ ( \ + ".section \".text\" \n\t" \ + ".align 2 \n\t" \ +@@ -206,6 +212,46 @@ __asm__ ( + "li 11,"#n" \n\t" \ + "b SharedStub@local \n" \ + ); ++#else ++// gcc-3 version ++// ++// As G++3 ABI contains the length of the functionname in the mangled ++// name, it is difficult to get a generic assembler mechanism like ++// in the G++ 2.95 case. ++// Create names would be like: ++// _ZN14nsXPTCStubBase5Stub1Ev ++// _ZN14nsXPTCStubBase6Stub12Ev ++// _ZN14nsXPTCStubBase7Stub123Ev ++// _ZN14nsXPTCStubBase8Stub1234Ev ++// etc. ++// Use assembler directives to get the names right... ++ ++# define STUB_ENTRY(n) \ ++__asm__ ( \ ++ ".align 2 \n\t" \ ++ ".if "#n" < 10 \n\t" \ ++ ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t" \ ++ ".type _ZN14nsXPTCStubBase5Stub"#n"Ev,@function \n\n" \ ++"_ZN14nsXPTCStubBase5Stub"#n"Ev: \n\t" \ ++ \ ++ ".elseif "#n" < 100 \n\t" \ ++ ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t" \ ++ ".type _ZN14nsXPTCStubBase6Stub"#n"Ev,@function \n\n" \ ++"_ZN14nsXPTCStubBase6Stub"#n"Ev: \n\t" \ ++ \ ++ ".elseif "#n" < 1000 \n\t" \ ++ ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t" \ ++ ".type _ZN14nsXPTCStubBase7Stub"#n"Ev,@function \n\n" \ ++"_ZN14nsXPTCStubBase7Stub"#n"Ev: \n\t" \ ++ \ ++ ".else \n\t" \ ++ ".err \"stub number "#n" >= 1000 not yet supported\"\n" \ ++ ".endif \n\t" \ ++ \ ++ "li 11,"#n" \n\t" \ ++ "b SharedStub@local \n" \ ++); ++#endif + + #define SENTINEL_ENTRY(n) \ + nsresult nsXPTCStubBase::Sentinel##n() \ |