Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
77ab58e5
Commit
77ab58e5
authored
Dec 31, 2003
by
David Mosberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge tiger.hpl.hp.com:/data1/bk/vanilla/linux-2.5
into tiger.hpl.hp.com:/data1/bk/lia64/to-linus-2.5
parents
4da120fa
30ee59d7
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
311 additions
and
322 deletions
+311
-322
arch/ia64/ia32/ia32_entry.S
arch/ia64/ia32/ia32_entry.S
+50
-45
arch/ia64/ia32/sys_ia32.c
arch/ia64/ia32/sys_ia32.c
+0
-13
arch/ia64/kernel/entry.S
arch/ia64/kernel/entry.S
+53
-58
arch/ia64/kernel/entry.h
arch/ia64/kernel/entry.h
+1
-1
arch/ia64/kernel/ivt.S
arch/ia64/kernel/ivt.S
+6
-4
arch/ia64/kernel/perfmon_default_smpl.c
arch/ia64/kernel/perfmon_default_smpl.c
+11
-4
arch/ia64/kernel/ptrace.c
arch/ia64/kernel/ptrace.c
+153
-162
arch/ia64/kernel/signal.c
arch/ia64/kernel/signal.c
+28
-17
arch/ia64/kernel/traps.c
arch/ia64/kernel/traps.c
+0
-15
include/asm-ia64/ia32.h
include/asm-ia64/ia32.h
+8
-2
include/asm-ia64/processor.h
include/asm-ia64/processor.h
+1
-1
No files found.
arch/ia64/ia32/ia32_entry.S
View file @
77ab58e5
#include <asm/asmmacro.h>
#include <asm/ia32.h>
#include <asm/offsets.h>
#include <asm/signal.h>
#include <asm/thread_info.h>
...
...
@@ -141,27 +142,35 @@ GLOBAL_ENTRY(ia32_trace_syscall)
adds
r2
=
IA64_PT_REGS_R8_OFFSET
+
16
,
sp
;;
st8
[
r2
]=
r3
//
initialize
return
code
to
-
ENOSYS
br.call.sptk.few
rp
=
invoke_syscall_trace
//
give
parent
a
chance
to
catch
syscall
args
//
Need
to
reload
arguments
(
they
may
be
changed
by
the
tracing
process
)
adds
r2
=
IA64_PT_REGS_R
9_OFFSET
+
16
,
sp
//
r2
=
&
pt_regs
.
r9
br.call.sptk.few
rp
=
syscall_trace
//
give
parent
a
chance
to
catch
syscall
args
.
ret2
:
//
Need
to
reload
arguments
(
they
may
be
changed
by
the
tracing
process
)
adds
r2
=
IA64_PT_REGS_R
1_OFFSET
+
16
,
sp
//
r2
=
&
pt_regs
.
r1
adds
r3
=
IA64_PT_REGS_R13_OFFSET
+
16
,
sp
//
r3
=
&
pt_regs
.
r13
mov
r15
=
IA32_NR_syscalls
;;
ld4
r8
=[
r2
],
IA64_PT_REGS_R9_OFFSET
-
IA64_PT_REGS_R1_OFFSET
movl
r16
=
ia32_syscall_table
;;
ld4
r33
=[
r2
],
8
//
r9
==
ecx
ld4
r37
=[
r3
],
16
//
r13
==
ebp
cmp.ltu.unc
p6
,
p7
=
r8
,
r15
;;
ld4
r34
=[
r2
],
8
//
r10
==
edx
ld4
r36
=[
r3
],
8
//
r15
==
edi
(
p6
)
shladd
r16
=
r8
,
3
,
r16
//
force
ni_syscall
if
not
valid
syscall
number
;;
ld8
r16
=[
r16
]
;;
ld4
r32
=[
r2
],
8
//
r11
==
ebx
mov
b6
=
r16
ld4
r35
=[
r3
],
8
//
r14
==
esi
;;
.
ret2
:
br.call.sptk.few
rp
=
b6
//
do
the
syscall
br.call.sptk.few
rp
=
b6
//
do
the
syscall
.
ia32_strace_check_retval
:
cmp.lt
p6
,
p0
=
r8
,
r0
//
syscall
failed
?
adds
r2
=
IA64_PT_REGS_R8_OFFSET
+
16
,
sp
//
r2
=
&
pt_regs
.
r8
;;
st8.spill
[
r2
]=
r8
//
store
return
value
in
slot
for
r8
br.call.sptk.few
rp
=
invoke_syscall_trace
//
give
parent
a
chance
to
catch
return
value
br.call.sptk.few
rp
=
syscall_trace
//
give
parent
a
chance
to
catch
return
value
.
ret4
:
alloc
r2
=
ar
.
pfs
,
0
,
0
,
0
,
0
//
drop
the
syscall
argument
frame
br.cond.sptk.many
ia64_leave_kernel
END
(
ia32_trace_syscall
)
...
...
@@ -199,7 +208,7 @@ END(sys32_fork)
.
align
8
.
globl
ia32_syscall_table
ia32_syscall_table
:
data8
sys
32
_ni_syscall
/*
0
-
old
"setup("
system
call
*/
data8
sys_ni_syscall
/*
0
-
old
"setup("
system
call
*/
data8
sys_exit
data8
sys32_fork
data8
sys_read
...
...
@@ -216,25 +225,25 @@ ia32_syscall_table:
data8
sys_mknod
data8
sys_chmod
/*
15
*/
data8
sys_lchown
/*
16
-
bit
version
*/
data8
sys
32
_ni_syscall
/*
old
break
syscall
holder
*/
data8
sys
32
_ni_syscall
data8
sys_ni_syscall
/*
old
break
syscall
holder
*/
data8
sys_ni_syscall
data8
sys32_lseek
data8
sys_getpid
/*
20
*/
data8
sys_mount
data8
sys_oldumount
data8
sys_setuid
/*
16
-
bit
version
*/
data8
sys_getuid
/*
16
-
bit
version
*/
data8
sys
32_ni_syscall
/*
sys_stime
is
not
supported
on
IA64
*/
/*
25
*/
data8
sys
_ni_syscall
/*
sys_stime
is
not
supported
on
IA64
*/
/*
25
*/
data8
sys32_ptrace
data8
sys32_alarm
data8
sys
32
_ni_syscall
data8
sys_ni_syscall
data8
sys32_pause
data8
compat_sys_utime
/*
30
*/
data8
sys
32
_ni_syscall
/*
old
stty
syscall
holder
*/
data8
sys
32
_ni_syscall
/*
old
gtty
syscall
holder
*/
data8
sys_ni_syscall
/*
old
stty
syscall
holder
*/
data8
sys_ni_syscall
/*
old
gtty
syscall
holder
*/
data8
sys_access
data8
sys_nice
data8
sys
32
_ni_syscall
/*
35
*/
/*
old
ftime
syscall
holder
*/
data8
sys_ni_syscall
/*
35
*/
/*
old
ftime
syscall
holder
*/
data8
sys_sync
data8
sys_kill
data8
sys_rename
...
...
@@ -243,7 +252,7 @@ ia32_syscall_table:
data8
sys_dup
data8
sys32_pipe
data8
compat_sys_times
data8
sys
32
_ni_syscall
/*
old
prof
syscall
holder
*/
data8
sys_ni_syscall
/*
old
prof
syscall
holder
*/
data8
sys32_brk
/*
45
*/
data8
sys_setgid
/*
16
-
bit
version
*/
data8
sys_getgid
/*
16
-
bit
version
*/
...
...
@@ -252,13 +261,13 @@ ia32_syscall_table:
data8
sys_getegid
/*
16
-
bit
version
*/
/*
50
*/
data8
sys_acct
data8
sys_umount
/*
recycled
never
used
phys
(
*/
data8
sys
32
_ni_syscall
/*
old
lock
syscall
holder
*/
data8
sys_ni_syscall
/*
old
lock
syscall
holder
*/
data8
compat_sys_ioctl
data8
compat_sys_fcntl
/*
55
*/
data8
sys
32
_ni_syscall
/*
old
mpx
syscall
holder
*/
data8
sys_ni_syscall
/*
old
mpx
syscall
holder
*/
data8
sys_setpgid
data8
sys
32
_ni_syscall
/*
old
ulimit
syscall
holder
*/
data8
sys
32
_ni_syscall
data8
sys_ni_syscall
/*
old
ulimit
syscall
holder
*/
data8
sys_ni_syscall
data8
sys_umask
/*
60
*/
data8
sys_chroot
data8
sys_ustat
...
...
@@ -267,8 +276,8 @@ ia32_syscall_table:
data8
sys_getpgrp
/*
65
*/
data8
sys_setsid
data8
sys32_sigaction
data8
sys
32
_ni_syscall
data8
sys
32
_ni_syscall
data8
sys_ni_syscall
data8
sys_ni_syscall
data8
sys_setreuid
/*
16
-
bit
version
*/
/*
70
*/
data8
sys_setregid
/*
16
-
bit
version
*/
data8
sys32_sigsuspend
...
...
@@ -283,7 +292,7 @@ ia32_syscall_table:
data8
sys32_setgroups16
data8
sys32_old_select
data8
sys_symlink
data8
sys
32
_ni_syscall
data8
sys_ni_syscall
data8
sys_readlink
/*
85
*/
data8
sys_uselib
data8
sys_swapon
...
...
@@ -297,7 +306,7 @@ ia32_syscall_table:
data8
sys_fchown
/*
16
-
bit
version
*/
/*
95
*/
data8
sys_getpriority
data8
sys_setpriority
data8
sys
32
_ni_syscall
/*
old
profil
syscall
holder
*/
data8
sys_ni_syscall
/*
old
profil
syscall
holder
*/
data8
compat_sys_statfs
data8
compat_sys_fstatfs
/*
100
*/
data8
sys32_ioperm
...
...
@@ -308,11 +317,11 @@ ia32_syscall_table:
data8
compat_sys_newstat
data8
compat_sys_newlstat
data8
compat_sys_newfstat
data8
sys
32
_ni_syscall
data8
sys_ni_syscall
data8
sys32_iopl
/*
110
*/
data8
sys_vhangup
data8
sys
32
_ni_syscall
/*
used
to
be
sys_idle
*/
data8
sys
32
_ni_syscall
data8
sys_ni_syscall
/*
used
to
be
sys_idle
*/
data8
sys_ni_syscall
data8
compat_sys_wait4
data8
sys_swapoff
/*
115
*/
data8
sys32_sysinfo
...
...
@@ -323,20 +332,20 @@ ia32_syscall_table:
data8
sys_setdomainname
data8
sys32_newuname
data8
sys32_modify_ldt
data8
sys
32
_ni_syscall
/*
adjtimex
*/
data8
sys_ni_syscall
/*
adjtimex
*/
data8
sys32_mprotect
/*
125
*/
data8
compat_sys_sigprocmask
data8
sys
32
_ni_syscall
/*
create_module
*/
data8
sys
32
_ni_syscall
/*
init_module
*/
data8
sys
32
_ni_syscall
/*
delete_module
*/
data8
sys
32
_ni_syscall
/*
get_kernel_syms
*/
/*
130
*/
data8
sys_ni_syscall
/*
create_module
*/
data8
sys_ni_syscall
/*
init_module
*/
data8
sys_ni_syscall
/*
delete_module
*/
data8
sys_ni_syscall
/*
get_kernel_syms
*/
/*
130
*/
data8
sys_quotactl
data8
sys_getpgid
data8
sys_fchdir
data8
sys
32
_ni_syscall
/*
sys_bdflush
*/
data8
sys_ni_syscall
/*
sys_bdflush
*/
data8
sys_sysfs
/*
135
*/
data8
sys32_personality
data8
sys
32
_ni_syscall
/*
for
afs_syscall
*/
data8
sys_ni_syscall
/*
for
afs_syscall
*/
data8
sys_setfsuid
/*
16
-
bit
version
*/
data8
sys_setfsgid
/*
16
-
bit
version
*/
data8
sys_llseek
/*
140
*/
...
...
@@ -365,10 +374,10 @@ ia32_syscall_table:
data8
sys_mremap
data8
sys_setresuid
/*
16
-
bit
version
*/
data8
sys32_getresuid16
/*
16
-
bit
version
*/
/*
165
*/
data8
sys
32
_ni_syscall
/*
vm86
*/
data8
sys
32
_ni_syscall
/*
sys_query_module
*/
data8
sys_ni_syscall
/*
vm86
*/
data8
sys_ni_syscall
/*
sys_query_module
*/
data8
sys_poll
data8
sys
32
_ni_syscall
/*
nfsservctl
*/
data8
sys_ni_syscall
/*
nfsservctl
*/
data8
sys_setresgid
/*
170
*/
data8
sys32_getresgid16
data8
sys_prctl
...
...
@@ -387,8 +396,8 @@ ia32_syscall_table:
data8
sys_capset
/*
185
*/
data8
sys32_sigaltstack
data8
sys32_sendfile
data8
sys
32
_ni_syscall
/*
streams1
*/
data8
sys
32
_ni_syscall
/*
streams2
*/
data8
sys_ni_syscall
/*
streams1
*/
data8
sys_ni_syscall
/*
streams2
*/
data8
sys32_vfork
/*
190
*/
data8
compat_sys_getrlimit
data8
sys32_mmap2
...
...
@@ -469,10 +478,6 @@ ia32_syscall_table:
data8
sys_ni_syscall
data8
sys_statfs64
data8
sys_fstatfs64
data8
sys_ni_syscall
/
*
*
CAUTION
:
If
any
system
calls
are
added
beyond
this
point
*
then
the
check
in
`
arch
/
ia64
/
kernel
/
ivt
.
S
' will have
*
to
be
modified
also
.
You
've been warned.
*/
//
guard
against
failures
to
increase
IA32_NR_syscalls
.
org
ia32_syscall_table
+
8
*
IA32_NR_syscalls
arch/ia64/ia32/sys_ia32.c
View file @
77ab58e5
...
...
@@ -2164,19 +2164,6 @@ sys32_ptrace (int request, pid_t pid, unsigned int addr, unsigned int data,
return
ret
;
}
asmlinkage
long
sys_ni_syscall
(
void
);
asmlinkage
long
sys32_ni_syscall
(
int
dummy0
,
int
dummy1
,
int
dummy2
,
int
dummy3
,
int
dummy4
,
int
dummy5
,
int
dummy6
,
int
dummy7
,
int
stack
)
{
struct
pt_regs
*
regs
=
(
struct
pt_regs
*
)
&
stack
;
printk
(
KERN_WARNING
"IA32 syscall #%d issued, maybe we should implement it
\n
"
,
(
int
)
regs
->
r1
);
return
(
sys_ni_syscall
());
}
/*
* The IA64 maps 4 I/O ports for each 4K page
*/
...
...
arch/ia64/kernel/entry.S
View file @
77ab58e5
...
...
@@ -483,34 +483,11 @@ GLOBAL_ENTRY(clone)
br.ret.sptk.many
rp
END
(
clone
)
/
*
*
We
invoke
syscall_trace
through
this
intermediate
function
to
*
ensure
that
the
syscall
input
arguments
are
not
clobbered
.
We
*
also
use
it
to
preserve
b6
,
which
contains
the
syscall
entry
point
.
*/
GLOBAL_ENTRY
(
invoke_syscall_trace
)
.
prologue
ASM_UNW_PRLG_RP
|
ASM_UNW_PRLG_PFS
,
ASM_UNW_PRLG_GRSAVE
(
8
)
alloc
loc1
=
ar
.
pfs
,
8
,
3
,
0
,
0
mov
loc0
=
rp
.
body
mov
loc2
=
b6
;;
br.call.sptk.many
rp
=
syscall_trace
.
ret3
:
mov
rp
=
loc0
mov
ar
.
pfs
=
loc1
mov
b6
=
loc2
br.ret.sptk.many
rp
END
(
invoke_syscall_trace
)
/
*
*
Invoke
a
system
call
,
but
do
some
tracing
before
and
after
the
call
.
*
We
MUST
preserve
the
current
register
frame
throughout
this
routine
*
because
some
system
calls
(
such
as
ia64_execve
)
directly
*
manipulate
ar
.
pfs
.
*
*
Input
:
*
r15
=
syscall
number
*
b6
=
syscall
entry
point
*/
.
global
ia64_strace_leave_kernel
...
...
@@ -522,21 +499,38 @@ GLOBAL_ENTRY(ia64_trace_syscall)
*/
nop.m
0
nop.i
0
br.call.sptk.many
rp
=
invoke_
syscall_trace
//
give
parent
a
chance
to
catch
syscall
args
br.call.sptk.many
rp
=
syscall_trace
//
give
parent
a
chance
to
catch
syscall
args
}
.
ret6
:
br.call.sptk.many
rp
=
b6
//
do
the
syscall
strace_check_retval
:
//
the
syscall
number
may
have
changed
,
so
re
-
load
it
and
re
-
calculate
the
//
syscall
entry
-
point
:
adds
r15
=
PT
(
R15
)+
16
,
sp
//
r15
=
&
pt_regs
.
r15
(
syscall
#)
;;
ld8
r15
=[
r15
]
mov
r3
=
NR_syscalls
-
1
;;
adds
r15
=-
1024
,
r15
movl
r16
=
sys_call_table
;;
shladd
r20
=
r15
,
3
,
r16
//
r20
=
sys_call_table
+
8
*(
syscall
-
1024
)
cmp.leu
p6
,
p7
=
r15
,
r3
;;
(
p6
)
ld8
r20
=[
r20
]
//
load
address
of
syscall
entry
point
(
p7
)
movl
r20
=
sys_ni_syscall
;;
mov
b6
=
r20
br.call.sptk.many
rp
=
b6
//
do
the
syscall
.
strace_check_retval
:
cmp.lt
p6
,
p0
=
r8
,
r0
//
syscall
failed
?
adds
r2
=
PT
(
R8
)+
16
,
sp
//
r2
=
&
pt_regs
.
r8
adds
r3
=
PT
(
R10
)+
16
,
sp
//
r3
=
&
pt_regs
.
r10
mov
r10
=
0
(
p6
)
br.cond.sptk
strace_error
//
syscall
failed
->
;; // avoid RAW on r10
strace_save_retval
:
.
strace_save_retval
:
.
mem
.
offset
0,0
; st8.spill [r2]=r8 // store return value in slot for r8
.
mem
.
offset
8,0
; st8.spill [r3]=r10 // clear error indication in slot for r10
ia64_strace_leave_kernel
:
br.call.sptk.many
rp
=
invoke_
syscall_trace
//
give
parent
a
chance
to
catch
return
value
br.call.sptk.many
rp
=
syscall_trace
//
give
parent
a
chance
to
catch
return
value
.
rety
:
br.cond.sptk
ia64_leave_syscall
strace_error
:
...
...
@@ -548,7 +542,7 @@ strace_error:
;;
(
p6
)
mov
r10
=-
1
(
p6
)
mov
r8
=
r9
br.cond.sptk
strace_save_retval
br.cond.sptk
.
strace_save_retval
END
(
ia64_trace_syscall
)
GLOBAL_ENTRY
(
ia64_ret_from_clone
)
...
...
@@ -573,7 +567,7 @@ GLOBAL_ENTRY(ia64_ret_from_clone)
;;
mov
r8
=
0
tbit.nz
p6
,
p0
=
r2
,
TIF_SYSCALL_TRACE
(
p6
)
br.cond.spnt
strace_check_retval
(
p6
)
br.cond.spnt
.
strace_check_retval
;; // added stop bits to prevent r8 dependency
END
(
ia64_ret_from_clone
)
//
fall
through
...
...
@@ -726,6 +720,7 @@ GLOBAL_ENTRY(ia64_leave_syscall)
mov
b6
=
r22
//
restore
b6
shr.u
r18
=
r19
,
16
//
get
byte
size
of
existing
"dirty"
partition
(
pKStk
)
br.cond.dpnt.many
skip_rbs_switch
(
pNonSys
)
br.cond.dpnt.many
dont_preserve_current_frame
br.cond.sptk.many
rbs_switch
END
(
ia64_leave_syscall
)
...
...
@@ -1334,9 +1329,9 @@ sys_call_table:
data8
sys_syslog
data8
sys_setitimer
data8
sys_getitimer
data8
ia64
_ni_syscall
//
1120
/*
was
:
ia64_oldstat
*/
data8
ia64
_ni_syscall
/*
was
:
ia64_oldlstat
*/
data8
ia64
_ni_syscall
/*
was
:
ia64_oldfstat
*/
data8
sys
_ni_syscall
//
1120
/*
was
:
ia64_oldstat
*/
data8
sys
_ni_syscall
/*
was
:
ia64_oldlstat
*/
data8
sys
_ni_syscall
/*
was
:
ia64_oldfstat
*/
data8
sys_vhangup
data8
sys_lchown
data8
sys_remap_file_pages
//
1125
...
...
@@ -1346,16 +1341,16 @@ sys_call_table:
data8
sys_setdomainname
data8
sys_newuname
//
1130
data8
sys_adjtimex
data8
ia64
_ni_syscall
/*
was
:
ia64_create_module
*/
data8
sys
_ni_syscall
/*
was
:
ia64_create_module
*/
data8
sys_init_module
data8
sys_delete_module
data8
ia64
_ni_syscall
//
1135
/*
was
:
sys_get_kernel_syms
*/
data8
ia64
_ni_syscall
/*
was
:
sys_query_module
*/
data8
sys
_ni_syscall
//
1135
/*
was
:
sys_get_kernel_syms
*/
data8
sys
_ni_syscall
/*
was
:
sys_query_module
*/
data8
sys_quotactl
data8
sys_bdflush
data8
sys_sysfs
data8
sys_personality
//
1140
data8
ia64
_ni_syscall
//
sys_afs_syscall
data8
sys
_ni_syscall
//
sys_afs_syscall
data8
sys_setfsuid
data8
sys_setfsgid
data8
sys_getdents
...
...
@@ -1473,26 +1468,26 @@ sys_call_table:
data8
sys_clock_nanosleep
data8
sys_fstatfs64
data8
sys_statfs64
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
//
1260
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
//
1265
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
//
1270
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
//
1275
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
ia64
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
//
1260
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
//
1265
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
//
1270
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
//
1275
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
data8
sys
_ni_syscall
.
org
sys_call_table
+
8
*
NR_syscalls
//
guard
against
failures
to
increase
NR_syscalls
arch/ia64/kernel/entry.h
View file @
77ab58e5
...
...
@@ -4,7 +4,7 @@
* Preserved registers that are shared between code in ivt.S and entry.S. Be
* careful not to step on these!
*/
#define pLvSys p1
/* set 1 if leave from syscall; otherwise, set 0*/
#define pLvSys p1
/* set 1 if leave from syscall; otherwise, set 0
*/
#define pKStk p2
/* will leave_{kernel,syscall} return to kernel-stacks? */
#define pUStk p3
/* will leave_{kernel,syscall} return to user-stacks? */
#define pSys p4
/* are we processing a (synchronous) system call? */
...
...
arch/ia64/kernel/ivt.S
View file @
77ab58e5
...
...
@@ -42,6 +42,7 @@
#include <asm/asmmacro.h>
#include <asm/break.h>
#include <asm/ia32.h>
#include <asm/kregs.h>
#include <asm/offsets.h>
#include <asm/pgtable.h>
...
...
@@ -705,13 +706,14 @@ ENTRY(break_fault)
movl
r2
=
ia64_ret_from_syscall
;;
shladd
r20
=
r15
,
3
,
r16
//
r20
=
sys_call_table
+
8
*(
syscall
-
1024
)
cmp.
geu
p0
,
p7
=
r3
,
r15
//
(
syscall
>
0
&&
syscall
<
1024
+
NR_syscalls
)
?
cmp.
leu
p6
,
p7
=
r15
,
r3
//
(
syscall
>
0
&&
syscall
<
1024
+
NR_syscalls
)
?
mov
rp
=
r2
//
set
the
real
return
addr
;;
(
p7
)
add
r20
=(
__NR_ni_syscall
-
1024
)*
8
,
r16
//
force
__NR_ni_syscall
(
p6
)
ld8
r20
=[
r20
]
//
load
address
of
syscall
entry
point
(
p7
)
movl
r20
=
sys_ni_syscall
add
r2
=
TI_FLAGS
+
IA64_TASK_SIZE
,
r13
;;
ld8
r20
=[
r20
]
//
load
address
of
syscall
entry
point
ld4
r2
=[
r2
]
//
r2
=
current_thread_info
()->
flags
;;
tbit.z
p8
,
p0
=
r2
,
TIF_SYSCALL_TRACE
...
...
@@ -1513,7 +1515,7 @@ ENTRY(dispatch_to_ia32_handler)
alloc
r15
=
ar
.
pfs
,
0
,
0
,
6
,
0
//
must
first
in
an
insn
group
;;
ld4
r8
=[
r14
],
8
//
r8
==
eax
(
syscall
number
)
mov
r15
=
270
//
number
of
entries
in
ia32
system
call
table
mov
r15
=
IA32_NR_syscalls
;;
cmp.ltu.unc
p6
,
p7
=
r8
,
r15
ld4
out1
=[
r14
],
8
//
r9
==
ecx
...
...
arch/ia64/kernel/perfmon_default_smpl.c
View file @
77ab58e5
...
...
@@ -114,7 +114,7 @@ default_handler(struct task_struct *task, void *buf, pfm_ovfl_arg_t *arg, struct
pfm_default_smpl_hdr_t
*
hdr
;
pfm_default_smpl_entry_t
*
ent
;
void
*
cur
,
*
last
;
unsigned
long
*
e
;
unsigned
long
*
e
,
entry_size
;
unsigned
int
npmds
,
i
;
unsigned
char
ovfl_pmd
;
unsigned
char
ovfl_notify
;
...
...
@@ -131,8 +131,7 @@ default_handler(struct task_struct *task, void *buf, pfm_ovfl_arg_t *arg, struct
ovfl_notify
=
arg
->
ovfl_notify
;
/*
* check for space against largest possibly entry.
* We may waste space at the end of the buffer.
* precheck for sanity
*/
if
((
last
-
cur
)
<
PFM_DEFAULT_MAX_ENTRY_SIZE
)
goto
full
;
...
...
@@ -142,6 +141,8 @@ default_handler(struct task_struct *task, void *buf, pfm_ovfl_arg_t *arg, struct
prefetch
(
arg
->
smpl_pmds_values
);
entry_size
=
sizeof
(
*
ent
)
+
(
npmds
<<
3
);
/* position for first pmd */
e
=
(
unsigned
long
*
)(
ent
+
1
);
...
...
@@ -191,7 +192,13 @@ default_handler(struct task_struct *task, void *buf, pfm_ovfl_arg_t *arg, struct
/*
* update position for next entry
*/
hdr
->
hdr_cur_offs
+=
sizeof
(
*
ent
)
+
(
npmds
<<
3
);
hdr
->
hdr_cur_offs
+=
entry_size
;
cur
+=
entry_size
;
/*
* post check to avoid losing the last sample
*/
if
((
last
-
cur
)
<
PFM_DEFAULT_MAX_ENTRY_SIZE
)
goto
full
;
/*
* keep same ovfl_pmds, ovfl_notify
...
...
arch/ia64/kernel/ptrace.c
View file @
77ab58e5
This diff is collapsed.
Click to expand it.
arch/ia64/kernel/signal.c
View file @
77ab58e5
...
...
@@ -538,31 +538,41 @@ ia64_do_signal (sigset_t *oldset, struct sigscratch *scr, long in_syscall)
if
(
!
oldset
)
oldset
=
&
current
->
blocked
;
if
(
IS_IA32_PROCESS
(
&
scr
->
pt
))
{
if
(
in_syscall
)
{
if
(
errno
>=
0
)
restart
=
0
;
else
errno
=
-
errno
;
}
}
else
if
((
long
)
scr
->
pt
.
r10
!=
-
1
)
/*
* A system calls has to be restarted only if one of the error codes
* ERESTARTNOHAND, ERESTARTSYS, or ERESTARTNOINTR is returned. If r10
* isn't -1 then r8 doesn't hold an error code and we don't need to
* restart the syscall, so we can clear the "restart" flag here.
*/
restart
=
0
;
/*
* This only loops in the rare cases of handle_signal() failing, in which case we
* need to push through a forced SIGSEGV.
*/
while
(
1
)
{
int
signr
=
get_signal_to_deliver
(
&
info
,
&
scr
->
pt
,
NULL
);
/*
* get_signal_to_deliver() may have run a debugger (via notify_parent())
* and the debugger may have modified the state (e.g., to arrange for an
* inferior call), thus it's important to check for restarting _after_
* get_signal_to_deliver().
*/
if
(
IS_IA32_PROCESS
(
&
scr
->
pt
))
{
if
(
in_syscall
)
{
if
(
errno
>=
0
)
restart
=
0
;
else
errno
=
-
errno
;
}
}
else
if
((
long
)
scr
->
pt
.
r10
!=
-
1
)
/*
* A system calls has to be restarted only if one of the error codes
* ERESTARTNOHAND, ERESTARTSYS, or ERESTARTNOINTR is returned. If r10
* isn't -1 then r8 doesn't hold an error code and we don't need to
* restart the syscall, so we can clear the "restart" flag here.
*/
restart
=
0
;
if
(
signr
<=
0
)
break
;
ka
=
&
current
->
sighand
->
action
[
signr
-
1
];
if
(
restart
)
{
if
(
unlikely
(
restart
)
)
{
switch
(
errno
)
{
case
ERESTART_RESTARTBLOCK
:
case
ERESTARTNOHAND
:
...
...
@@ -582,6 +592,7 @@ ia64_do_signal (sigset_t *oldset, struct sigscratch *scr, long in_syscall)
scr
->
pt
.
cr_iip
-=
2
;
}
else
ia64_decrement_ip
(
&
scr
->
pt
);
restart
=
0
;
/* don't restart twice if handle_signal() fails... */
}
}
...
...
arch/ia64/kernel/traps.c
View file @
77ab58e5
...
...
@@ -215,21 +215,6 @@ ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
force_sig_info
(
sig
,
&
siginfo
,
current
);
}
/*
* Unimplemented system calls. This is called only for stuff that
* we're supposed to implement but haven't done so yet. Everything
* else goes to sys_ni_syscall.
*
* XXX Remove this for v2.6.1.
*/
asmlinkage
long
ia64_ni_syscall
(
unsigned
long
arg0
,
unsigned
long
arg1
,
unsigned
long
arg2
,
unsigned
long
arg3
,
unsigned
long
arg4
,
unsigned
long
arg5
,
unsigned
long
arg6
,
unsigned
long
arg7
,
unsigned
long
stack
)
{
return
-
ENOSYS
;
}
/*
* disabled_fph_fault() is called when a user-level process attempts to access f32..f127
* and it doesn't own the fp-high register partition. When this happens, we save the
...
...
include/asm-ia64/ia32.h
View file @
77ab58e5
...
...
@@ -6,7 +6,11 @@
#include <asm/ptrace.h>
#include <asm/signal.h>
#ifdef CONFIG_IA32_SUPPORT
#define IA32_NR_syscalls 270
/* length of syscall table */
#ifndef __ASSEMBLY__
# ifdef CONFIG_IA32_SUPPORT
extern
void
ia32_cpu_init
(
void
);
extern
void
ia32_boot_gdt_init
(
void
);
...
...
@@ -15,10 +19,12 @@ extern int ia32_exception (struct pt_regs *regs, unsigned long isr);
extern
int
ia32_intercept
(
struct
pt_regs
*
regs
,
unsigned
long
isr
);
extern
int
ia32_clone_tls
(
struct
task_struct
*
child
,
struct
pt_regs
*
childregs
);
#endif
/* !CONFIG_IA32_SUPPORT */
#
endif
/* !CONFIG_IA32_SUPPORT */
/* Declare this unconditionally, so we don't get warnings for unreachable code. */
extern
int
ia32_setup_frame1
(
int
sig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
set
,
struct
pt_regs
*
regs
);
#endif
/* !__ASSEMBLY__ */
#endif
/* _ASM_IA64_IA32_H */
include/asm-ia64/processor.h
View file @
77ab58e5
...
...
@@ -64,7 +64,7 @@
#define IA64_THREAD_PM_VALID (__IA64_UL(1) << 2)
/* performance registers valid? */
#define IA64_THREAD_UAC_NOPRINT (__IA64_UL(1) << 3)
/* don't log unaligned accesses */
#define IA64_THREAD_UAC_SIGBUS (__IA64_UL(1) << 4)
/* generate SIGBUS on unaligned acc. */
#define IA64_THREAD_KRBS_SYNCED (__IA64_UL(1) << 5)
/* krbs synced with process vm?
*/
/* bit 5 is currently unused
*/
#define IA64_THREAD_FPEMU_NOPRINT (__IA64_UL(1) << 6)
/* don't log any fpswa faults */
#define IA64_THREAD_FPEMU_SIGFPE (__IA64_UL(1) << 7)
/* send a SIGFPE for fpswa faults */
#define IA64_THREAD_XSTACK (__IA64_UL(1) << 8)
/* stack executable by default? */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment