OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [x86_64/] [ia32/] [ia32entry.S] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * Compatibility mode system call entry point for x86-64.
3
 *
4
 * Copyright 2000,2001 Andi Kleen, SuSE Labs.
5
 *
6
 * $Id: ia32entry.S,v 1.1.1.1 2004-04-15 01:36:41 phoenix Exp $
7
 */
8
 
9
#include 
10
#include 
11
#include 
12
#include 
13
#include 
14
#include 
15
 
16
        .macro IA32_ARG_FIXUP
17
        movl    %edi,%r8d
18
        movl    %ebp,%r9d
19
        xchg    %ecx,%esi
20
        movl    %ebx,%edi
21
        movl    %edx,%edx       /* zero extension */
22
        .endm
23
 
24
/*
25
 * 32bit SYSCALL instruction entry.
26
 */
27
ENTRY(ia32_cstar_target)
28
        movq $-ENOSYS,%rax
29
        sysretl
30
 
31
/*
32
 * Emulated IA32 system calls via int 0x80.
33
 *
34
 * Arguments:
35
 * %eax System call number.
36
 * %ebx Arg1
37
 * %ecx Arg2
38
 * %edx Arg3
39
 * %esi Arg4
40
 * %edi Arg5
41
 * %ebp Arg6    [note: not saved in the stack frame, should not be touched]
42
 *
43
 * Notes:
44
 * Uses the same stack frame as the x86-64 version.
45
 * All registers except %eax must be saved (but ptrace may violate that)
46
 * Arguments are zero extended. For system calls that want sign extension and
47
 * take long arguments a wrapper is needed. Most calls can just be called
48
 * directly.
49
 * Assumes it is only called from user space and entered with interrups off.
50
 */
51
 
52
ENTRY(ia32_syscall)
53
        swapgs
54
        sti
55
        pushq %rax
56
        cld
57
        SAVE_ARGS
58
        GET_CURRENT(%r10)
59
        testl $PT_TRACESYS,tsk_ptrace(%r10)
60
        jne  ia32_tracesys
61
        cmpl $(IA32_NR_syscalls),%eax
62
        jae  ia32_badsys
63
        IA32_ARG_FIXUP
64
        call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
65
        movq %rax,RAX-ARGOFFSET(%rsp)
66
        jmp int_ret_from_sys_call
67
 
68
ia32_tracesys:
69
        SAVE_REST
70
        movq $-ENOSYS,RAX(%rsp)
71
        movq %rsp,%rdi        /* &pt_regs -> arg1 */
72
        call syscall_trace
73
        LOAD_ARGS ARGOFFSET  /* reload args from stack in case ptrace changed it */
74
        addq $ARGOFFSET,%rsp
75
        cmpl $(IA32_NR_syscalls),%eax
76
        jae  1f
77
        IA32_ARG_FIXUP
78
        call *ia32_sys_call_table(,%rax,8)
79
ia32_tracesys_end:
80
        movq %rax,RAX-ARGOFFSET(%rsp)
81
1:      SAVE_REST
82
        movq %rsp,%rdi          /* &pt_regs -> arg1 */
83
        call syscall_trace
84
        addq $ARGOFFSET,%rsp
85
        jmp int_ret_from_sys_call
86
 
87
ia32_badsys:
88
        movq $-ENOSYS,RAX-ARGOFFSET(%rsp)
89
        movq $0,ORIG_RAX-ARGOFFSET(%rsp)
90
        jmp int_ret_from_sys_call
91
 
92
ni_syscall:
93
        movq %rax,%rdi
94
        jmp  sys32_ni_syscall
95
 
96
quiet_ni_syscall:
97
        movl $-ENOSYS,%eax
98
        ret
99
 
100
        .macro PTREGSCALL label, func
101
        .globl \label
102
\label:
103
        leaq \func(%rip),%rax
104
        jmp  ia32_ptregs_common
105
        .endm
106
 
