1 /*
2 * Copyright (c) 2015 Mike Frysinger <vapier@gentoo.org>
3 * Copyright (c) 2016-2020 Dmitry V. Levin <ldv@strace.io>
4 * Copyright (c) 2016-2021 Eugene Syromyatnikov <evgsyr@gmail.com>
5 * Copyright (c) 2017 Chen Jingpiao <chenjingpiao@gmail.com>
6 * Copyright (c) 2018 Paul Chaignon <paul.chaignon@gmail.com>
7 * Copyright (c) 2021-2022 The strace developers.
8 * All rights reserved.
9 *
10 * SPDX-License-Identifier: LGPL-2.1-or-later
11 */
12
13 #include "defs.h"
14
15 /* for __X32_SYSCALL_BIT */
16 #include "scno.h"
17
18 /* PERSONALITY*_AUDIT_ARCH definitions depend on AUDIT_ARCH_* constants. */
19 #include <linux/audit.h>
20 #define XLAT_MACROS_ONLY
21 # include "xlat/elf_em.h"
22 # include "xlat/audit_arch.h"
23 #undef XLAT_MACROS_ONLY
24
25 #include "nr_prefix.c"
26
27 const struct audit_arch_t audit_arch_vec[SUPPORTED_PERSONALITIES] = {
28 PERSONALITY0_AUDIT_ARCH,
29 #if SUPPORTED_PERSONALITIES > 1
30 PERSONALITY1_AUDIT_ARCH,
31 # if SUPPORTED_PERSONALITIES > 2
32 PERSONALITY2_AUDIT_ARCH,
33 # endif
34 #endif
35 };
36
37
38 const char *
39 syscall_name_arch(kernel_ulong_t nr, unsigned int arch, const char **prefix)
40 {
41 for (size_t i = 0; i < SUPPORTED_PERSONALITIES; i++) {
42 if (arch != audit_arch_vec[i].arch)
43 continue;
44
45 kernel_ulong_t scno = shuffle_scno_pers(nr, i);
46 if (!scno_pers_is_valid(scno, i))
47 continue;
48
49 if (prefix) {
50 *prefix = (i == current_personality) ? nr_prefix(nr)
51 : NULL;
52 }
53 return sysent_vec[i][scno].sys_name;
54 }
55
56 if (prefix)
57 *prefix = NULL;
58 return NULL;
59 }