xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_aix.s

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

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	

mercurial