107
        PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
108
        PTREGSCALL stub32_sigreturn, sys32_sigreturn
109
        PTREGSCALL stub32_sigaltstack, sys32_sigaltstack
110
        PTREGSCALL stub32_sigsuspend, sys32_sigsuspend
111
        PTREGSCALL stub32_execve, sys32_execve
112
        PTREGSCALL stub32_fork, sys32_fork
113
        PTREGSCALL stub32_clone, sys32_clone
114
        PTREGSCALL stub32_vfork, sys32_vfork
115
        PTREGSCALL stub32_iopl, sys_iopl
116
        PTREGSCALL stub32_rt_sigsuspend, sys_rt_sigsuspend
117
 
118
ENTRY(ia32_ptregs_common)
119
        popq %r11
120
        SAVE_REST
121
        movq %r11, %r15
122
        call *%rax
123
        movq %r15, %r11
124
        RESTORE_REST
125
        pushq %r11
126
        ret
127
 
128
        .data
129
        .align 8
130
        .globl ia32_sys_call_table
131
ia32_sys_call_table:
132
        .quad ni_syscall        /* 0  -  old "setup" system call*/
133
        .quad sys_exit
134
        .quad stub32_fork
135
        .quad sys_read
136
        .quad sys_write
137
        .quad sys32_open                /* 5 */
138
        .quad sys_close
139
        .quad sys32_waitpid
140
        .quad sys_creat
141
        .quad sys_link
142
        .quad sys_unlink                /* 10 */
143
        .quad stub32_execve
144
        .quad sys_chdir
145
        .quad sys32_time
146
        .quad sys_mknod
147
        .quad sys_chmod         /* 15 */
148
        .quad sys_lchown16
149
        .quad ni_syscall                        /* old break syscall holder */
150
        .quad ni_syscall        /* (old)stat */
151
        .quad sys32_lseek
152
        .quad sys_getpid                /* 20 */
153
        .quad sys_mount /* mount  */
154
        .quad sys_oldumount     /* old_umount  */
155
        .quad sys_setuid16
156
        .quad sys_getuid16
157
        .quad sys_stime         /* stime */             /* 25 */
158
        .quad sys32_ptrace      /* ptrace */
159
        .quad sys_alarm         /* XXX sign extension??? */
160
        .quad ni_syscall        /* (old)fstat */
161
        .quad sys_pause
162
        .quad sys32_utime       /* 30 */
163
        .quad ni_syscall        /* old stty syscall holder */
164
        .quad ni_syscall        /* old gtty syscall holder */
165
        .quad sys_access
166
        .quad sys_nice
167
        .quad ni_syscall        /* 35 */        /* old ftime syscall holder */
168
        .quad sys_sync
169
        .quad sys32_kill
170
        .quad sys_rename
171
        .quad sys_mkdir
172
        .quad sys_rmdir         /* 40 */
173
        .quad sys_dup
174
        .quad sys32_pipe
175
        .quad sys32_times
176
        .quad ni_syscall                        /* old prof syscall holder */
177
        .quad sys_brk           /* 45 */
178
        .quad sys_setgid16
179
        .quad sys_getgid16
180
        .quad sys_signal
181
        .quad sys_geteuid16
182
        .quad sys_getegid16     /* 50 */
183
        .quad sys_acct
184
        .quad sys_umount                        /* new_umount */
185
        .quad ni_syscall                        /* old lock syscall holder */
186
        .quad sys32_ioctl
187
        .quad sys32_fcntl               /* 55 */
188
        .quad ni_syscall                        /* old mpx syscall holder */
189
        .quad sys_setpgid
190
        .quad ni_syscall                        /* old ulimit syscall holder */
191
        .quad sys32_olduname
192
        .quad sys_umask         /* 60 */
193
        .quad sys_chroot
194
        .quad sys32_ustat
195
        .quad sys_dup2
196
        .quad sys_getppid
197
        .quad sys_getpgrp               /* 65 */
