--- firefox-68.1.0/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_linux.cpp +++ firefox-68.1.0/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc_linux.cpp @@ -45,11 +45,8 @@ invoke_copy_to_stack(uint32_t* d, uint64_t tempu64; for(uint32_t i = 0; i < paramCount; i++, s++) { - if(s->IsPtrData()) { - if(s->type == nsXPTType::T_JSVAL) - tempu32 = (uint32_t) &s->ptr; - else - tempu32 = (uint32_t) s->ptr; + if(s->IsIndirect()) { + tempu32 = (uint32_t) &s->val; } else { switch(s->type) { @@ -70,7 +67,7 @@ invoke_copy_to_stack(uint32_t* d, } } - if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) { + if (!s->IsIndirect() && s->type == nsXPTType::T_DOUBLE) { #ifndef __NO_FPRS__ if (fpr < FPR_COUNT) fpregs[fpr++] = s->val.d; @@ -88,7 +85,7 @@ invoke_copy_to_stack(uint32_t* d, d += 2; } } - else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) { + else if (!s->IsIndirect() && s->type == nsXPTType::T_FLOAT) { #ifndef __NO_FPRS__ if (fpr < FPR_COUNT) fpregs[fpr++] = s->val.f; // if passed in registers, floats are promoted to doubles @@ -99,7 +96,7 @@ invoke_copy_to_stack(uint32_t* d, else *((float*) d++) = s->val.f; } - else if (!s->IsPtrData() && (s->type == nsXPTType::T_I64 + else if (!s->IsIndirect() && (s->type == nsXPTType::T_I64 || s->type == nsXPTType::T_U64)) { if (gpr & 1) gpr++; // longlongs are aligned in odd/even register pairs, eg. r5/r6 if ((gpr + 1) < GPR_COUNT) {