Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * sys32.S: I-cache tricks for 32-bit compatibility layer simple
0004  *          conversions.
0005  *
0006  * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
0007  * Copyright (C) 1998 Jakub Jelinek   (jj@ultra.linux.cz)
0008  */
0009 
0010 #include <asm/errno.h>
0011 
0012 /* NOTE: call as jump breaks return stack, we have to avoid that */
0013 
0014     .text
0015 
0016     .globl      sys32_mmap2
0017 sys32_mmap2:
0018     sethi       %hi(sys_mmap), %g1
0019     jmpl        %g1 + %lo(sys_mmap), %g0
0020      sllx       %o5, 12, %o5
0021 
0022     .align      32
0023     .globl      sys32_socketcall
0024 sys32_socketcall:   /* %o0=call, %o1=args */
0025     cmp     %o0, 1
0026     bl,pn       %xcc, do_einval
0027      cmp        %o0, 18
0028     bg,pn       %xcc, do_einval
0029      sub        %o0, 1, %o0
0030     sllx        %o0, 5, %o0
0031     sethi       %hi(__socketcall_table_begin), %g2
0032     or      %g2, %lo(__socketcall_table_begin), %g2
0033     jmpl        %g2 + %o0, %g0
0034      nop
0035 do_einval:
0036     retl
0037      mov        -EINVAL, %o0
0038 
0039     .align      32
0040 __socketcall_table_begin:
0041 
0042     /* Each entry is exactly 32 bytes. */
0043 do_sys_socket: /* sys_socket(int, int, int) */
0044 1:  ldswa       [%o1 + 0x0] %asi, %o0
0045     sethi       %hi(sys_socket), %g1
0046 2:  ldswa       [%o1 + 0x8] %asi, %o2
0047     jmpl        %g1 + %lo(sys_socket), %g0
0048 3:   ldswa      [%o1 + 0x4] %asi, %o1
0049     nop
0050     nop
0051     nop
0052 do_sys_bind: /* sys_bind(int fd, struct sockaddr *, int) */
0053 4:  ldswa       [%o1 + 0x0] %asi, %o0
0054     sethi       %hi(sys_bind), %g1
0055 5:  ldswa       [%o1 + 0x8] %asi, %o2
0056     jmpl        %g1 + %lo(sys_bind), %g0
0057 6:   lduwa      [%o1 + 0x4] %asi, %o1
0058     nop
0059     nop
0060     nop
0061 do_sys_connect: /* sys_connect(int, struct sockaddr *, int) */
0062 7:  ldswa       [%o1 + 0x0] %asi, %o0
0063     sethi       %hi(sys_connect), %g1
0064 8:  ldswa       [%o1 + 0x8] %asi, %o2
0065     jmpl        %g1 + %lo(sys_connect), %g0
0066 9:   lduwa      [%o1 + 0x4] %asi, %o1
0067     nop
0068     nop
0069     nop
0070 do_sys_listen: /* sys_listen(int, int) */
0071 10: ldswa       [%o1 + 0x0] %asi, %o0
0072     sethi       %hi(sys_listen), %g1
0073     jmpl        %g1 + %lo(sys_listen), %g0
0074 11:  ldswa      [%o1 + 0x4] %asi, %o1
0075     nop
0076     nop
0077     nop
0078     nop
0079 do_sys_accept: /* sys_accept(int, struct sockaddr *, int *) */
0080 12: ldswa       [%o1 + 0x0] %asi, %o0
0081     sethi       %hi(sys_accept), %g1
0082 13: lduwa       [%o1 + 0x8] %asi, %o2
0083     jmpl        %g1 + %lo(sys_accept), %g0
0084 14:  lduwa      [%o1 + 0x4] %asi, %o1
0085     nop
0086     nop
0087     nop
0088 do_sys_getsockname: /* sys_getsockname(int, struct sockaddr *, int *) */
0089 15: ldswa       [%o1 + 0x0] %asi, %o0
0090     sethi       %hi(sys_getsockname), %g1
0091 16: lduwa       [%o1 + 0x8] %asi, %o2
0092     jmpl        %g1 + %lo(sys_getsockname), %g0
0093 17:  lduwa      [%o1 + 0x4] %asi, %o1
0094     nop
0095     nop
0096     nop
0097 do_sys_getpeername: /* sys_getpeername(int, struct sockaddr *, int *) */
0098 18: ldswa       [%o1 + 0x0] %asi, %o0
0099     sethi       %hi(sys_getpeername), %g1
0100 19: lduwa       [%o1 + 0x8] %asi, %o2
0101     jmpl        %g1 + %lo(sys_getpeername), %g0
0102 20:  lduwa      [%o1 + 0x4] %asi, %o1
0103     nop
0104     nop
0105     nop
0106 do_sys_socketpair: /* sys_socketpair(int, int, int, int *) */
0107 21: ldswa       [%o1 + 0x0] %asi, %o0
0108     sethi       %hi(sys_socketpair), %g1
0109 22: ldswa       [%o1 + 0x8] %asi, %o2
0110 23: lduwa       [%o1 + 0xc] %asi, %o3
0111     jmpl        %g1 + %lo(sys_socketpair), %g0
0112 24:  ldswa      [%o1 + 0x4] %asi, %o1
0113     nop
0114     nop
0115 do_sys_send: /* sys_send(int, void *, size_t, unsigned int) */
0116 25: ldswa       [%o1 + 0x0] %asi, %o0
0117     sethi       %hi(sys_send), %g1
0118 26: lduwa       [%o1 + 0x8] %asi, %o2
0119 27: lduwa       [%o1 + 0xc] %asi, %o3
0120     jmpl        %g1 + %lo(sys_send), %g0
0121 28:  lduwa      [%o1 + 0x4] %asi, %o1
0122     nop
0123     nop
0124 do_sys_recv: /* sys_recv(int, void *, size_t, unsigned int) */
0125 29: ldswa       [%o1 + 0x0] %asi, %o0
0126     sethi       %hi(sys_recv), %g1
0127 30: lduwa       [%o1 + 0x8] %asi, %o2
0128 31: lduwa       [%o1 + 0xc] %asi, %o3
0129     jmpl        %g1 + %lo(sys_recv), %g0
0130 32:  lduwa      [%o1 + 0x4] %asi, %o1
0131     nop
0132     nop
0133 do_sys_sendto: /* sys_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
0134 33: ldswa       [%o1 + 0x0] %asi, %o0
0135     sethi       %hi(sys_sendto), %g1
0136 34: lduwa       [%o1 + 0x8] %asi, %o2
0137 35: lduwa       [%o1 + 0xc] %asi, %o3
0138 36: lduwa       [%o1 + 0x10] %asi, %o4
0139 37: ldswa       [%o1 + 0x14] %asi, %o5
0140     jmpl        %g1 + %lo(sys_sendto), %g0
0141 38:  lduwa      [%o1 + 0x4] %asi, %o1
0142 do_sys_recvfrom: /* sys_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
0143 39: ldswa       [%o1 + 0x0] %asi, %o0
0144     sethi       %hi(sys_recvfrom), %g1
0145 40: lduwa       [%o1 + 0x8] %asi, %o2
0146 41: lduwa       [%o1 + 0xc] %asi, %o3
0147 42: lduwa       [%o1 + 0x10] %asi, %o4
0148 43: lduwa       [%o1 + 0x14] %asi, %o5
0149     jmpl        %g1 + %lo(sys_recvfrom), %g0
0150 44:  lduwa      [%o1 + 0x4] %asi, %o1
0151 do_sys_shutdown: /* sys_shutdown(int, int) */
0152 45: ldswa       [%o1 + 0x0] %asi, %o0
0153     sethi       %hi(sys_shutdown), %g1
0154     jmpl        %g1 + %lo(sys_shutdown), %g0
0155 46:  ldswa      [%o1 + 0x4] %asi, %o1
0156     nop
0157     nop
0158     nop
0159     nop
0160 do_sys_setsockopt: /* sys_setsockopt(int, int, int, char *, int) */
0161 47: ldswa       [%o1 + 0x0] %asi, %o0
0162     sethi       %hi(sys_setsockopt), %g1
0163 48: ldswa       [%o1 + 0x8] %asi, %o2
0164 49: lduwa       [%o1 + 0xc] %asi, %o3
0165 50: ldswa       [%o1 + 0x10] %asi, %o4
0166     jmpl        %g1 + %lo(sys_setsockopt), %g0
0167 51:  ldswa      [%o1 + 0x4] %asi, %o1
0168     nop
0169 do_sys_getsockopt: /* sys_getsockopt(int, int, int, u32, u32) */
0170 52: ldswa       [%o1 + 0x0] %asi, %o0
0171     sethi       %hi(sys_getsockopt), %g1
0172 53: ldswa       [%o1 + 0x8] %asi, %o2
0173 54: lduwa       [%o1 + 0xc] %asi, %o3
0174 55: lduwa       [%o1 + 0x10] %asi, %o4
0175     jmpl        %g1 + %lo(sys_getsockopt), %g0
0176 56:  ldswa      [%o1 + 0x4] %asi, %o1
0177     nop
0178 do_sys_sendmsg: /* compat_sys_sendmsg(int, struct compat_msghdr *, unsigned int) */
0179 57: ldswa       [%o1 + 0x0] %asi, %o0
0180     sethi       %hi(compat_sys_sendmsg), %g1
0181 58: lduwa       [%o1 + 0x8] %asi, %o2
0182     jmpl        %g1 + %lo(compat_sys_sendmsg), %g0
0183 59:  lduwa      [%o1 + 0x4] %asi, %o1
0184     nop
0185     nop
0186     nop
0187 do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) */
0188 60: ldswa       [%o1 + 0x0] %asi, %o0
0189     sethi       %hi(compat_sys_recvmsg), %g1
0190 61: lduwa       [%o1 + 0x8] %asi, %o2
0191     jmpl        %g1 + %lo(compat_sys_recvmsg), %g0
0192 62:  lduwa      [%o1 + 0x4] %asi, %o1
0193     nop
0194     nop
0195     nop
0196 do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
0197 63: ldswa       [%o1 + 0x0] %asi, %o0
0198     sethi       %hi(sys_accept4), %g1
0199 64: lduwa       [%o1 + 0x8] %asi, %o2
0200 65: ldswa       [%o1 + 0xc] %asi, %o3
0201     jmpl        %g1 + %lo(sys_accept4), %g0
0202 66:  lduwa      [%o1 + 0x4] %asi, %o1
0203     nop
0204     nop
0205 
0206     .section    __ex_table,"a"
0207     .align      4
0208     .word       1b, __retl_efault, 2b, __retl_efault
0209     .word       3b, __retl_efault, 4b, __retl_efault
0210     .word       5b, __retl_efault, 6b, __retl_efault
0211     .word       7b, __retl_efault, 8b, __retl_efault
0212     .word       9b, __retl_efault, 10b, __retl_efault
0213     .word       11b, __retl_efault, 12b, __retl_efault
0214     .word       13b, __retl_efault, 14b, __retl_efault
0215     .word       15b, __retl_efault, 16b, __retl_efault
0216     .word       17b, __retl_efault, 18b, __retl_efault
0217     .word       19b, __retl_efault, 20b, __retl_efault
0218     .word       21b, __retl_efault, 22b, __retl_efault
0219     .word       23b, __retl_efault, 24b, __retl_efault
0220     .word       25b, __retl_efault, 26b, __retl_efault
0221     .word       27b, __retl_efault, 28b, __retl_efault
0222     .word       29b, __retl_efault, 30b, __retl_efault
0223     .word       31b, __retl_efault, 32b, __retl_efault
0224     .word       33b, __retl_efault, 34b, __retl_efault
0225     .word       35b, __retl_efault, 36b, __retl_efault
0226     .word       37b, __retl_efault, 38b, __retl_efault
0227     .word       39b, __retl_efault, 40b, __retl_efault
0228     .word       41b, __retl_efault, 42b, __retl_efault
0229     .word       43b, __retl_efault, 44b, __retl_efault
0230     .word       45b, __retl_efault, 46b, __retl_efault
0231     .word       47b, __retl_efault, 48b, __retl_efault
0232     .word       49b, __retl_efault, 50b, __retl_efault
0233     .word       51b, __retl_efault, 52b, __retl_efault
0234     .word       53b, __retl_efault, 54b, __retl_efault
0235     .word       55b, __retl_efault, 56b, __retl_efault
0236     .word       57b, __retl_efault, 58b, __retl_efault
0237     .word       59b, __retl_efault, 60b, __retl_efault
0238     .word       61b, __retl_efault, 62b, __retl_efault
0239     .word       63b, __retl_efault, 64b, __retl_efault
0240     .word       65b, __retl_efault, 66b, __retl_efault
0241     .previous