198
        .quad sys_setsid
199
        .quad sys32_sigaction
200
        .quad sys_sgetmask
201
        .quad sys_ssetmask
202
        .quad sys_setreuid16    /* 70 */
203
        .quad sys_setregid16
204
        .quad stub32_sigsuspend
205
        .quad sys32_sigpending
206
        .quad sys_sethostname
207
        .quad sys32_setrlimit   /* 75 */
208
        .quad sys32_old_getrlimit       /* old_getrlimit */
209
        .quad sys32_getrusage
210
        .quad sys32_gettimeofday
211
        .quad sys32_settimeofday
212
        .quad sys_getgroups16   /* 80 */
213
        .quad sys_setgroups16
214
        .quad sys32_old_select
215
        .quad sys_symlink
216
        .quad ni_syscall        /* (old)lstat */
217
        .quad sys_readlink              /* 85 */
218
        .quad sys_uselib
219
        .quad sys_swapon
220
        .quad sys_reboot
221
        .quad sys32_oldreaddir
222
        .quad sys32_mmap                /* 90 */
223
        .quad sys_munmap
224
        .quad sys_truncate
225
        .quad sys_ftruncate
226
        .quad sys_fchmod
227
        .quad sys_fchown16              /* 95 */
228
        .quad sys_getpriority
229
        .quad sys_setpriority
230
        .quad ni_syscall                        /* old profil syscall holder */
231
        .quad sys32_statfs
232
        .quad sys32_fstatfs             /* 100 */
233
        .quad sys_ioperm
234
        .quad sys32_socketcall
235
        .quad sys_syslog
236
        .quad sys32_setitimer
237
        .quad sys32_getitimer   /* 105 */
238
        .quad sys32_newstat
239
        .quad sys32_newlstat
240
        .quad sys32_newfstat
241
        .quad sys32_uname
242
        .quad stub32_iopl               /* 110 */
243
        .quad sys_vhangup
244
        .quad ni_syscall        /* old "idle" system call */
245
        .quad sys32_vm86_warning        /* vm86old */
246
        .quad sys32_wait4
247
        .quad sys_swapoff               /* 115 */
248
        .quad sys32_sysinfo
249
        .quad sys32_ipc
250
        .quad sys_fsync
251
        .quad stub32_sigreturn
252
        .quad stub32_clone              /* 120 */
253
        .quad sys_setdomainname
254
        .quad sys_uname
255
        .quad sys32_modify_ldt
256
        .quad sys32_adjtimex
257
        .quad sys32_mprotect            /* 125 */
258
        .quad sys32_sigprocmask
259
        .quad sys32_create_module
260
        .quad sys32_init_module
261
        .quad sys32_delete_module
262
        .quad sys32_get_kernel_syms     /* 130 */
263
        .quad ni_syscall        /* quotactl */
264
        .quad sys_getpgid
265
        .quad sys_fchdir
266
        .quad ni_syscall        /* bdflush */
267
        .quad sys_sysfs         /* 135 */
268
        .quad sys_personality
269
        .quad ni_syscall        /* for afs_syscall */
270
        .quad sys_setfsuid16
271
        .quad sys_setfsgid16
272
        .quad sys_llseek                /* 140 */
273
        .quad sys32_getdents
274
        .quad sys32_select
275
        .quad sys_flock
276
        .quad sys_msync
277
        .quad sys32_readv               /* 145 */
278
        .quad sys32_writev
279
        .quad sys_getsid
280
        .quad sys_fdatasync
281
        .quad sys32_sysctl      /* sysctl */
282
        .quad sys_mlock         /* 150 */
283
        .quad sys_munlock
284
        .quad sys_mlockall
285
        .quad sys_munlockall
286
        .quad sys_sched_setparam
287
        .quad sys_sched_getparam   /* 155 */
288
        .quad sys_sched_setscheduler
289
        .quad sys_sched_getscheduler
