diff options
author | Andi Kleen <ak@suse.de> | 2006-01-11 16:44:06 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-11 22:04:53 -0500 |
commit | bf2fcc6fdfe4f4e92bb74f062c0a1be189f3a561 (patch) | |
tree | 0bcc33f681c7e8ce6596c9323d4a1026ede84994 /arch/x86_64/ia32 | |
parent | 2966387b481a11a90a7bed6600fc17b4253f6980 (diff) |
[PATCH] x86_64: Implement is_compat_task the right way
By setting a flag during a 32bit system call only
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/x86_64/ia32')
-rw-r--r-- | arch/x86_64/ia32/ia32entry.S | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S index 8172e61c3f6f..58f5bfb52c63 100644 --- a/arch/x86_64/ia32/ia32entry.S +++ b/arch/x86_64/ia32/ia32entry.S | |||
@@ -104,6 +104,7 @@ ENTRY(ia32_sysenter_target) | |||
104 | .quad 1b,ia32_badarg | 104 | .quad 1b,ia32_badarg |
105 | .previous | 105 | .previous |
106 | GET_THREAD_INFO(%r10) | 106 | GET_THREAD_INFO(%r10) |
107 | orl $TS_COMPAT,threadinfo_status(%r10) | ||
107 | testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) | 108 | testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) |
108 | CFI_REMEMBER_STATE | 109 | CFI_REMEMBER_STATE |
109 | jnz sysenter_tracesys | 110 | jnz sysenter_tracesys |
@@ -117,6 +118,7 @@ sysenter_do_call: | |||
117 | cli | 118 | cli |
118 | testl $_TIF_ALLWORK_MASK,threadinfo_flags(%r10) | 119 | testl $_TIF_ALLWORK_MASK,threadinfo_flags(%r10) |
119 | jnz int_ret_from_sys_call | 120 | jnz int_ret_from_sys_call |
121 | andl $~TS_COMPAT,threadinfo_status(%r10) | ||
120 | /* clear IF, that popfq doesn't enable interrupts early */ | 122 | /* clear IF, that popfq doesn't enable interrupts early */ |
121 | andl $~0x200,EFLAGS-R11(%rsp) | 123 | andl $~0x200,EFLAGS-R11(%rsp) |
122 | RESTORE_ARGS 1,24,1,1,1,1 | 124 | RESTORE_ARGS 1,24,1,1,1,1 |
@@ -203,6 +205,7 @@ ENTRY(ia32_cstar_target) | |||
203 | .quad 1b,ia32_badarg | 205 | .quad 1b,ia32_badarg |
204 | .previous | 206 | .previous |
205 | GET_THREAD_INFO(%r10) | 207 | GET_THREAD_INFO(%r10) |
208 | orl $TS_COMPAT,threadinfo_status(%r10) | ||
206 | testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) | 209 | testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) |
207 | CFI_REMEMBER_STATE | 210 | CFI_REMEMBER_STATE |
208 | jnz cstar_tracesys | 211 | jnz cstar_tracesys |
@@ -216,6 +219,7 @@ cstar_do_call: | |||
216 | cli | 219 | cli |
217 | testl $_TIF_ALLWORK_MASK,threadinfo_flags(%r10) | 220 | testl $_TIF_ALLWORK_MASK,threadinfo_flags(%r10) |
218 | jnz int_ret_from_sys_call | 221 | jnz int_ret_from_sys_call |
222 | andl $~TS_COMPAT,threadinfo_status(%r10) | ||
219 | RESTORE_ARGS 1,-ARG_SKIP,1,1,1 | 223 | RESTORE_ARGS 1,-ARG_SKIP,1,1,1 |
220 | movl RIP-ARGOFFSET(%rsp),%ecx | 224 | movl RIP-ARGOFFSET(%rsp),%ecx |
221 | CFI_REGISTER rip,rcx | 225 | CFI_REGISTER rip,rcx |
@@ -288,6 +292,7 @@ ENTRY(ia32_syscall) | |||
288 | this could be a problem. */ | 292 | this could be a problem. */ |
289 | SAVE_ARGS 0,0,1 | 293 | SAVE_ARGS 0,0,1 |
290 | GET_THREAD_INFO(%r10) | 294 | GET_THREAD_INFO(%r10) |
295 | orl $TS_COMPAT,threadinfo_status(%r10) | ||
291 | testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) | 296 | testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) |
292 | jnz ia32_tracesys | 297 | jnz ia32_tracesys |
293 | ia32_do_syscall: | 298 | ia32_do_syscall: |