Skip to content

Commit c8ce48f

Browse files
committed
asm-generic: Make time32 syscall numbers optional
We don't want new architectures to even provide the old 32-bit time_t based system calls any more, or define the syscall number macros. Add a new __ARCH_WANT_TIME32_SYSCALLS macro that gets enabled for all existing 32-bit architectures using the generic system call table, so we don't change any current behavior. Since this symbol is evaluated in user space as well, we cannot use a Kconfig CONFIG_* macro but have to define it in uapi/asm/unistd.h. On 64-bit architectures, the same system call numbers mostly refer to the system calls we want to keep, as they already pass 64-bit time_t. As new architectures no longer provide these, we need new exceptions in checksyscalls.sh. Signed-off-by: Arnd Bergmann <arnd@arndb.de>
1 parent 80d7da1 commit c8ce48f

File tree

13 files changed

+56
-0
lines changed

13 files changed

+56
-0
lines changed

arch/arc/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#define __ARCH_WANT_SYS_CLONE
2424
#define __ARCH_WANT_SYS_VFORK
2525
#define __ARCH_WANT_SYS_FORK
26+
#define __ARCH_WANT_TIME32_SYSCALLS
2627

2728
#define sys_mmap2 sys_mmap_pgoff
2829

arch/arm64/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
#define __ARCH_WANT_RENAMEAT
1919
#define __ARCH_WANT_NEW_STAT
2020
#define __ARCH_WANT_SET_GET_RLIMIT
21+
#define __ARCH_WANT_TIME32_SYSCALLS
2122

2223
#include <asm-generic/unistd.h>

arch/c6x/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define __ARCH_WANT_STAT64
2020
#define __ARCH_WANT_SET_GET_RLIMIT
2121
#define __ARCH_WANT_SYS_CLONE
22+
#define __ARCH_WANT_TIME32_SYSCALLS
2223

2324
/* Use the standard ABI for syscalls. */
2425
#include <asm-generic/unistd.h>

arch/csky/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#define __ARCH_WANT_SYS_CLONE
55
#define __ARCH_WANT_SET_GET_RLIMIT
6+
#define __ARCH_WANT_TIME32_SYSCALLS
67
#include <asm-generic/unistd.h>
78

89
#define __NR_set_thread_area (__NR_arch_specific_syscall + 0)

arch/h8300/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
#define __ARCH_WANT_RENAMEAT
44
#define __ARCH_WANT_STAT64
55
#define __ARCH_WANT_SET_GET_RLIMIT
6+
#define __ARCH_WANT_TIME32_SYSCALLS
67

78
#include <asm-generic/unistd.h>

arch/hexagon/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@
3535
#define __ARCH_WANT_SYS_CLONE
3636
#define __ARCH_WANT_SYS_VFORK
3737
#define __ARCH_WANT_SYS_FORK
38+
#define __ARCH_WANT_TIME32_SYSCALLS
3839

3940
#include <asm-generic/unistd.h>

arch/nds32/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#define __ARCH_WANT_STAT64
55
#define __ARCH_WANT_SYNC_FILE_RANGE2
66
#define __ARCH_WANT_SET_GET_RLIMIT
7+
#define __ARCH_WANT_TIME32_SYSCALLS
78

89
/* Use the standard ABI for syscalls */
910
#include <asm-generic/unistd.h>

arch/nios2/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#define __ARCH_WANT_RENAMEAT
2222
#define __ARCH_WANT_STAT64
2323
#define __ARCH_WANT_SET_GET_RLIMIT
24+
#define __ARCH_WANT_TIME32_SYSCALLS
2425

2526
/* Use the standard ABI for syscalls */
2627
#include <asm-generic/unistd.h>

arch/openrisc/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#define __ARCH_WANT_SET_GET_RLIMIT
2525
#define __ARCH_WANT_SYS_FORK
2626
#define __ARCH_WANT_SYS_CLONE
27+
#define __ARCH_WANT_TIME32_SYSCALLS
2728

2829
#include <asm-generic/unistd.h>
2930

arch/riscv/include/uapi/asm/unistd.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
#define __ARCH_WANT_NEW_STAT
2020
#endif /* __LP64__ */
2121
#define __ARCH_WANT_SET_GET_RLIMIT
22+
#ifndef __LP64__
23+
#define __ARCH_WANT_TIME32_SYSCALLS
24+
#endif
2225

2326
#include <asm-generic/unistd.h>
2427

arch/unicore32/include/uapi/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#define __ARCH_WANT_RENAMEAT
1515
#define __ARCH_WANT_SET_GET_RLIMIT
16+
#define __ARCH_WANT_TIME32_SYSCALLS
1617

1718
/* Use the standard ABI for syscalls. */
1819
#include <asm-generic/unistd.h>

include/uapi/asm-generic/unistd.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ __SYSCALL(__NR_io_destroy, sys_io_destroy)
3838
__SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit)
3939
#define __NR_io_cancel 3
4040
__SYSCALL(__NR_io_cancel, sys_io_cancel)
41+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
4142
#define __NR_io_getevents 4
4243
__SC_3264(__NR_io_getevents, sys_io_getevents_time32, sys_io_getevents)
44+
#endif
4345

