a14b596750
XULRunner is a runtime environment for applications using the XML User Interface Language, XUL. It is the successor of the "Gecko" runtime environment.
126 lines
4.3 KiB
Text
126 lines
4.3 KiB
Text
$NetBSD: patch-xd,v 1.1.1.1 2009/08/05 02:59:48 tnn Exp $
|
|
|
|
NetBSD/sparc64 xptcall support code. From pkgsrc/www/firefox3/files/
|
|
|
|
--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_sparc64_netbsd.cpp.orig 2009-07-09 10:12:51.000000000 +0200
|
|
+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_sparc64_netbsd.cpp
|
|
@@ -0,0 +1,119 @@
|
|
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
+ *
|
|
+ * The contents of this file are subject to the Netscape Public
|
|
+ * License Version 1.1 (the "License"); you may not use this file
|
|
+ * except in compliance with the License. You may obtain a copy of
|
|
+ * the License at http://www.mozilla.org/NPL/
|
|
+ *
|
|
+ * Software distributed under the License is distributed on an "AS
|
|
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
+ * implied. See the License for the specific language governing
|
|
+ * rights and limitations under the License.
|
|
+ *
|
|
+ * The Original Code is mozilla.org code.
|
|
+ *
|
|
+ * The Initial Developer of the Original Code is Netscape
|
|
+ * Communications Corporation. Portions created by Netscape are
|
|
+ * Copyright (C) 1999 Netscape Communications Corporation. All
|
|
+ * Rights Reserved.
|
|
+ *
|
|
+ * Contributor(s):
|
|
+ */
|
|
+
|
|
+/* Implement shared vtbl methods. */
|
|
+
|
|
+#include "xptcprivate.h"
|
|
+#include "xptiprivate.h"
|
|
+
|
|
+#if defined(sparc) || defined(__sparc__)
|
|
+
|
|
+extern "C" nsresult
|
|
+PrepareAndDispatch(nsXPTCStubBase* self, PRUint64 methodIndex, PRUint64* args)
|
|
+{
|
|
+
|
|
+#define PARAM_BUFFER_COUNT 16
|
|
+
|
|
+ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
|
|
+ nsXPTCMiniVariant* dispatchParams = NULL;
|
|
+ const nsXPTMethodInfo* info;
|
|
+ PRUint8 paramCount;
|
|
+ PRUint8 i;
|
|
+ nsresult result = NS_ERROR_FAILURE;
|
|
+
|
|
+ NS_ASSERTION(self,"no self");
|
|
+
|
|
+ self->mEntry->GetMethodInfo(PRUint16(methodIndex), &info);
|
|
+ NS_ASSERTION(info,"no interface info");
|
|
+
|
|
+ paramCount = info->GetParamCount();
|
|
+
|
|
+ // setup variant array pointer
|
|
+ if(paramCount > PARAM_BUFFER_COUNT)
|
|
+ dispatchParams = new nsXPTCMiniVariant[paramCount];
|
|
+ else
|
|
+ dispatchParams = paramBuffer;
|
|
+ NS_ASSERTION(dispatchParams,"no place for params");
|
|
+ if (!dispatchParams)
|
|
+ return NS_ERROR_OUT_OF_MEMORY;
|
|
+
|
|
+ PRUint64* ap = args;
|
|
+ for(i = 0; i < paramCount; i++, ap++)
|
|
+ {
|
|
+ const nsXPTParamInfo& param = info->GetParam(i);
|
|
+ const nsXPTType& type = param.GetType();
|
|
+ nsXPTCMiniVariant* dp = &dispatchParams[i];
|
|
+
|
|
+ if(param.IsOut() || !type.IsArithmetic())
|
|
+ {
|
|
+ dp->val.p = (void*) *ap;
|
|
+ continue;
|
|
+ }
|
|
+ // else
|
|
+ switch(type)
|
|
+ {
|
|
+ case nsXPTType::T_BOOL : dp->val.b = *((PRInt64*) ap); break;
|
|
+ case nsXPTType::T_CHAR : dp->val.c = *((PRUint64*) ap); break;
|
|
+ case nsXPTType::T_WCHAR : dp->val.wc = *((PRInt64*) ap); break;
|
|
+ case nsXPTType::T_I8 : dp->val.i8 = *((PRInt64*) ap); break;
|
|
+ case nsXPTType::T_I16 : dp->val.i16 = *((PRInt64*) ap); break;
|
|
+ case nsXPTType::T_I32 : dp->val.i32 = *((PRInt64*) ap); break;
|
|
+ case nsXPTType::T_I64 : dp->val.i64 = *((PRInt64*) ap); break;
|
|
+ case nsXPTType::T_U8 : dp->val.u8 = *((PRUint64*) ap); break;
|
|
+ case nsXPTType::T_U16 : dp->val.u16 = *((PRUint64*)ap); break;
|
|
+ case nsXPTType::T_U32 : dp->val.u32 = *((PRUint64*)ap); break;
|
|
+ case nsXPTType::T_U64 : dp->val.u64 = *((PRUint64*) ap); break;
|
|
+ case nsXPTType::T_FLOAT : dp->val.f = ((float*) ap)[1]; break;
|
|
+ case nsXPTType::T_DOUBLE : dp->val.d = *((double*) ap); break;
|
|
+ default:
|
|
+ NS_ASSERTION(0, "bad type");
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ result = self->mOuter->CallMethod((PRUint16)methodIndex, info, dispatchParams);
|
|
+
|
|
+ if(dispatchParams != paramBuffer)
|
|
+ delete [] dispatchParams;
|
|
+
|
|
+ return result;
|
|
+}
|
|
+
|
|
+extern "C" int SharedStub(int, int*);
|
|
+
|
|
+#define STUB_ENTRY(n) \
|
|
+nsresult nsXPTCStubBase::Stub##n() \
|
|
+{ \
|
|
+ int dummy; /* defeat tail-call optimization */ \
|
|
+ return SharedStub(n, &dummy); \
|
|
+}
|
|
+
|
|
+#define SENTINEL_ENTRY(n) \
|
|
+nsresult nsXPTCStubBase::Sentinel##n() \
|
|
+{ \
|
|
+ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
|
|
+ return NS_ERROR_NOT_IMPLEMENTED; \
|
|
+}
|
|
+
|
|
+#include "xptcstubsdef.inc"
|
|
+
|
|
+#endif /* sparc || __sparc__ */
|