The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/amd64/linux32/linux32_support.s

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright (c) 2007 Konstantin Belousov
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  *
   28  * $FreeBSD: releng/12.0/sys/amd64/linux32/linux32_support.s 337431 2018-08-07 18:29:10Z kib $
   29  */
   30 
   31 #include "linux32_assym.h"              /* system definitions */
   32 #include <machine/asmacros.h>           /* miscellaneous asm macros */
   33 
   34 #include "assym.inc"
   35 
   36 futex_fault:
   37         movq    $0,PCB_ONFAULT(%r8)
   38         movl    $-EFAULT,%eax
   39         ret
   40 
   41 ENTRY(futex_xchgl_nosmap)
   42         movq    PCPU(CURPCB),%r8
   43         movq    $futex_fault,PCB_ONFAULT(%r8)
   44         movq    $VM_MAXUSER_ADDRESS-4,%rax
   45         cmpq    %rax,%rsi
   46         ja      futex_fault
   47         xchgl   %edi,(%rsi)
   48         movl    %edi,(%rdx)
   49         xorl    %eax,%eax
   50         movq    %rax,PCB_ONFAULT(%r8)
   51         ret
   52 END(futex_xchgl_nosmap)
   53 
   54 ENTRY(futex_xchgl_smap)
   55         movq    PCPU(CURPCB),%r8
   56         movq    $futex_fault,PCB_ONFAULT(%r8)
   57         movq    $VM_MAXUSER_ADDRESS-4,%rax
   58         cmpq    %rax,%rsi
   59         ja      futex_fault
   60         stac
   61         xchgl   %edi,(%rsi)
   62         clac
   63         movl    %edi,(%rdx)
   64         xorl    %eax,%eax
   65         movq    %rax,PCB_ONFAULT(%r8)
   66         ret
   67 END(futex_xchgl_smap)
   68 
   69 ENTRY(futex_addl_nosmap)
   70         movq    PCPU(CURPCB),%r8
   71         movq    $futex_fault,PCB_ONFAULT(%r8)
   72         movq    $VM_MAXUSER_ADDRESS-4,%rax
   73         cmpq    %rax,%rsi
   74         ja      futex_fault
   75 #ifdef SMP
   76         lock
   77 #endif
   78         xaddl   %edi,(%rsi)
   79         movl    %edi,(%rdx)
   80         xorl    %eax,%eax
   81         movq    %rax,PCB_ONFAULT(%r8)
   82         ret
   83 END(futex_addl_nosmap)
   84 
   85 ENTRY(futex_addl_smap)
   86         movq    PCPU(CURPCB),%r8
   87         movq    $futex_fault,PCB_ONFAULT(%r8)
   88         movq    $VM_MAXUSER_ADDRESS-4,%rax
   89         cmpq    %rax,%rsi
   90         ja      futex_fault
   91         stac
   92 #ifdef SMP
   93         lock
   94 #endif
   95         xaddl   %edi,(%rsi)
   96         clac
   97         movl    %edi,(%rdx)
   98         xorl    %eax,%eax
   99         movq    %rax,PCB_ONFAULT(%r8)
  100         ret
  101 END(futex_addl_smap)
  102 
  103 ENTRY(futex_orl_nosmap)
  104         movq    PCPU(CURPCB),%r8
  105         movq    $futex_fault,PCB_ONFAULT(%r8)
  106         movq    $VM_MAXUSER_ADDRESS-4,%rax
  107         cmpq    %rax,%rsi
  108         ja      futex_fault
  109         movl    (%rsi),%eax
  110 1:      movl    %eax,%ecx
  111         orl     %edi,%ecx
  112 #ifdef SMP
  113         lock
  114 #endif
  115         cmpxchgl %ecx,(%rsi)
  116         jnz     1b
  117         movl    %eax,(%rdx)
  118         xorl    %eax,%eax
  119         movq    %rax,PCB_ONFAULT(%r8)
  120         ret
  121 END(futex_orl_nosmap)
  122 
  123 ENTRY(futex_orl_smap)
  124         movq    PCPU(CURPCB),%r8
  125         movq    $futex_fault,PCB_ONFAULT(%r8)
  126         movq    $VM_MAXUSER_ADDRESS-4,%rax
  127         cmpq    %rax,%rsi
  128         ja      futex_fault
  129         movl    (%rsi),%eax
  130 1:      movl    %eax,%ecx
  131         orl     %edi,%ecx
  132         stac
  133 #ifdef SMP
  134         lock
  135 #endif
  136         cmpxchgl %ecx,(%rsi)
  137         clac
  138         jnz     1b
  139         movl    %eax,(%rdx)
  140         xorl    %eax,%eax
  141         movq    %rax,PCB_ONFAULT(%r8)
  142         ret
  143 END(futex_orl_smap)
  144 
  145 ENTRY(futex_andl_nosmap)
  146         movq    PCPU(CURPCB),%r8
  147         movq    $futex_fault,PCB_ONFAULT(%r8)
  148         movq    $VM_MAXUSER_ADDRESS-4,%rax
  149         cmpq    %rax,%rsi
  150         ja      futex_fault
  151         movl    (%rsi),%eax
  152 1:      movl    %eax,%ecx
  153         andl    %edi,%ecx
  154 #ifdef SMP
  155         lock
  156 #endif
  157         cmpxchgl %ecx,(%rsi)
  158         jnz     1b
  159         movl    %eax,(%rdx)
  160         xorl    %eax,%eax
  161         movq    %rax,PCB_ONFAULT(%r8)
  162         ret
  163 END(futex_andl_nosmap)
  164 
  165 ENTRY(futex_andl_smap)
  166         movq    PCPU(CURPCB),%r8
  167         movq    $futex_fault,PCB_ONFAULT(%r8)
  168         movq    $VM_MAXUSER_ADDRESS-4,%rax
  169         cmpq    %rax,%rsi
  170         ja      futex_fault
  171         movl    (%rsi),%eax
  172 1:      movl    %eax,%ecx
  173         andl    %edi,%ecx
  174         stac
  175 #ifdef SMP
  176         lock
  177 #endif
  178         cmpxchgl %ecx,(%rsi)
  179         clac
  180         jnz     1b
  181         movl    %eax,(%rdx)
  182         xorl    %eax,%eax
  183         movq    %rax,PCB_ONFAULT(%r8)
  184         ret
  185 END(futex_andl_smap)
  186 
  187 ENTRY(futex_xorl_nosmap)
  188         movq    PCPU(CURPCB),%r8
  189         movq    $futex_fault,PCB_ONFAULT(%r8)
  190         movq    $VM_MAXUSER_ADDRESS-4,%rax
  191         cmpq    %rax,%rsi
  192         ja      futex_fault
  193         movl    (%rsi),%eax
  194 1:      movl    %eax,%ecx
  195         xorl    %edi,%ecx
  196 #ifdef SMP
  197         lock
  198 #endif
  199         cmpxchgl %ecx,(%rsi)
  200         jnz     1b
  201         movl    %eax,(%rdx)
  202         xorl    %eax,%eax
  203         movq    %rax,PCB_ONFAULT(%r8)
  204         ret
  205 END(futex_xorl_nosmap)
  206 
  207 ENTRY(futex_xorl_smap)
  208         movq    PCPU(CURPCB),%r8
  209         movq    $futex_fault,PCB_ONFAULT(%r8)
  210         movq    $VM_MAXUSER_ADDRESS-4,%rax
  211         cmpq    %rax,%rsi
  212         ja      futex_fault
  213         movl    (%rsi),%eax
  214 1:      movl    %eax,%ecx
  215         xorl    %edi,%ecx
  216         stac
  217 #ifdef SMP
  218         lock
  219 #endif
  220         cmpxchgl %ecx,(%rsi)
  221         clac
  222         jnz     1b
  223         movl    %eax,(%rdx)
  224         xorl    %eax,%eax
  225         movq    %rax,PCB_ONFAULT(%r8)
  226         ret
  227 END(futex_xorl_smap)

Cache object: 1abca48d3c94529eaa57bd4412f6a2ec


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.