4446
/* fs/xattr.c */
4547
#define __NR_setxattr 5
@@ -222,10 +224,12 @@ __SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev)
222224
__SYSCALL(__NR3264_sendfile, sys_sendfile64)
223225

224226
/* fs/select.c */
227+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
225228
#define __NR_pselect6 72
226229
__SC_COMP_3264(__NR_pselect6, sys_pselect6_time32, sys_pselect6, compat_sys_pselect6_time32)
227230
#define __NR_ppoll 73
228231
__SC_COMP_3264(__NR_ppoll, sys_ppoll_time32, sys_ppoll, compat_sys_ppoll_time32)
232+
#endif
229233

230234
/* fs/signalfd.c */
231235
#define __NR_signalfd4 74
@@ -269,16 +273,20 @@ __SC_COMP(__NR_sync_file_range, sys_sync_file_range, \
269273
/* fs/timerfd.c */
270274
#define __NR_timerfd_create 85
271275
__SYSCALL(__NR_timerfd_create, sys_timerfd_create)
276+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
272277
#define __NR_timerfd_settime 86
273278
__SC_3264(__NR_timerfd_settime, sys_timerfd_settime32, \
274279
sys_timerfd_settime)
275280
#define __NR_timerfd_gettime 87
276281
__SC_3264(__NR_timerfd_gettime, sys_timerfd_gettime32, \
277282
sys_timerfd_gettime)
283+
#endif
278284

279285
/* fs/utimes.c */
286+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
280287
#define __NR_utimensat 88
281288
__SC_3264(__NR_utimensat, sys_utimensat_time32, sys_utimensat)
289+
#endif
282290

283291
/* kernel/acct.c */
284292
#define __NR_acct 89
@@ -309,8 +317,10 @@ __SYSCALL(__NR_set_tid_address, sys_set_tid_address)
309317
__SYSCALL(__NR_unshare, sys_unshare)
310318

311319
/* kernel/futex.c */
320+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
312321
#define __NR_futex 98
313322
__SC_3264(__NR_futex, sys_futex_time32, sys_futex)
323+
#endif
314324
#define __NR_set_robust_list 99
315325
__SC_COMP(__NR_set_robust_list, sys_set_robust_list, \
316326
compat_sys_set_robust_list)
@@ -319,8 +329,10 @@ __SC_COMP(__NR_get_robust_list, sys_get_robust_list, \
319329
compat_sys_get_robust_list)
320330

321331
/* kernel/hrtimer.c */
332+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
322333
#define __NR_nanosleep 101
323334
__SC_3264(__NR_nanosleep, sys_nanosleep_time32, sys_nanosleep)
335+
#endif
324336

325337
/* kernel/itimer.c */
326338
#define __NR_getitimer 102
@@ -341,14 +353,19 @@ __SYSCALL(__NR_delete_module, sys_delete_module)
341353
/* kernel/posix-timers.c */
342354
#define __NR_timer_create 107
343355
__SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create)
356+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
344357
#define __NR_timer_gettime 108
345358
__SC_3264(__NR_timer_gettime, sys_timer_gettime32, sys_timer_gettime)
359+
#endif
346360
#define __NR_timer_getoverrun 109
347361
__SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun)
362+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
348363
#define __NR_timer_settime 110
349364
__SC_3264(__NR_timer_settime, sys_timer_settime32, sys_timer_settime)
365+
#endif
350366
#define __NR_timer_delete 111
351367
__SYSCALL(__NR_timer_delete, sys_timer_delete)
368+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
352369
#define __NR_clock_settime 112
353370
__SC_3264(__NR_clock_settime, sys_clock_settime32, sys_clock_settime)
354371
#define __NR_clock_gettime 113
@@ -358,6 +375,7 @@ __SC_3264(__NR_clock_getres, sys_clock_getres_time32, sys_clock_getres)
358375
#define __NR_clock_nanosleep 115
359376
__SC_3264(__NR_clock_nanosleep, sys_clock_nanosleep_time32, \
360377
sys_clock_nanosleep)
378+
#endif
361379

362380
/* kernel/printk.c */
363381
#define __NR_syslog 116
@@ -388,9 +406,11 @@ __SYSCALL(__NR_sched_yield, sys_sched_yield)
388406
__SYSCALL(__NR_sched_get_priority_max, sys_sched_get_priority_max)
389407
#define __NR_sched_get_priority_min 126
390408
__SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min)
409+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
391410
#define __NR_sched_rr_get_interval 127
392411
__SC_3264(__NR_sched_rr_get_interval, sys_sched_rr_get_interval_time32, \
393412
sys_sched_rr_get_interval)
413+
#endif
394414

