Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 #
2 # -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
3 #
4 # This Source Code Form is subject to the terms of the Mozilla Public
5 # License, v. 2.0. If a copy of the MPL was not distributed with this
6 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 .set r0,0; .set sp,1; .set RTOC,2; .set r3,3; .set r4,4
9 .set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
10 .set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
11 .set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
12 .set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
13 .set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
14 .set r30,30; .set r31,31
15 .set f0,0; .set f1,1; .set f2,2; .set f3,3; .set f4,4
16 .set f5,5; .set f6,6; .set f7,7; .set f8,8; .set f9,9
17 .set f10,10; .set f11,11; .set f12,12; .set f13,13; .set f14,14
18 .set f15,15; .set f16,16; .set f17,17; .set f18,18; .set f19,19
19 .set f20,20; .set f21,21; .set f22,22; .set f23,23; .set f24,24
20 .set f25,25; .set f26,26; .set f27,27; .set f28,28; .set f29,29
21 .set f30,30; .set f31,31
22 .set BO_IF,12
23 .set CR0_EQ,2
27 .rename H.10.NO_SYMBOL{PR},""
28 .rename H.18.NS_InvokeByIndex{TC},"NS_InvokeByIndex"
31 # .text section
33 .csect H.10.NO_SYMBOL{PR}
34 .globl .NS_InvokeByIndex
35 .globl NS_InvokeByIndex{DS}
36 .extern .invoke_copy_to_stack
37 .extern ._ptrgl{PR}
40 #
41 # NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
42 # uint32_t paramCount, nsXPTCVariant* params)
43 #
45 .NS_InvokeByIndex:
46 mflr r0
47 stw r31,-4(sp)
48 #
49 # save off the incoming values in the caller's parameter area
50 #
51 stw r3,24(sp) # that
52 stw r4,28(sp) # methodIndex
53 stw r5,32(sp) # paramCount
54 stw r6,36(sp) # params
55 stw r0,8(sp)
56 stwu sp,-136(sp) # = 24 for linkage area, 8 * 13 for fprData area, 8 for saved registers
58 # prepare args for 'invoke_copy_to_stack' call
59 #
60 lwz r4,168(sp) # paramCount
61 lwz r5,172(sp) # params
62 mr r6,sp # fprData
63 slwi r3,r4,3 # number of bytes of stack required
64 # at most 8*paramCount
65 addi r3,r3,28 # linkage area
66 mr r31,sp # save original stack top
67 subfc sp,r3,sp # bump the stack
68 addi r3,sp,28 # parameter pointer excludes linkage area size + 'this'
70 bl .invoke_copy_to_stack
71 nop
73 lfd f1,0(r31) # Restore floating point registers
74 lfd f2,8(r31)
75 lfd f3,16(r31)
76 lfd f4,24(r31)
77 lfd f5,32(r31)
78 lfd f6,40(r31)
79 lfd f7,48(r31)
80 lfd f8,56(r31)
81 lfd f9,64(r31)
82 lfd f10,72(r31)
83 lfd f11,80(r31)
84 lfd f12,88(r31)
85 lfd f13,96(r31)
87 lwz r3,160(r31) # that
88 lwz r4,0(r3) # get vTable from 'that'
89 lwz r5,164(r31) # methodIndex
90 slwi r5,r5,3 # methodIndex * 8
91 addi r5,r5,8 # step over junk at start of vTable !
92 lwzx r11,r5,r4 # get function pointer
94 addi r5,r5,4 # We need to manually adjust the 'that' pointer, this is CFRONT based
95 lwzx r5,r4,r5 # offset = r4(vtable) + r5(methodIndex offset) - 4
96 add r3,r5,r3 # adjust 'that' r3 = r3 + r5
98 lwz r4,28(sp)
99 lwz r5,32(sp)
100 lwz r6,36(sp)
101 lwz r7,40(sp)
102 lwz r8,44(sp)
103 lwz r9,48(sp)
104 lwz r10,52(sp)
106 bl ._ptrgl{PR}
107 nop
109 mr sp,r31
110 lwz r0,144(sp)
111 addi sp,sp,136
112 mtlr r0
113 lwz r31,-4(sp)
114 blr
117 # .data section
119 .toc # 0x00000038
120 T.18.NS_InvokeByIndex:
121 .tc H.18.NS_InvokeByIndex{TC},NS_InvokeByIndex{DS}
123 .csect NS_InvokeByIndex{DS}
124 .long .NS_InvokeByIndex # "\0\0\0\0"
125 .long TOC{TC0} # "\0\0\0008"
126 .long 0x00000000 # "\0\0\0\0"
127 # End csect NS_InvokeByIndex{DS}
129 # .bss section