123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837 |
- #include <asm/asmmacro.h>
- #include <asm/errno.h>
- #include <asm/asm-offsets.h>
- #include <asm/percpu.h>
- #include <asm/thread_info.h>
- #include <asm/sal.h>
- #include <asm/signal.h>
- #include <asm/unistd.h>
- #include "entry.h"
- #include <asm/native/inst.h>
- ENTRY(fsys_ni_syscall)
- .prologue
- .altrp b6
- .body
- mov r8=ENOSYS
- mov r10=-1
- FSYS_RETURN
- END(fsys_ni_syscall)
- ENTRY(fsys_getpid)
- .prologue
- .altrp b6
- .body
- add r17=IA64_TASK_GROUP_LEADER_OFFSET,r16
- ;;
- ld8 r17=[r17]
- add r9=TI_FLAGS+IA64_TASK_SIZE,r16
- ;;
- ld4 r9=[r9]
- add r17=IA64_TASK_TGIDLINK_OFFSET,r17
- ;;
- and r9=TIF_ALLWORK_MASK,r9
- ld8 r17=[r17]
- ;;
- add r8=IA64_PID_LEVEL_OFFSET,r17
- ;;
- ld4 r8=[r8]
- add r17=IA64_PID_UPID_OFFSET,r17
- ;;
- shl r8=r8,IA64_UPID_SHIFT
- ;;
- add r17=r17,r8
- ;;
- ld4 r8=[r17]
- ;;
- mov r17=0
- ;;
- cmp.ne p8,p0=0,r9
- (p8) br.spnt.many fsys_fallback_syscall
- FSYS_RETURN
- END(fsys_getpid)
- ENTRY(fsys_set_tid_address)
- .prologue
- .altrp b6
- .body
- add r9=TI_FLAGS+IA64_TASK_SIZE,r16
- add r17=IA64_TASK_TGIDLINK_OFFSET,r16
- ;;
- ld4 r9=[r9]
- tnat.z p6,p7=r32
- ld8 r17=[r17]
- ;;
- and r9=TIF_ALLWORK_MASK,r9
- add r8=IA64_PID_LEVEL_OFFSET,r17
- add r18=IA64_TASK_CLEAR_CHILD_TID_OFFSET,r16
- ;;
- ld4 r8=[r8]
- add r17=IA64_PID_UPID_OFFSET,r17
- ;;
- shl r8=r8,IA64_UPID_SHIFT
- ;;
- add r17=r17,r8
- ;;
- ld4 r8=[r17]
- ;;
- cmp.ne p8,p0=0,r9
- mov r17=-1
- ;;
- (p6) st8 [r18]=r32
- (p7) st8 [r18]=r17
- (p8) br.spnt.many fsys_fallback_syscall
- ;;
- mov r17=0
- mov r18=0
- FSYS_RETURN
- END(fsys_set_tid_address)
- #if IA64_GTOD_SEQ_OFFSET !=0
- #error fsys_gettimeofday incompatible with changes to struct fsyscall_gtod_data_t
- #endif
- #if IA64_ITC_JITTER_OFFSET !=0
- #error fsys_gettimeofday incompatible with changes to struct itc_jitter_data_t
- #endif
- #define CLOCK_REALTIME 0
- #define CLOCK_MONOTONIC 1
- #define CLOCK_DIVIDE_BY_1000 0x4000
- #define CLOCK_ADD_MONOTONIC 0x8000
- ENTRY(fsys_gettimeofday)
- .prologue
- .altrp b6
- .body
- mov r31 = r32
- tnat.nz p6,p0 = r33
- (p6) br.cond.spnt.few .fail_einval
- mov r30 = CLOCK_DIVIDE_BY_1000
- ;;
- .gettime:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- add r2 = TI_FLAGS+IA64_TASK_SIZE,r16
- tnat.nz p6,p0 = r31
- (p6) br.cond.spnt.few .fail_einval
- movl r20 = fsyscall_gtod_data
- ;;
- ld4 r2 = [r2]
- movl r29 = itc_jitter_data
- add r22 = IA64_GTOD_WALL_TIME_OFFSET,r20
- add r21 = IA64_CLKSRC_MMIO_OFFSET,r20
- mov pr = r30,0xc000
- ;;
- and r2 = TIF_ALLWORK_MASK,r2
- add r19 = IA64_ITC_LASTCYCLE_OFFSET,r29
- (p15) add r22 = IA64_GTOD_MONO_TIME_OFFSET,r20
- ;;
- add r26 = IA64_CLKSRC_CYCLE_LAST_OFFSET,r20
- cmp.ne p6, p0 = 0, r2
- (p6) br.cond.spnt.many fsys_fallback_syscall
- ;;
-
- .time_redo:
- ld4.acq r28 = [r20]
- ;;
- and r28 = ~1,r28
- ;;
- ld8 r30 = [r21]
- add r24 = IA64_CLKSRC_MULT_OFFSET,r20
- ld4 r2 = [r29]
- add r23 = IA64_CLKSRC_SHIFT_OFFSET,r20
- add r14 = IA64_CLKSRC_MASK_OFFSET,r20
- ;;
- ld4 r3 = [r24]
- ld8 r14 = [r14]
- cmp.eq p8,p9 = 0,r30
- ;;
- setf.sig f7 = r3
- (p8) cmp.ne p13,p0 = r2,r0
- ld4 r23 = [r23]
- ld8 r24 = [r26]
- (p9) cmp.eq p13,p0 = 0,r30
- ;;
- .pred.rel.mutex p8,p9
- MOV_FROM_ITC(p8, p6, r2, r10)
- (p9) ld8 r2 = [r30]
- (p13) ld8 r25 = [r19]
- ld8 r9 = [r22],IA64_TIMESPEC_TV_NSEC_OFFSET
- ;;
- ld8 r8 = [r22],-IA64_TIMESPEC_TV_NSEC_OFFSET
- (p13) sub r3 = r25,r2
- ;;
- (p13) cmp.gt.unc p6,p7 = r3,r0
- sub r10 = r2,r24
- ;;
- (p6) sub r10 = r25,r24
- (p7) mov ar.ccv = r25
- ;;
- (p7) cmpxchg8.rel r3 = [r19],r2,ar.ccv
- ;;
- (p7) cmp.ne p7,p0 = r25,r3
- ;;
- (p7) sub r10 = r3,r24
- ;;
- and r10 = r10,r14
- ;;
- setf.sig f8 = r10
- nop.i 123
- ;;
-
- EX(.fail_efault, probe.w.fault r31, 3)
- xmpy.l f8 = f8,f7
- ;;
- getf.sig r2 = f8
- mf
- ;;
- ld4 r10 = [r20]
- shr.u r2 = r2,r23
- ;;
- add r8 = r8,r2
- cmp4.ne p7,p0 = r28,r10
- (p7) br.cond.dpnt.few .time_redo
-
-
- mov r10 = r0
- movl r2 = 1000000000
- add r23 = IA64_TIMESPEC_TV_NSEC_OFFSET, r31
- (p14) movl r3 = 2361183241434822607
- ;;
- .time_normalize:
- mov r21 = r8
- cmp.ge p6,p0 = r8,r2
- (p14) shr.u r20 = r8, 3
- ;;
- (p14) setf.sig f8 = r20
- (p6) sub r8 = r8,r2
- (p6) add r9 = 1,r9
- (p14) setf.sig f7 = r3
- (p6) br.cond.dpnt.few .time_normalize
- ;;
-
-
-
- EX(.fail_efault, probe.w.fault r23, 3)
- (p14) xmpy.hu f8 = f8, f7
- ;;
- (p14) getf.sig r2 = f8
- ;;
- mov r8 = r0
- (p14) shr.u r21 = r2, 4
- ;;
- EX(.fail_efault, st8 [r31] = r9)
- EX(.fail_efault, st8 [r23] = r21)
- FSYS_RETURN
- .fail_einval:
- mov r8 = EINVAL
- mov r10 = -1
- FSYS_RETURN
- .fail_efault:
- mov r8 = EFAULT
- mov r10 = -1
- FSYS_RETURN
- END(fsys_gettimeofday)
- ENTRY(fsys_clock_gettime)
- .prologue
- .altrp b6
- .body
- cmp4.ltu p6, p0 = CLOCK_MONOTONIC, r32
-
- (p6) br.spnt.few fsys_fallback_syscall
- mov r31 = r33
- shl r30 = r32,15
- br.many .gettime
- END(fsys_clock_gettime)
- ENTRY(fsys_getcpu)
- .prologue
- .altrp b6
- .body
- ;;
- add r2=TI_FLAGS+IA64_TASK_SIZE,r16
- tnat.nz p6,p0 = r32
- add r3=TI_CPU+IA64_TASK_SIZE,r16
- ;;
- ld4 r3=[r3]
- ld4 r2=[r2]
- (p6) br.cond.spnt.few .fail_einval
- ;;
- tnat.nz p7,p0 = r33
- (p7) br.cond.spnt.few .fail_einval
- ;;
- cmp.ne p6,p0=r32,r0
- cmp.ne p7,p0=r33,r0
- ;;
- #ifdef CONFIG_NUMA
- movl r17=cpu_to_node_map
- ;;
- EX(.fail_efault, (p6) probe.w.fault r32, 3)
- EX(.fail_efault, (p7) probe.w.fault r33, 3)
- shladd r18=r3,1,r17
- ;;
- ld2 r20=[r18]
- and r2 = TIF_ALLWORK_MASK,r2
- ;;
- cmp.ne p8,p0=0,r2
- (p8) br.spnt.many fsys_fallback_syscall
- ;;
- ;;
- EX(.fail_efault, (p6) st4 [r32] = r3)
- EX(.fail_efault, (p7) st2 [r33] = r20)
- mov r8=0
- ;;
- #else
- EX(.fail_efault, (p6) probe.w.fault r32, 3)
- EX(.fail_efault, (p7) probe.w.fault r33, 3)
- and r2 = TIF_ALLWORK_MASK,r2
- ;;
- cmp.ne p8,p0=0,r2
- (p8) br.spnt.many fsys_fallback_syscall
- ;;
- EX(.fail_efault, (p6) st4 [r32] = r3)
- EX(.fail_efault, (p7) st2 [r33] = r0)
- mov r8=0
- ;;
- #endif
- FSYS_RETURN
- END(fsys_getcpu)
- ENTRY(fsys_fallback_syscall)
- .prologue
- .altrp b6
- .body
-
- adds r17=-1024,r15
- movl r14=sys_call_table
- ;;
- RSM_PSR_I(p0, r26, r27)
- shladd r18=r17,3,r14
- ;;
- ld8 r18=[r18]
- MOV_FROM_PSR(p0, r29, r26)
- mov r27=ar.rsc
- mov r21=ar.fpsr
- mov r26=ar.pfs
- END(fsys_fallback_syscall)
-
- GLOBAL_ENTRY(fsys_bubble_down)
- .prologue
- .altrp b6
- .body
-
-
- # define PSR_ONE_BITS ((3 << IA64_PSR_CPL0_BIT) \
- | (0x1 << IA64_PSR_RI_BIT) \
- | IA64_PSR_BN | IA64_PSR_I)
- invala
- movl r14=ia64_ret_from_syscall
- nop.m 0
- movl r28=__kernel_syscall_via_break
- ;;
- mov r2=r16
- adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16
- mov r31=pr
- ;;
- st1 [r16]=r0
- addl r22=IA64_RBS_OFFSET,r2
- add r3=TI_FLAGS+IA64_TASK_SIZE,r2
- ;;
- ld4 r3=[r3]
- lfetch.fault.excl.nt1 [r22]
- nop.i 0
- ;;
- mov ar.rsc=0
- #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
- MOV_FROM_ITC(p0, p6, r30, r23)
- #else
- nop.m 0
- #endif
- nop.i 0
- ;;
- mov r23=ar.bspstore
- mov.m r24=ar.rnat
- nop.i 0
- ;;
- mov ar.bspstore=r22
- movl r8=PSR_ONE_BITS
- ;;
- mov r25=ar.unat
- mov r19=b6
- mov r20=r1
- ;;
- or r29=r8,r29
- mov b6=r18
- addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2
- mov r18=ar.bsp
- cmp.ne pKStk,pUStk=r0,r0
- br.call.sptk.many b7=ia64_syscall_setup
- ;;
- #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
-
- add r16=TI_AC_STAMP+IA64_TASK_SIZE,r2
- add r17=TI_AC_LEAVE+IA64_TASK_SIZE,r2
- ;;
- ld8 r18=[r16],TI_AC_STIME-TI_AC_STAMP
- ld8 r19=[r17],TI_AC_UTIME-TI_AC_LEAVE
- ;;
- ld8 r20=[r16],TI_AC_STAMP-TI_AC_STIME
- ld8 r21=[r17]
- sub r22=r19,r18
- ;;
- st8 [r16]=r30,TI_AC_STIME-TI_AC_STAMP
- sub r18=r30,r19
- ;;
- add r20=r20,r22
- add r21=r21,r18
- ;;
- st8 [r16]=r20
- st8 [r17]=r21
- ;;
- #endif
- mov ar.rsc=0x3
- mov rp=r14
- and r3=_TIF_SYSCALL_TRACEAUDIT,r3
- ;;
- SSM_PSR_I(p0, p6, r22)
- cmp.eq p8,p0=r3,r0
- (p10) br.cond.spnt.many ia64_ret_from_syscall
- nop.m 0
- (p8) br.call.sptk.many b6=b6
- br.cond.spnt ia64_trace_syscall
- END(fsys_bubble_down)
- .rodata
- .align 8
- .globl fsyscall_table
- data8 fsys_bubble_down
- fsyscall_table:
- data8 fsys_ni_syscall
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 fsys_getpid
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 fsys_gettimeofday
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 fsys_set_tid_address
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 fsys_clock_gettime
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 0
- data8 fsys_getcpu
-
- .zero:
- .space fsyscall_table + 8*NR_syscalls - .zero, 0
|