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

TOMOYO Linux Cross Reference
Linux/arch/arm/lib/clear_user.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 ] ~

Diff markup

Differences between /arch/arm/lib/clear_user.S (Architecture sparc) and /arch/alpha/lib/clear_user.S (Architecture alpha)


  1 /* SPDX-License-Identifier: GPL-2.0-only */    !!   1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /*                                                  2 /*
  3  *  linux/arch/arm/lib/clear_user.S            !!   3  * arch/alpha/lib/clear_user.S
                                                   >>   4  * Contributed by Richard Henderson <rth@tamu.edu>
  4  *                                                  5  *
  5  *  Copyright (C) 1995, 1996,1997,1998 Russell !!   6  * Zero user space, handling exceptions as we go.
  6  */                                            !!   7  *
  7 #include <linux/linkage.h>                     !!   8  * We have to make sure that $0 is always up-to-date and contains the
  8 #include <asm/assembler.h>                     !!   9  * right "bytes left to zero" value (and that it is updated only _after_
  9 #include <asm/unwind.h>                        !!  10  * a successful copy).  There is also some rather minor exception setup
 10                                                !!  11  * stuff.
 11                 .text                          << 
 12                                                << 
 13 /* Prototype: unsigned long arm_clear_user(voi << 
 14  * Purpose  : clear some user memory           << 
 15  * Params   : addr - user memory address to cl << 
 16  *          : sz   - number of bytes to clear  << 
 17  * Returns  : number of bytes NOT cleared      << 
 18  */                                                12  */
 19 ENTRY(__clear_user_std)                        !!  13 #include <linux/export.h>
 20 WEAK(arm_clear_user)                           !!  14 
 21 UNWIND(.fnstart)                               !!  15 /* Allow an exception for an insn; exit if we get one.  */
 22 UNWIND(.save {r1, lr})                         !!  16 #define EX(x,y...)                      \
 23                 stmfd   sp!, {r1, lr}          !!  17         99: x,##y;                      \
 24                 mov     r2, #0                 !!  18         .section __ex_table,"a";        \
 25                 cmp     r1, #4                 !!  19         .long 99b - .;                  \
 26                 blt     2f                     !!  20         lda $31, $exception-99b($31);   \
 27                 ands    ip, r0, #3             !!  21         .previous
 28                 beq     1f                     !!  22 
 29                 cmp     ip, #2                 !!  23         .set noat
 30                 strusr  r2, r0, 1              !!  24         .set noreorder
 31                 strusr  r2, r0, 1, le          !!  25         .align 4
 32                 strusr  r2, r0, 1, lt          !!  26 
 33                 rsb     ip, ip, #4             !!  27         .globl __clear_user
 34                 sub     r1, r1, ip             !!  28         .ent __clear_user
 35 1:              subs    r1, r1, #8             !!  29         .frame  $30, 0, $26
 36                 strusr  r2, r0, 4, pl, rept=2  !!  30         .prologue 0
 37                 bpl     1b                     !!  31 
 38                 adds    r1, r1, #4             !!  32 $loop:
 39                 strusr  r2, r0, 4, pl          !!  33         and     $1, 3, $4       # e0    :
 40 2:              tst     r1, #2                 !!  34         beq     $4, 1f          # .. e1 :
 41                 strusr  r2, r0, 1, ne, rept=2  !!  35 
 42                 tst     r1, #1                 !!  36 0:      EX( stq_u $31, 0($16) ) # e0    : zero one word
 43                 it      ne                     !!  37         subq    $0, 8, $0       # .. e1 :
 44 USER(           strbtne r2, [r0])              !!  38         subq    $4, 1, $4       # e0    :
 45                 mov     r0, #0                 !!  39         addq    $16, 8, $16     # .. e1 :
 46                 ldmfd   sp!, {r1, pc}          !!  40         bne     $4, 0b          # e1    :
 47 UNWIND(.fnend)                                 !!  41         unop                    #       :
 48 ENDPROC(arm_clear_user)                        !!  42 
 49 ENDPROC(__clear_user_std)                      !!  43 1:      bic     $1, 3, $1       # e0    :
 50                                                !!  44         beq     $1, $tail       # .. e1 :
 51                 .pushsection .text.fixup,"ax"  !!  45 
 52                 .align  0                      !!  46 2:      EX( stq_u $31, 0($16) ) # e0    : zero four words
 53 9001:           ldmfd   sp!, {r0, pc}          !!  47         subq    $0, 8, $0       # .. e1 :
 54                 .popsection                    !!  48         EX( stq_u $31, 8($16) ) # e0    :
                                                   >>  49         subq    $0, 8, $0       # .. e1 :
                                                   >>  50         EX( stq_u $31, 16($16) )        # e0    :
                                                   >>  51         subq    $0, 8, $0       # .. e1 :
                                                   >>  52         EX( stq_u $31, 24($16) )        # e0    :
                                                   >>  53         subq    $0, 8, $0       # .. e1 :
                                                   >>  54         subq    $1, 4, $1       # e0    :
                                                   >>  55         addq    $16, 32, $16    # .. e1 :
                                                   >>  56         bne     $1, 2b          # e1    :
                                                   >>  57 
                                                   >>  58 $tail:
                                                   >>  59         bne     $2, 1f          # e1    : is there a tail to do?
                                                   >>  60         ret     $31, ($26), 1   # .. e1 :
                                                   >>  61 
                                                   >>  62 1:      EX( ldq_u $5, 0($16) )  # e0    :
                                                   >>  63         clr     $0              # .. e1 :
                                                   >>  64         nop                     # e1    :
                                                   >>  65         mskqh   $5, $0, $5      # e0    :
                                                   >>  66         EX( stq_u $5, 0($16) )  # e0    :
                                                   >>  67         ret     $31, ($26), 1   # .. e1 :
                                                   >>  68 
                                                   >>  69 __clear_user:
                                                   >>  70         and     $17, $17, $0
                                                   >>  71         and     $16, 7, $4      # e0    : find dest misalignment
                                                   >>  72         beq     $0, $zerolength # .. e1 :
                                                   >>  73         addq    $0, $4, $1      # e0    : bias counter
                                                   >>  74         and     $1, 7, $2       # e1    : number of bytes in tail
                                                   >>  75         srl     $1, 3, $1       # e0    :
                                                   >>  76         beq     $4, $loop       # .. e1 :
                                                   >>  77 
                                                   >>  78         EX( ldq_u $5, 0($16) )  # e0    : load dst word to mask back in
                                                   >>  79         beq     $1, $oneword    # .. e1 : sub-word store?
                                                   >>  80 
                                                   >>  81         mskql   $5, $16, $5     # e0    : take care of misaligned head
                                                   >>  82         addq    $16, 8, $16     # .. e1 :
                                                   >>  83         EX( stq_u $5, -8($16) ) # e0    :
                                                   >>  84         addq    $0, $4, $0      # .. e1 : bytes left -= 8 - misalignment
                                                   >>  85         subq    $1, 1, $1       # e0    :
                                                   >>  86         subq    $0, 8, $0       # .. e1 :
                                                   >>  87         br      $loop           # e1    :
                                                   >>  88         unop                    #       :
                                                   >>  89 
                                                   >>  90 $oneword:
                                                   >>  91         mskql   $5, $16, $4     # e0    :
                                                   >>  92         mskqh   $5, $2, $5      # e0    :
                                                   >>  93         or      $5, $4, $5      # e1    :
                                                   >>  94         EX( stq_u $5, 0($16) )  # e0    :
                                                   >>  95         clr     $0              # .. e1 :
                                                   >>  96 
                                                   >>  97 $zerolength:
                                                   >>  98 $exception:
                                                   >>  99         ret     $31, ($26), 1   # .. e1 :
 55                                                   100 
                                                   >> 101         .end __clear_user
                                                   >> 102         EXPORT_SYMBOL(__clear_user)
                                                      

~ [ 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