diff options
Diffstat (limited to 'mozilla-1498938.patch')
-rw-r--r-- | mozilla-1498938.patch | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/mozilla-1498938.patch b/mozilla-1498938.patch deleted file mode 100644 index 9748670..0000000 --- a/mozilla-1498938.patch +++ /dev/null @@ -1,93 +0,0 @@ - -# HG changeset patch -# User A. Wilcox <AWilcox@Wilcox-Tech.com> -# Date 1539817971 0 -# Node ID 06e5a5bfd05ef276dce035af837f2ba76e9a55a4 -# Parent 0ef00ee6c5312035280635f06e4790abd8b13729 -Bug 1498938 - Support [implicit_jscontext] XPIDL calls on Linux/PPC64.; r=froydnj - -diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp ---- a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp -+++ b/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp -@@ -61,43 +61,52 @@ PrepareAndDispatch(nsXPTCStubBase* self, - - NS_ASSERTION(dispatchParams,"no place for params"); - if (! dispatchParams) - return NS_ERROR_OUT_OF_MEMORY; - - const uint8_t indexOfJSContext = info->IndexOfJSContext(); - - uint64_t* ap = args; -+ uint32_t iCount = 0; -+ uint32_t fpCount = 0; - uint64_t tempu64; - - for(i = 0; i < paramCount; i++) { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - -- MOZ_CRASH("NYI: support implicit JSContext*, bug 1475699"); -+ if (i == indexOfJSContext) { -+ if (iCount < GPR_COUNT) -+ iCount++; -+ else -+ ap++; -+ } - - if (!param.IsOut() && type == nsXPTType::T_DOUBLE) { -- if (i < FPR_COUNT) -- dp->val.d = fprData[i]; -+ if (fpCount < FPR_COUNT) { -+ dp->val.d = fprData[fpCount++]; -+ } - else - dp->val.d = *(double*) ap; - } else if (!param.IsOut() && type == nsXPTType::T_FLOAT) { -- if (i < FPR_COUNT) -- dp->val.f = (float) fprData[i]; // in registers floats are passed as doubles -+ if (fpCount < FPR_COUNT) { -+ dp->val.f = (float) fprData[fpCount++]; // in registers floats are passed as doubles -+ } - else { - float *p = (float *)ap; - #ifndef __LITTLE_ENDIAN__ - p++; - #endif - dp->val.f = *p; - } - } else { /* integer type or pointer */ -- if (i < GPR_COUNT) -- tempu64 = gprData[i]; -+ if (iCount < GPR_COUNT) -+ tempu64 = gprData[iCount]; - else - tempu64 = *ap; - - if (param.IsOut() || !type.IsArithmetic()) - dp->val.p = (void*) tempu64; - else if (type == nsXPTType::T_I8) - dp->val.i8 = (int8_t) tempu64; - else if (type == nsXPTType::T_I16) -@@ -119,17 +128,19 @@ PrepareAndDispatch(nsXPTCStubBase* self, - else if (type == nsXPTType::T_CHAR) - dp->val.c = (char) tempu64; - else if (type == nsXPTType::T_WCHAR) - dp->val.wc = (wchar_t) tempu64; - else - NS_ERROR("bad type"); - } - -- if (i >= 7) -+ if (iCount < GPR_COUNT) -+ iCount++; // gprs are skipped for fp args, so this always needs inc -+ else - ap++; - } - - nsresult result = self->mOuter->CallMethod((uint16_t) methodIndex, info, - dispatchParams); - - if (dispatchParams != paramBuffer) - delete [] dispatchParams; - |