~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm64/kernel/kuser32.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /*
  3  * AArch32 user helpers.
  4  * Based on the kuser helpers in arch/arm/kernel/entry-armv.S.
  5  *
  6  * Copyright (C) 2005-2011 Nicolas Pitre <nico@fluxnic.net>
  7  * Copyright (C) 2012-2018 ARM Ltd.
  8  *
  9  * The kuser helpers below are mapped at a fixed address by
 10  * aarch32_setup_additional_pages() and are provided for compatibility
 11  * reasons with 32 bit (aarch32) applications that need them.
 12  *
 13  * See Documentation/arch/arm/kernel_user_helpers.rst for formal definitions.
 14  */
 15 
 16 #include <asm/unistd.h>
 17 
 18         .section .rodata
 19         .align  5
 20         .globl  __kuser_helper_start
 21 __kuser_helper_start:
 22 
 23 __kuser_cmpxchg64:                      // 0xffff0f60
 24         .inst   0xe92d00f0              //      push            {r4, r5, r6, r7}
 25         .inst   0xe1c040d0              //      ldrd            r4, r5, [r0]
 26         .inst   0xe1c160d0              //      ldrd            r6, r7, [r1]
 27         .inst   0xe1b20f9f              // 1:   ldrexd          r0, r1, [r2]
 28         .inst   0xe0303004              //      eors            r3, r0, r4
 29         .inst   0x00313005              //      eoreqs          r3, r1, r5
 30         .inst   0x01a23e96              //      stlexdeq        r3, r6, [r2]
 31         .inst   0x03330001              //      teqeq           r3, #1
 32         .inst   0x0afffff9              //      beq             1b
 33         .inst   0xf57ff05b              //      dmb             ish
 34         .inst   0xe2730000              //      rsbs            r0, r3, #0
 35         .inst   0xe8bd00f0              //      pop             {r4, r5, r6, r7}
 36         .inst   0xe12fff1e              //      bx              lr
 37 
 38         .align  5
 39 __kuser_memory_barrier:                 // 0xffff0fa0
 40         .inst   0xf57ff05b              //      dmb             ish
 41         .inst   0xe12fff1e              //      bx              lr
 42 
 43         .align  5
 44 __kuser_cmpxchg:                        // 0xffff0fc0
 45         .inst   0xe1923f9f              // 1:   ldrex           r3, [r2]
 46         .inst   0xe0533000              //      subs            r3, r3, r0
 47         .inst   0x01823e91              //      stlexeq         r3, r1, [r2]
 48         .inst   0x03330001              //      teqeq           r3, #1
 49         .inst   0x0afffffa              //      beq             1b
 50         .inst   0xf57ff05b              //      dmb             ish
 51         .inst   0xe2730000              //      rsbs            r0, r3, #0
 52         .inst   0xe12fff1e              //      bx              lr
 53 
 54         .align  5
 55 __kuser_get_tls:                        // 0xffff0fe0
 56         .inst   0xee1d0f70              //      mrc             p15, 0, r0, c13, c0, 3
 57         .inst   0xe12fff1e              //      bx              lr
 58         .rep    5
 59         .word   0
 60         .endr
 61 
 62 __kuser_helper_version:                 // 0xffff0ffc
 63         .word   ((__kuser_helper_end - __kuser_helper_start) >> 5)
 64         .globl  __kuser_helper_end
 65 __kuser_helper_end:

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php