xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_sparc_netbsd.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 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
     2  *
     3  * This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 /* Platform specific code to invoke XPCOM methods on native objects */
     8         .global XPTC_InvokeByIndex
     9 /*
    10     XPTC_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
    11                    uint32_t paramCount, nsXPTCVariant* params);
    13 */
    14 XPTC_InvokeByIndex:
    15         save    %sp,-(64 + 16),%sp   ! room for the register window and
    16                                     ! struct pointer, rounded up to 0 % 16
    17         mov     %i2,%o0             ! paramCount
    18         call    invoke_count_words  ! returns the required stack size in %o0
    19         mov     %i3,%o1             ! params
    21 	sll     %o0,2,%l0           ! number of bytes
    22         sub     %sp,%l0,%sp         ! create the additional stack space
    24         mov     %sp,%o0             ! pointer for copied args
    25         add     %o0,72,%o0          ! step past the register window, the
    26                                     ! struct result pointer and the 'this' slot
    27         mov     %i2,%o1             ! paramCount
    28         call    invoke_copy_to_stack
    29         mov     %i3,%o2             ! params
    30 !
    31 !   calculate the target address from the vtable
    32 !
    33 	add	%i1,1,%i1	    ! vTable is zero-based, index is 1 based (?)	
    34 	ld	[%i0],%l1	    ! *that --> vTable
    35 	sll	%i1,3,%i1
    36 	add	%i1,%l1,%l1	    ! vTable[index * 8], l1 now points to vTable entry
    37 	lduh	[%l1],%l0	    ! this adjustor
    38 	sll	%l0,16,%l0          ! sign extend to 32 bits
    39 	sra     %l0,16,%l0
    40 	add     %l0,%i0,%i0         ! adjust this
    41         ld      [%l1 + 4],%l0       ! target address
    43 .L5:    ld      [%sp + 88],%o5
    44 .L4:	ld	[%sp + 84],%o4
    45 .L3:	ld	[%sp + 80],%o3
    46 .L2:	ld	[%sp + 76],%o2
    47 .L1:	ld	[%sp + 72],%o1
    48 .L0:
    49         jmpl    %l0,%o7             ! call the routine
    50 ! always have a 'this', from the incoming 'that'
    51 	mov	%i0,%o0
    53 	mov     %o0,%i0             ! propagate return value
    54         ret
    55         restore

mercurial