diff options
author | Brian Smith <brian@dbsoft.org> | 2022-06-09 22:05:20 -0500 |
---|---|---|
committer | Brian Smith <brian@dbsoft.org> | 2022-06-09 22:05:20 -0500 |
commit | a977ba55eb80984b38c8f9a31778c948afa55c20 (patch) | |
tree | 9c45e3d721b9b3808c190f225cbd73f0c8f51bb5 /xpcom | |
parent | 8199a0d551455314809de775164d592c5a4aad9d (diff) | |
download | uxp-a977ba55eb80984b38c8f9a31778c948afa55c20.tar.gz |
Issue #1905 - Part 3g - Final set of changes connecting ARM64 support for Mac.
Back out some of the xptcstubs changes that are not viable for our codebase.
Diffstat (limited to 'xpcom')
-rw-r--r-- | xpcom/reflect/xptcall/md/unix/xptcstubs_aarch64.cpp | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_aarch64.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_aarch64.cpp index d535557259..271ea4b019 100644 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_aarch64.cpp +++ b/xpcom/reflect/xptcall/md/unix/xptcstubs_aarch64.cpp @@ -4,6 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "xptcprivate.h" +#include "xptiprivate.h" #ifndef __AARCH64EL__ #error "Only little endian compatibility was tested" @@ -33,10 +34,12 @@ extern "C" nsresult ATTRIBUTE_USED PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, void* args, uint64_t *gprData, double *fprData) { +#define PARAM_BUFFER_COUNT 16 #define PARAM_GPR_COUNT 8 #define PARAM_FPR_COUNT 8 nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; + nsXPTCMiniVariant* dispatchParams = NULL; const nsXPTMethodInfo* info; NS_ASSERTION(self,"no self"); @@ -46,7 +49,13 @@ PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, void* args, uint32_t paramCount = info->GetParamCount(); - const uint8_t indexOfJSContext = info->IndexOfJSContext(); + // setup variant array pointer + if (paramCount > PARAM_BUFFER_COUNT) { + dispatchParams = new nsXPTCMiniVariant[paramCount]; + } else { + dispatchParams = paramBuffer; + } + NS_ASSERTION(dispatchParams,"no place for params"); void* ap = args; uint32_t next_gpr = 1; // skip first arg which is 'self' @@ -54,16 +63,7 @@ PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, void* args, for (uint32_t i = 0; i < paramCount; i++) { const nsXPTParamInfo& param = info->GetParam(i); const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = ¶mBuffer[i]; - - if (i == indexOfJSContext) { - if (next_gpr < PARAM_GPR_COUNT) - next_gpr++; - else { - void* value; - get_value_and_advance(&value, ap); - } - } + nsXPTCMiniVariant* dp = &dispatchParams[i]; if (param.IsOut() || !type.IsArithmetic()) { if (next_gpr < PARAM_GPR_COUNT) { @@ -187,8 +187,11 @@ PrepareAndDispatch(nsXPTCStubBase* self, uint32_t methodIndex, void* args, } } - nsresult result = self->mOuter->CallMethod((uint16_t)methodIndex, info, - paramBuffer); + nsresult result = self->mOuter->CallMethod((uint16_t)methodIndex, info, dispatchParams); + + if (dispatchParams != paramBuffer) { + delete [] dispatchParams; + } return result; } |