diff options
Diffstat (limited to 'www/seamonkey/files')
-rwxr-xr-x | www/seamonkey/files/moz-install | 70 | ||||
-rw-r--r-- | www/seamonkey/files/mozilla-ELF.in | 4 | ||||
-rw-r--r-- | www/seamonkey/files/mozilla-Mach-O.in | 4 | ||||
-rw-r--r-- | www/seamonkey/files/mozilla-a.out.in | 6 | ||||
-rw-r--r-- | www/seamonkey/files/xptcinvoke_asm_sparc64_netbsd.s | 112 | ||||
-rw-r--r-- | www/seamonkey/files/xptcinvoke_sparc64_netbsd.cpp | 84 | ||||
-rw-r--r-- | www/seamonkey/files/xptcstubs_asm_sparc64_netbsd.s | 66 | ||||
-rw-r--r-- | www/seamonkey/files/xptcstubs_sparc64_netbsd.cpp | 122 |
8 files changed, 468 insertions, 0 deletions
diff --git a/www/seamonkey/files/moz-install b/www/seamonkey/files/moz-install new file mode 100755 index 00000000000..56153ba8af6 --- /dev/null +++ b/www/seamonkey/files/moz-install @@ -0,0 +1,70 @@ +#!/bin/sh +# +# $NetBSD: moz-install,v 1.1 2006/09/24 16:21:33 salo Exp $ + +${SED} -e "s,@PREFIX@,${PREFIX},g" -e "s,@MOZILLA@,${MOZILLA}," -e "s,@MOZILLA_BIN@,${MOZILLA_BIN}," ${FILESDIR}/mozilla-${OBJECT_FMT}.in > ${PREFIX}/bin/${MOZILLA} +${CHOWN} ${BINOWN} ${PREFIX}/bin/${MOZILLA} +${CHGRP} ${BINGRP} ${PREFIX}/bin/${MOZILLA} +${CHMOD} ${BINMODE} ${PREFIX}/bin/${MOZILLA} + +# +# Substitute variables +# +TMP_PLIST=${WRKDIR}/TMP_PLIST.$$ +trap "${RM} -f ${TMP_PLIST}" 1 2 15 + +${SED} -e "s/\${MOZILLA}/${MOZILLA}/g" -e "s/\${SO_SUFFIX}/${SO_SUFFIX}/" -e "s/\${MOZILLA_BIN}/${MOZILLA_BIN}/g" -e "s/\${SUNOSLIB}/${SUNOSLIB}/" < ${PLIST_SRC} > ${TMP_PLIST} + +# make directories +for i in `${SED} -n -e '/^@comment begin DIRS$/,/^@comment end DIRS$/p' ${TMP_PLIST} | ${EGREP} ^@dirrm | ${SED} -e 's/^@dirrm//'` ; do + ${BSD_INSTALL_DATA_DIR} ${PREFIX}/$i +done + +# install programs +for i in `${SED} -n -e '/^@comment begin PROGRAMS$/,/^@comment end PROGRAMS$/p' ${TMP_PLIST} | ${EGREP} -v ^@comment` ; do + src=`echo $i | ${SED} -e "s@lib/${MOZILLA}@dist/bin@"`; + ${BSD_INSTALL_PROGRAM} ${WRKSRC}/${src} ${PREFIX}/$i +done + +# install scripts +for i in `${SED} -n -e '/^@comment begin SCRIPTS$/,/^@comment end SCRIPTS$/p' ${TMP_PLIST} | ${EGREP} -v ^@comment` ; do + src=`echo $i | ${SED} -e "s@lib/${MOZILLA}@dist/bin@"`; + ${BSD_INSTALL_SCRIPT} ${WRKSRC}/${src} ${PREFIX}/$i +done + +# install DSO +for i in `${SED} -n -e '/^@comment begin DSO$/,/^@comment end DSO$/p' ${TMP_PLIST} | ${EGREP} -v ^@comment` ; do + src=`echo $i | ${SED} -e "s@lib/${MOZILLA}@dist/bin@"`; + ${MOZ_INSTALL_LIB} ${WRKSRC}/${src} ${PREFIX}/$i +done + +# install PKGCONFIG +for i in `${SED} -n -e '/^@comment begin PKGCONFIG$/,/^@comment end PKGCONFIG$/p' ${TMP_PLIST} | ${EGREP} -v ^@comment` ; do + src=`echo $i | ${SED} -e "s@lib/pkgconfig@build/unix@"`; + ${BSD_INSTALL_DATA} ${WRKSRC}/${src} ${PREFIX}/$i +done + +# install DATA +for i in `${SED} -n -e '/^@comment begin DATA$/,/^@comment end DATA$/p' ${TMP_PLIST} | ${EGREP} -v ^@comment` ; do + src=`echo $i | ${SED} -e "s@lib/${MOZILLA}@dist/bin@"`; + ${BSD_INSTALL_DATA} ${WRKSRC}/${src} ${PREFIX}/$i +done + +# install INCLUDE +for i in `${SED} -n -e '/^@comment begin INCLUDE$/,/^@comment end INCLUDE$/p' ${TMP_PLIST} | ${EGREP} -v ^@comment` ; do + src=`echo $i | ${SED} -e "s@include/${MOZILLA}@dist/include@"`; + ${BSD_INSTALL_DATA} ${WRKSRC}/${src} ${PREFIX}/$i +done + +# install INCLUDE-PUBLIC +for i in `${SED} -n -e '/^@comment begin INCLUDE-PUBLIC$/,/^@comment end INCLUDE-PUBLIC$/p' ${TMP_PLIST} | ${EGREP} -v ^@comment` ; do + src=`echo $i | ${SED} -e "s@include/${MOZILLA}@dist/public@"`; + ${BSD_INSTALL_DATA} ${WRKSRC}/${src} ${PREFIX}/$i +done + +${RM} -f ${TMP_PLIST} + +# +# remove generated user conf directory ${WRKDIR}/.mozilla +# +${RM} -rf ${WRKDIR}/.mozilla diff --git a/www/seamonkey/files/mozilla-ELF.in b/www/seamonkey/files/mozilla-ELF.in new file mode 100644 index 00000000000..99470536423 --- /dev/null +++ b/www/seamonkey/files/mozilla-ELF.in @@ -0,0 +1,4 @@ +#!/bin/sh +MOZILLA_FIVE_HOME=@PREFIX@/lib/@MOZILLA@ +export MOZILLA_FIVE_HOME +exec @PREFIX@/lib/@MOZILLA@/@MOZILLA_BIN@ "$@" diff --git a/www/seamonkey/files/mozilla-Mach-O.in b/www/seamonkey/files/mozilla-Mach-O.in new file mode 100644 index 00000000000..99470536423 --- /dev/null +++ b/www/seamonkey/files/mozilla-Mach-O.in @@ -0,0 +1,4 @@ +#!/bin/sh +MOZILLA_FIVE_HOME=@PREFIX@/lib/@MOZILLA@ +export MOZILLA_FIVE_HOME +exec @PREFIX@/lib/@MOZILLA@/@MOZILLA_BIN@ "$@" diff --git a/www/seamonkey/files/mozilla-a.out.in b/www/seamonkey/files/mozilla-a.out.in new file mode 100644 index 00000000000..72af99363b6 --- /dev/null +++ b/www/seamonkey/files/mozilla-a.out.in @@ -0,0 +1,6 @@ +#!/bin/sh +MOZILLA_FIVE_HOME=@PREFIX@/lib/@MOZILLA@ +LD_LIBRARY_PATH=@PREFIX@/lib/@MOZILLA@ +export MOZILLA_FIVE_HOME +export LD_LIBRARY_PATH +exec @PREFIX@/lib/@MOZILLA@/@MOZILLA_BIN@ "$@" diff --git a/www/seamonkey/files/xptcinvoke_asm_sparc64_netbsd.s b/www/seamonkey/files/xptcinvoke_asm_sparc64_netbsd.s new file mode 100644 index 00000000000..a35f0b18d73 --- /dev/null +++ b/www/seamonkey/files/xptcinvoke_asm_sparc64_netbsd.s @@ -0,0 +1,112 @@ +/* -*- 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) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +/* Platform specific code to invoke XPCOM methods on native objects */ + .global XPTC_InvokeByIndex + .type XPTC_InvokeByIndex, #function +/* + XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex, + PRUint32 paramCount, nsXPTCVariant* params); + +*/ +/* + * Note: To simplify stack handling we allocate an extra stack + * frame here. In principle invoke_copy_to_stack() could + * save the parameters our caller's frame and we could + * reclaim the stackframe and do a tail call to the + * function. However, this gets complicated.... + * + * The vtable consist of be: + * + * struct { + * short __delta; + * short __index; + * union { + * P __pfn; + * short __delta2; + * } __pfn_or_delta2; + * }; + * + * See gcc/cp/cp-tree.h + */ + +XPTC_InvokeByIndex: + save %sp,-(128 + 64),%sp ! room for the register window and + ! struct pointer, rounded up to 0 % 64 + sll %i2,4,%l0 ! assume the worst case + ! paramCount * 2 * 8 bytes + cmp %l0, 0 ! are there any args? If not, + be .invoke ! no need to copy args to stack + nop + + sub %sp,%l0,%sp ! create the additional stack space + add %sp,0x7ff+136,%o0 ! step past the register window, the + ! struct result pointer and the 'this' slot + mov %i2,%o1 ! paramCount + call invoke_copy_to_stack + mov %i3,%o2 ! params + +! +! load arguments from stack into the outgoing registers +! BIAS is 0x7ff (2047) +! + +! load the %o1..5 64bit (extended word) output registers registers + ldx [%sp + 0x7ff + 136],%o1 ! %i1 + ldx [%sp + 0x7ff + 144],%o2 ! %i2 + ldx [%sp + 0x7ff + 152],%o3 ! %i3 + ldx [%sp + 0x7ff + 160],%o4 ! %i4 + ldx [%sp + 0x7ff + 168],%o5 ! %i5 + +! load the even number double registers starting with %f2 + ldd [%sp + 0x7ff + 136],%f2 + ldd [%sp + 0x7ff + 144],%f4 + ldd [%sp + 0x7ff + 152],%f6 + ldd [%sp + 0x7ff + 160],%f8 + ldd [%sp + 0x7ff + 168],%f10 + ldd [%sp + 0x7ff + 176],%f12 + ldd [%sp + 0x7ff + 184],%f14 + ldd [%sp + 0x7ff + 192],%f16 + ldd [%sp + 0x7ff + 200],%f18 + ldd [%sp + 0x7ff + 208],%f20 + ldd [%sp + 0x7ff + 216],%f22 + ldd [%sp + 0x7ff + 224],%f24 + ldd [%sp + 0x7ff + 232],%f26 + ldd [%sp + 0x7ff + 240],%f28 + ldd [%sp + 0x7ff + 248],%f30 + +! +! calculate the target address from the vtable +! +.invoke: + sll %i1,3,%l0 ! index *= 8 + ldx [%i0],%l1 ! *this --> address of vtable + ldx [%l0 + %l1],%l0 ! this->vtable[index] --> address + + jmpl %l0,%o7 ! call the routine + mov %i0,%o0 ! move 'this' pointer to out register + + mov %o0,%i0 ! propagate return value + ret + restore + + .size XPTC_InvokeByIndex, .-XPTC_InvokeByIndex diff --git a/www/seamonkey/files/xptcinvoke_sparc64_netbsd.cpp b/www/seamonkey/files/xptcinvoke_sparc64_netbsd.cpp new file mode 100644 index 00000000000..82d7c9cc3b5 --- /dev/null +++ b/www/seamonkey/files/xptcinvoke_sparc64_netbsd.cpp @@ -0,0 +1,84 @@ +/* -*- 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) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + */ + +/* Platform specific code to invoke XPCOM methods on native objects */ + +#include "xptcprivate.h" + +#if !defined(__sparc64__) && !defined(_LP64) +#error "This code is for Sparc64 only" +#endif + +extern "C" PRUint32 +invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s) +{ + /* + We need to copy the parameters for this function to locals and use them + from there since the parameters occupy the same stack space as the stack + we're trying to populate. + */ + PRUint64 *l_d = d; + nsXPTCVariant *l_s = s; + PRUint64 l_paramCount = paramCount; + PRUint64 regCount = 0; // return the number of registers to load from the stack + + for(PRUint64 i = 0; i < l_paramCount; i++, l_d++, l_s++) + { + if (regCount < 5) regCount++; + + if (l_s->IsPtrData()) + { + *l_d = (PRUint64)l_s->ptr; + continue; + } + switch (l_s->type) + { + case nsXPTType::T_I8 : *((PRInt64*)l_d) = l_s->val.i8; break; + case nsXPTType::T_I16 : *((PRInt64*)l_d) = l_s->val.i16; break; + case nsXPTType::T_I32 : *((PRInt64*)l_d) = l_s->val.i32; break; + case nsXPTType::T_I64 : *((PRInt64*)l_d) = l_s->val.i64; break; + + case nsXPTType::T_U8 : *((PRUint64*)l_d) = l_s->val.u8; break; + case nsXPTType::T_U16 : *((PRUint64*)l_d) = l_s->val.u16; break; + case nsXPTType::T_U32 : *((PRUint64*)l_d) = l_s->val.u32; break; + case nsXPTType::T_U64 : *((PRUint64*)l_d) = l_s->val.u64; break; + + /* in the case of floats, we want to put the bits in to the + 64bit space right justified... floats in the paramter array on + sparcv9 use odd numbered registers.. %f1, %f3, so we have to skip + the space that would be occupied by %f0, %f2, etc. + */ + case nsXPTType::T_FLOAT : *(((float*)l_d) + 1) = l_s->val.f; break; + case nsXPTType::T_DOUBLE: *((double*)l_d) = l_s->val.d; break; + case nsXPTType::T_BOOL : *((PRInt64*)l_d) = l_s->val.b; break; + case nsXPTType::T_CHAR : *((PRUint64*)l_d) = l_s->val.c; break; + case nsXPTType::T_WCHAR : *((PRInt64*)l_d) = l_s->val.wc; break; + + default: + // all the others are plain pointer types + *((void**)l_d) = l_s->val.p; + break; + } + } + + return regCount; +} diff --git a/www/seamonkey/files/xptcstubs_asm_sparc64_netbsd.s b/www/seamonkey/files/xptcstubs_asm_sparc64_netbsd.s new file mode 100644 index 00000000000..6557db78b18 --- /dev/null +++ b/www/seamonkey/files/xptcstubs_asm_sparc64_netbsd.s @@ -0,0 +1,66 @@ +/* -*- 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): + */ + + .global SharedStub + +/* + in the frame for the function that called SharedStub are the + rest of the parameters we need + +*/ + +SharedStub: +! we don't create a new frame yet, but work within the frame of the calling +! function to give ourselves the other parameters we want + + mov %o0, %o1 ! shuffle the index up to 2nd place + mov %i0, %o0 ! the original 'this' + add %fp, 0x7ff + 136, %o2 ! previous stack top adjusted to the first argument slot (beyond 'this') + +! save off the original incoming parameters that arrived in +! registers, the ABI guarantees the space for us to do this + stx %i1, [%fp + 0x7ff + 136] + stx %i2, [%fp + 0x7ff + 144] + stx %i3, [%fp + 0x7ff + 152] + stx %i4, [%fp + 0x7ff + 160] + stx %i5, [%fp + 0x7ff + 168] +! now we can build our own stack frame + save %sp,-(128 + 64),%sp ! room for the register window and + ! struct pointer, rounded up to 0 % 64 +! our function now appears to have been called +! as SharedStub(nsISupports* that, PRUint32 index, PRUint32* args) +! so we can just copy these through + + mov %i0, %o0 + mov %i1, %o1 + mov %i2, %o2 + call PrepareAndDispatch + nop + mov %o0,%i0 ! propagate return value + b .LL1 + nop +.LL1: + ret + restore + + .size SharedStub, .-SharedStub + .type SharedStub, #function diff --git a/www/seamonkey/files/xptcstubs_sparc64_netbsd.cpp b/www/seamonkey/files/xptcstubs_sparc64_netbsd.cpp new file mode 100644 index 00000000000..c6fd89e6892 --- /dev/null +++ b/www/seamonkey/files/xptcstubs_sparc64_netbsd.cpp @@ -0,0 +1,122 @@ +/* -*- 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" + +#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; + nsIInterfaceInfo* iface_info = NULL; + const nsXPTMethodInfo* info; + PRUint8 paramCount; + PRUint8 i; + nsresult result = NS_ERROR_FAILURE; + + NS_ASSERTION(self,"no self"); + + self->GetInterfaceInfo(&iface_info); + NS_ASSERTION(iface_info,"no interface info"); + + iface_info->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"); + + 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_I8 : dp->val.i8 = *((PRInt32*) ap); break; + case nsXPTType::T_I16 : dp->val.i16 = *((PRInt32*) ap); break; + case nsXPTType::T_I32 : dp->val.i32 = *((PRInt32*) ap); break; + case nsXPTType::T_DOUBLE : dp->val.d = *((double*) ap); break; + case nsXPTType::T_U64 : dp->val.u64 = *((PRUint64*) ap); break; + case nsXPTType::T_I64 : dp->val.i64 = *((PRInt64*) ap); break; + case nsXPTType::T_U8 : dp->val.u8 = *((PRUint32*) ap); break; + case nsXPTType::T_U16 : dp->val.u16 = *((PRUint32*)ap); break; + case nsXPTType::T_U32 : dp->val.u32 = *((PRUint32*)ap); break; + case nsXPTType::T_FLOAT : dp->val.f = *((float*) ap); break; + case nsXPTType::T_BOOL : dp->val.b = *((PRBool*) ap); break; + case nsXPTType::T_CHAR : dp->val.c = *((PRUint32*) ap); break; + case nsXPTType::T_WCHAR : dp->val.wc = *((PRInt32*) ap); break; + default: + NS_ASSERTION(0, "bad type"); + break; + } + } + + result = self->CallMethod((PRUint16)methodIndex, info, dispatchParams); + + NS_RELEASE(iface_info); + + 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__ */ |