395415
/* kernel/signal.c */
396416
#define __NR_restart_syscall 128
@@ -411,9 +431,11 @@ __SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction)
411431
__SC_COMP(__NR_rt_sigprocmask, sys_rt_sigprocmask, compat_sys_rt_sigprocmask)
412432
#define __NR_rt_sigpending 136
413433
__SC_COMP(__NR_rt_sigpending, sys_rt_sigpending, compat_sys_rt_sigpending)
434+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
414435
#define __NR_rt_sigtimedwait 137
415436
__SC_COMP_3264(__NR_rt_sigtimedwait, sys_rt_sigtimedwait_time32, \
416437
sys_rt_sigtimedwait, compat_sys_rt_sigtimedwait_time32)
438+
#endif
417439
#define __NR_rt_sigqueueinfo 138
418440
__SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \
419441
compat_sys_rt_sigqueueinfo)
@@ -486,12 +508,14 @@ __SYSCALL(__NR_prctl, sys_prctl)
486508
__SYSCALL(__NR_getcpu, sys_getcpu)
487509

488510
/* kernel/time.c */
511+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
489512
#define __NR_gettimeofday 169
490513
__SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday)
491514
#define __NR_settimeofday 170
492515
__SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday)
493516
#define __NR_adjtimex 171
494517
__SC_3264(__NR_adjtimex, sys_adjtimex_time32, sys_adjtimex)
518+
#endif
495519

496520
/* kernel/timer.c */
497521
#define __NR_getpid 172
@@ -516,11 +540,13 @@ __SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo)
516540
__SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open)
517541
#define __NR_mq_unlink 181
518542
__SYSCALL(__NR_mq_unlink, sys_mq_unlink)
543+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
519544
#define __NR_mq_timedsend 182
520545
__SC_3264(__NR_mq_timedsend, sys_mq_timedsend_time32, sys_mq_timedsend)
521546
#define __NR_mq_timedreceive 183
522547
__SC_3264(__NR_mq_timedreceive, sys_mq_timedreceive_time32, \
523548
sys_mq_timedreceive)
549+
#endif
524550
#define __NR_mq_notify 184
525551
__SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify)
526552
#define __NR_mq_getsetattr 185
@@ -541,8 +567,10 @@ __SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd)
541567
__SYSCALL(__NR_semget, sys_semget)
542568
#define __NR_semctl 191
543569
__SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl)
570+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
544571
#define __NR_semtimedop 192
545572
__SC_COMP(__NR_semtimedop, sys_semtimedop, sys_semtimedop_time32)
573+
#endif
546574
#define __NR_semop 193
547575
__SYSCALL(__NR_semop, sys_semop)
548576

@@ -663,17 +691,21 @@ __SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \
663691
__SYSCALL(__NR_perf_event_open, sys_perf_event_open)
664692
#define __NR_accept4 242
665693
__SYSCALL(__NR_accept4, sys_accept4)
694+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
666695
#define __NR_recvmmsg 243
667696
__SC_COMP_3264(__NR_recvmmsg, sys_recvmmsg_time32, sys_recvmmsg, compat_sys_recvmmsg_time32)
697+
#endif
668698

669699
/*
670700
* Architectures may provide up to 16 syscalls of their own
671701
* starting with this value.
672702
*/
673703
#define __NR_arch_specific_syscall 244
674704

705+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
675706
#define __NR_wait4 260
676707
__SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4)
708+
#endif
677709
#define __NR_prlimit64 261
678710
__SYSCALL(__NR_prlimit64, sys_prlimit64)
679711
#define __NR_fanotify_init 262
@@ -684,8 +716,10 @@ __SYSCALL(__NR_fanotify_mark, sys_fanotify_mark)
684716
__SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at)
685717
#define __NR_open_by_handle_at 265
686718
__SYSCALL(__NR_open_by_handle_at, sys_open_by_handle_at)
719+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
687720
#define __NR_clock_adjtime 266
688721
__SC_3264(__NR_clock_adjtime, sys_clock_adjtime32, sys_clock_adjtime)
722+
#endif
689723
#define __NR_syncfs 267
690724
__SYSCALL(__NR_syncfs, sys_syncfs)
691725
#define __NR_setns 268
@@ -738,8 +772,10 @@ __SYSCALL(__NR_pkey_alloc, sys_pkey_alloc)
738772
__SYSCALL(__NR_pkey_free, sys_pkey_free)
739773
#define __NR_statx 291
740774
__SYSCALL(__NR_statx, sys_statx)
775+
#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG != 32
741776
#define __NR_io_pgetevents 292
742777
__SC_COMP_3264(__NR_io_pgetevents, sys_io_pgetevents_time32, sys_io_pgetevents, compat_sys_io_pgetevents)
778+
#endif
743779
#define __NR_rseq 293
744780
__SYSCALL(__NR_rseq, sys_rseq)
745781
#define __NR_kexec_file_load 294

scripts/checksyscalls.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ cat << EOF
143143
#define __IGNORE_rt_sigtimedwait
144144
#define __IGNORE_futex
145145
#define __IGNORE_sched_rr_get_interval
146+
#define __IGNORE_gettimeofday
147+
#define __IGNORE_settimeofday
148+
#define __IGNORE_wait4
149+
#define __IGNORE_adjtimex
150+
#define __IGNORE_nanosleep
151+
#define __IGNORE_io_getevents
152+
#define __IGNORE_recvmmsg
146153
#endif
147154
148155
/* i386-specific or historical system calls */

0 commit comments

Comments
 (0)