зеркало из https://github.com/mozilla/gecko-dev.git
Make Linux/alpha port work on gcc 3.x. b=86446 Patch from Glen Nakamura <glen@imodulo.com>. r=dbaron sr=shaver
This commit is contained in:
Родитель
9184d4fcf8
Коммит
eaaee58283
|
@ -20,6 +20,7 @@
|
|||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Glen Nakamura <glen@imodulo.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
|
@ -37,8 +38,6 @@
|
|||
|
||||
/* Platform specific code to invoke XPCOM methods on native objects */
|
||||
|
||||
/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
|
||||
|
||||
#include "xptcprivate.h"
|
||||
|
||||
/* Prototype specifies unmangled function name and disables unused warning */
|
||||
|
@ -163,7 +162,11 @@ __asm__(
|
|||
"bis $16,$16,$1\n\t" /* load "this" */
|
||||
"ldq $2,16($15)\n\t" /* load "methodIndex" */
|
||||
"ldq $1,0($1)\n\t" /* load vtable */
|
||||
#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
|
||||
"s8addq $2,$31,$2\n\t" /* vtable index = "methodIndex" * 8 */
|
||||
#else /* not G++ V3 ABI */
|
||||
"s8addq $2,16,$2\n\t" /* vtable index = "methodIndex" * 8 + 16 */
|
||||
#endif /* G++ V3 ABI */
|
||||
"addq $1,$2,$1\n\t"
|
||||
"ldq $27,0($1)\n\t" /* load address of function */
|
||||
"jsr $26,($27),0\n\t" /* call virtual function */
|
||||
|
@ -176,4 +179,3 @@ __asm__(
|
|||
"ret $31,($26),1\n\t"
|
||||
".end XPTC_InvokeByIndex"
|
||||
);
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Glen Nakamura <glen@imodulo.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
|
@ -37,8 +38,6 @@
|
|||
|
||||
/* Implement shared vtbl methods. */
|
||||
|
||||
/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
|
||||
|
||||
#include "xptcprivate.h"
|
||||
|
||||
/* Prototype specifies unmangled function name and disables unused warning */
|
||||
|
@ -188,23 +187,45 @@ __asm__(
|
|||
* nsresult nsXPTCStubBase::Stub##n()
|
||||
* Sets register $1 to "methodIndex" and jumps to SharedStub.
|
||||
*/
|
||||
#define STUB_MANGLED_ENTRY(n, symbol) \
|
||||
"#### Stub"#n" ####" "\n\t" \
|
||||
".text" "\n\t" \
|
||||
".align 5" "\n\t" \
|
||||
".globl " symbol "\n\t" \
|
||||
".ent " symbol "\n" \
|
||||
symbol ":" "\n\t" \
|
||||
".frame $30,0,$26,0" "\n\t" \
|
||||
"ldgp $29,0($27)" "\n" \
|
||||
"$" symbol "..ng:" "\n\t" \
|
||||
".prologue 1" "\n\t" \
|
||||
"lda $1,"#n "\n\t" \
|
||||
"br $31,$SharedStub..ng" "\n\t" \
|
||||
".end " symbol
|
||||
|
||||
#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
|
||||
|
||||
#define STUB_ENTRY(n) \
|
||||
__asm__( \
|
||||
"#### Stub"#n" ####\n" \
|
||||
".text\n\t" \
|
||||
".align 5\n\t" \
|
||||
".globl Stub"#n"__14nsXPTCStubBase\n\t" \
|
||||
".ent Stub"#n"__14nsXPTCStubBase\n" \
|
||||
"Stub"#n"__14nsXPTCStubBase:\n\t" \
|
||||
".frame $30,0,$26,0\n\t" \
|
||||
"ldgp $29,0($27)\n" \
|
||||
"$Stub"#n"__14nsXPTCStubBase..ng:\n\t" \
|
||||
".prologue 1\n\t" \
|
||||
"lda $1,"#n"\n\t" \
|
||||
"br $31,$SharedStub..ng\n\t" \
|
||||
".end Stub"#n"__14nsXPTCStubBase" \
|
||||
".if "#n" < 10" "\n\t" \
|
||||
STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase5Stub"#n"Ev") "\n\t" \
|
||||
".elseif "#n" < 100" "\n\t" \
|
||||
STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase6Stub"#n"Ev") "\n\t" \
|
||||
".elseif "#n" < 1000" "\n\t" \
|
||||
STUB_MANGLED_ENTRY(n, "_ZN14nsXPTCStubBase7Stub"#n"Ev") "\n\t" \
|
||||
".else" "\n\t" \
|
||||
".err \"Stub"#n" >= 1000 not yet supported.\"" "\n\t" \
|
||||
".endif" \
|
||||
);
|
||||
|
||||
#else /* not G++ V3 ABI */
|
||||
|
||||
#define STUB_ENTRY(n) \
|
||||
__asm__( \
|
||||
STUB_MANGLED_ENTRY(n, "Stub"#n"__14nsXPTCStubBase") \
|
||||
);
|
||||
|
||||
#endif /* G++ V3 ABI */
|
||||
|
||||
#define SENTINEL_ENTRY(n) \
|
||||
nsresult nsXPTCStubBase::Sentinel##n() \
|
||||
{ \
|
||||
|
@ -213,4 +234,3 @@ nsresult nsXPTCStubBase::Sentinel##n() \
|
|||
}
|
||||
|
||||
#include "xptcstubsdef.inc"
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче