Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 .set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4
6 .set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
7 .set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
8 .set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
9 .set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
10 .set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
11 .set r30,30; .set r31,31
12 .set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4
13 .set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9
14 .set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14
15 .set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19
16 .set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
17 .set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
18 .set f30,30; .set f31,31
19 .set BO_IF,12
20 .set CR0_EQ,2
22 .rename H.10.NO_SYMBOL{PR},""
23 .rename H.18.NS_InvokeByIndex{TC},"NS_InvokeByIndex"
26 # .text section
28 .csect H.10.NO_SYMBOL{PR}
29 .globl .NS_InvokeByIndex
30 .globl NS_InvokeByIndex{DS}
31 .extern .invoke_copy_to_stack
32 .extern ._ptrgl{PR}
34 #
35 # NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
36 # uint32_t paramCount, nsXPTCVariant* params)
37 #
39 .NS_InvokeByIndex:
40 mflr r0
41 std r31,-8(sp)
42 #
43 # save off the incoming values in the caller's parameter area
44 #
45 std r3,48(sp) # that
46 std r4,56(sp) # methodIndex
47 std r5,64(sp) # paramCount
48 std r6,72(sp) # params
49 std r0,16(sp)
50 stdu sp,-168(sp) # 2*24=48 for linkage area,
51 # 8*13=104 for fprData area
52 # 16 for saved registers
54 # prepare args for 'invoke_copy_to_stack' call
55 #
56 ld r4,232(sp) # paramCount (168+8+56)
57 ld r5,240(sp) # params
58 mr r6,sp # fprData
59 sldi r3,r4,3 # number of bytes of stack required
60 # is at most numParams*8
61 addi r3,r3,56 # linkage area (48) + this (8)
62 mr r31,sp # save original stack top
63 subfc sp,r3,sp # bump the stack
64 addi r3,sp,56 # parameter pointer excludes linkage area
65 # size + 'this'
67 bl .invoke_copy_to_stack
68 nop
70 lfd f1,0(r31) # Restore floating point registers
71 lfd f2,8(r31)
72 lfd f3,16(r31)
73 lfd f4,24(r31)
74 lfd f5,32(r31)
75 lfd f6,40(r31)
76 lfd f7,48(r31)
77 lfd f8,56(r31)
78 lfd f9,64(r31)
79 lfd f10,72(r31)
80 lfd f11,80(r31)
81 lfd f12,88(r31)
82 lfd f13,96(r31)
84 ld r3,216(r31) # that (168+48)
85 ld r4,0(r3) # get vTable from 'that'
86 ld r5,224(r31) # methodIndex (168+56)
87 sldi r5,r5,3 # methodIndex * 8
88 # No junk at the start of 64bit vtable !!!
89 ldx r11,r5,r4 # get function pointer (this jumps
90 # either to the function if no adjustment
91 # is needed (displacement = 0), or it
92 # jumps to the thunk code, which will jump
93 # to the function at the end)
95 # No adjustment of the that pointer in 64bit mode, this is done
96 # by the thunk code
98 ld r4,56(sp)
99 ld r5,64(sp)
100 ld r6,72(sp)
101 ld r7,80(sp)
102 ld r8,88(sp)
103 ld r9,96(sp)
104 ld r10,104(sp)
106 bl ._ptrgl{PR}
107 nop
109 mr sp,r31
110 ld r0,184(sp) # 168+16
111 addi sp,sp,168
112 mtlr r0
113 ld r31,-8(sp)
114 blr
116 # .data section
118 .toc # 0x00000038
119 T.18.NS_InvokeByIndex:
120 .tc H.18.NS_InvokeByIndex{TC},NS_InvokeByIndex{DS}
122 .csect NS_InvokeByIndex{DS}
123 .llong .NS_InvokeByIndex # "\0\0\0\0"
124 .llong TOC{TC0} # "\0\0\0008"
125 .llong 0x00000000 # "\0\0\0\0"
126 # End csect NS_InvokeByIndex{DS}
128 # .bss section