x86/asm/entry: Rename compat syscall entry points
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
arch/x86/entry/syscall_32.c line 14
Quoted 11 lines
arch/x86/entry/syscall_32.c +1
-1@@ -10,7 +10,7 @@#else #define SYM (sym, compat) sym#define ia32_sys_call_table sys_call_table -#define __NR_ia32_syscall_max __NR_syscall_max +#define __NR_entry_INT80_compat_max __NR_syscall_max#endif
This change doesn't look intended. __NR_ia32_syscall_max is used by all compat entry points, not just INT80,
--
Brian Gerst
PATCH 1/1 x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max
Quoted 6 lines · Brian Gerst
Quoted 6 lines
arch/x86/entry/syscall_32.c +0
-0@@ -10,7 +10,7 @@#else
Quoted 8 lines
arch/x86/entry/syscall_32.c line 14
Quoted 5 lines
arch/x86/entry/syscall_32.c +1
-1#define SYM (sym, compat) sym#define ia32_sys_call_table sys_call_table -#define __NR_ia32_syscall_max __NR_syscall_max +#define __NR_entry_INT80_compat_max __NR_syscall_max#endif This change doesn't look intended.
__NR_ia32_syscall_maxis used by all compat entry points, not just INT80,
Indeed!
How about the patch below?
Thanks,
Ingo
================>
Quoted 1 line
From
42b9d9a463bfb7252ede4eac24e50a4f013c6717Mon Sep 17 00:00:00 2001
From: Ingo Molnar <[email protected]>
Date: Mon, 8 Jun 2015 21:20:26 +0200
Subject: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max
Brian Gerst noticed that I did a weird rename in the following commit:
b2502b418e63 ("x86/asm/entry: Untangle 'system_call' into two entry points: entry_SYSCALL_64 and entry_INT80_32")
which renamed __NR_ia32_syscall_max to __NR_entry_INT80_compat_max.
Now the original name was a misnomer, but the new one is a misnomer as well, as all compat syscall ABIs (such as x32) share the system call table, not just INT80 based ones.
Rename it to __NR_syscall_compat_max.
--- arch/x86/entry/syscall_32.c | 6 +++--- arch/x86/kernel/asm-offsets_64.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-)
arch/x86/entry/syscall_32.c +3 -3
@@ -10,7 +10,7 @@#else #define SYM (sym, compat) sym#define ia32_sys_call_table sys_call_table -#define __NR_entry_INT80_compat_max __NR_syscall_max +#define __NR_syscall_compat_max __NR_syscall_max#endif #define __SYSCALL_I386 (nr, sym, compat) extern asmlinkage void SYM(sym, compat)(void) ;
@@ -23,11 +23,11 @@ typedef asmlinkage void (*sys_call_ptr_t)(void); extern asmlinkage void sys_ni_syscall(void); -__visible const sys_call_ptr_t ia32_sys_call_table[__NR_entry_INT80_compat_max+1] = { +__visible const sys_call_ptr_t ia32_sys_call_table[__NR_syscall_compat_max+1] = {/* * Smells like a compiler bug -- it doesn't work * when the & below is removed. */ - [0 ... __NR_entry_INT80_compat_max] = &sys_ni_syscall, + [0 ... __NR_syscall_compat_max] = &sys_ni_syscall, #include <asm/syscalls_32.h> };
arch/x86/kernel/asm-offsets_64.c +1 -1
@@ -66,7 +66,7 @@ int main(void)DEFINE (__NR_syscall_max,sizeof (syscalls_64) -1 );DEFINE (NR_syscalls,sizeof (syscalls_64)); -DEFINE (__NR_entry_INT80_compat_max,sizeof (syscalls_ia32) -1 ); +DEFINE (__NR_syscall_compat_max,sizeof (syscalls_ia32) -1 );DEFINE (IA32_NR_syscalls,sizeof (syscalls_ia32));return 0 ;
Re: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max
Quoted 34 lines · Ingo Molnar
Quoted 6 lines · Brian Gerst
Quoted 6 lines
arch/x86/entry/syscall_32.c +0
-0@@ -10,7 +10,7 @@#else Quoted 8 lines
arch/x86/entry/syscall_32.c line 14
Quoted 5 lines
arch/x86/entry/syscall_32.c +1
-1#define SYM (sym, compat) sym#define ia32_sys_call_table sys_call_table -#define __NR_ia32_syscall_max __NR_syscall_max +#define __NR_entry_INT80_compat_max __NR_syscall_max#endif This change doesn't look intended.
__NR_ia32_syscall_maxis used by all compat entry points, not just INT80,Indeed!
How about the patch below?
Thanks,
Ingo
================>
From42b9d9a463bfb7252ede4eac24e50a4f013c6717Mon Sep 17 00:00:00 2001
From: Ingo Molnar <[email protected]>
Date: Mon, 8 Jun 2015 21:20:26 +0200
Subject: [PATCH] x86/asm/entry: (Re-)rename__NR_entry_INT80_compat_maxto__NR_syscall_compat_maxBrian Gerst noticed that I did a weird rename in the following commit:
Quoted 7 lines
b2502b418e63 ("x86/asm/entry: Untangle 'system_call' into two entry points: entry_SYSCALL_64 and entry_INT80_32")which renamed
__NR_ia32_syscall_maxto__NR_entry_INT80_compat_max.Now the original name was a misnomer, but the new one is a misnomer as well, as all compat syscall ABIs (such as x32) share the system call table, not just INT80 based ones.
Not quite true. X32 is really an extension of the 64-bit ABI to support the ILP32 data model. It uses the 64-bit SYSCALL entry point and table, but with different syscall numbers for the syscalls that need 32-bit pointer handling in data structures.
So, __NR_syscall_compat_max is only for the 32-bit ABI compat syscall entries (int80, sysenter, and syscall from 32-bit mode), and not X32.
--
Brian Gerst
Re: [PATCH] x86/asm/entry: (Re-)rename __NR_entry_INT80_compat_max to __NR_syscall_compat_max
Quoted 43 lines · Brian Gerst
Quoted 34 lines · Ingo Molnar
Quoted 6 lines · Brian Gerst
Quoted 6 lines
arch/x86/entry/syscall_32.c +0
-0@@ -10,7 +10,7 @@#else Quoted 8 lines
arch/x86/entry/syscall_32.c line 14
Quoted 5 lines
arch/x86/entry/syscall_32.c +1
-1#define SYM (sym, compat) sym#define ia32_sys_call_table sys_call_table -#define __NR_ia32_syscall_max __NR_syscall_max +#define __NR_entry_INT80_compat_max __NR_syscall_max#endif This change doesn't look intended.
__NR_ia32_syscall_maxis used by all compat entry points, not just INT80,Indeed!
How about the patch below?
Thanks,
Ingo
================>
From42b9d9a463bfb7252ede4eac24e50a4f013c6717Mon Sep 17 00:00:00 2001
From: Ingo Molnar <[email protected]>
Date: Mon, 8 Jun 2015 21:20:26 +0200
Subject: [PATCH] x86/asm/entry: (Re-)rename__NR_entry_INT80_compat_maxto__NR_syscall_compat_maxBrian Gerst noticed that I did a weird rename in the following commit:
Quoted 7 lines
b2502b418e63 ("x86/asm/entry: Untangle 'system_call' into two entry points: entry_SYSCALL_64 and entry_INT80_32")which renamed
__NR_ia32_syscall_maxto__NR_entry_INT80_compat_max.Now the original name was a misnomer, but the new one is a misnomer as well, as all compat syscall ABIs (such as x32) share the system call table, not just INT80 based ones.
Quoted 7 lines
Not quite true. X32 is really an extension of the 64-bit ABI to support the ILP32 data model. It uses the 64-bit SYSCALL entry point and table, but with different syscall numbers for the syscalls that need 32-bit pointer handling in data structures.
So,
__NR_syscall_compat_maxis only for the 32-bit ABI compat syscall entries (int80, sysenter, and syscall from 32-bit mode), and not X32.
Indeed, and I knew this...
Fixed the brainfart in the changelog.
Thanks,
Ingo