290
        .quad sys_sched_yield
291
        .quad sys_sched_get_priority_max
292
        .quad sys_sched_get_priority_min  /* 160 */
293
        .quad sys_sched_rr_get_interval
294
        .quad sys32_nanosleep
295
        .quad sys_mremap
296
        .quad sys_setresuid16
297
        .quad sys_getresuid16   /* 165 */
298
        .quad sys32_vm86_warning        /* vm86 */
299
        .quad sys32_query_module
300
        .quad sys_poll
301
        .quad sys32_nfsservctl
302
        .quad sys_setresgid16   /* 170 */
303
        .quad sys_getresgid16
304
        .quad sys_prctl
305
        .quad stub32_rt_sigreturn
306
        .quad sys32_rt_sigaction
307
        .quad sys32_rt_sigprocmask      /* 175 */
308
        .quad sys32_rt_sigpending
309
        .quad sys32_rt_sigtimedwait
310
        .quad sys32_rt_sigqueueinfo
311
        .quad stub32_rt_sigsuspend
312
        .quad sys32_pread               /* 180 */
313
        .quad sys32_pwrite
314
        .quad sys_chown16
315
        .quad sys_getcwd
316
        .quad sys_capget
317
        .quad sys_capset
318
        .quad stub32_sigaltstack
319
        .quad sys32_sendfile
320
        .quad ni_syscall                /* streams1 */
321
        .quad ni_syscall                /* streams2 */
322
        .quad stub32_vfork            /* 190 */
323
        .quad sys32_getrlimit
324
        .quad sys32_mmap2
325
        .quad sys32_truncate64
326
        .quad sys32_ftruncate64
327
        .quad sys32_stat64              /* 195 */
328
        .quad sys32_lstat64
329
        .quad sys32_fstat64
330
        .quad sys_lchown
331
        .quad sys_getuid
332
        .quad sys_getgid                /* 200 */
333
        .quad sys_geteuid
334
        .quad sys_getegid
335
        .quad sys_setreuid
336
        .quad sys_setregid
337
        .quad sys_getgroups     /* 205 */
338
        .quad sys_setgroups
339
        .quad sys_fchown
340
        .quad sys_setresuid
341
        .quad sys_getresuid
342
        .quad sys_setresgid     /* 210 */
343
        .quad sys_getresgid
344
        .quad sys_chown
345
        .quad sys_setuid
346
        .quad sys_setgid
347
        .quad sys_setfsuid              /* 215 */
348
        .quad sys_setfsgid
349
        .quad sys_pivot_root
350
        .quad sys_mincore
351
        .quad sys_madvise
352
        .quad sys_getdents64    /* 220 getdents64 */
353
        .quad sys32_fcntl64
354
        .quad sys_ni_syscall    /* tux */
355
        .quad sys_ni_syscall    /* security */
356
        .quad sys_gettid
357
        .quad sys_readahead     /* 225 */
358
        .quad quiet_ni_syscall  /* xattr syscalls 226-237 */
359
        .quad quiet_ni_syscall
360
        .quad quiet_ni_syscall
361
        .quad quiet_ni_syscall
362
        .quad quiet_ni_syscall  /* 230 */
363
        .quad quiet_ni_syscall
364
        .quad quiet_ni_syscall
365
        .quad quiet_ni_syscall
366
        .quad quiet_ni_syscall
367
        .quad quiet_ni_syscall  /* 235 */
368
        .quad quiet_ni_syscall
369
        .quad quiet_ni_syscall  /* fremovexattr - 237 */
370
        .quad sys_tkill
371
        .quad sys_sendfile64
372
        .quad quiet_ni_syscall  /* futex */
373
        .quad quiet_ni_syscall  /* sched_setaffinity */
374
        .quad quiet_ni_syscall  /* sched_getaffinity */
375
ia32_syscall_end:
376
        .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
377
                .quad ni_syscall
378
        .endr
379
 
380
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.