diff options
Diffstat (limited to 'arch/um')
| -rw-r--r-- | arch/um/Kconfig | 2 | ||||
| -rw-r--r-- | arch/um/Makefile-x86_64 | 4 | ||||
| -rw-r--r-- | arch/um/include/sysdep-i386/stub.h | 29 | ||||
| -rw-r--r-- | arch/um/include/sysdep-x86_64/stub.h | 30 | ||||
| -rw-r--r-- | arch/um/include/um_uaccess.h | 2 | ||||
| -rw-r--r-- | arch/um/kernel/skas/clone.c | 23 | ||||
| -rw-r--r-- | arch/um/kernel/skas/include/uaccess-skas.h | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/start_up.c | 22 | ||||
| -rw-r--r-- | arch/um/os-Linux/user_syms.c | 5 | ||||
| -rw-r--r-- | arch/um/scripts/Makefile.rules | 5 | ||||
| -rw-r--r-- | arch/um/sys-i386/Makefile | 8 | ||||
| -rw-r--r-- | arch/um/sys-x86_64/Makefile | 5 |
12 files changed, 79 insertions, 57 deletions
diff --git a/arch/um/Kconfig b/arch/um/Kconfig index 563301fe5df8..1eb21de9d1b5 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig | |||
| @@ -289,6 +289,8 @@ source "arch/um/Kconfig.net" | |||
| 289 | 289 | ||
| 290 | source "drivers/net/Kconfig" | 290 | source "drivers/net/Kconfig" |
| 291 | 291 | ||
| 292 | source "drivers/connector/Kconfig" | ||
| 293 | |||
| 292 | source "fs/Kconfig" | 294 | source "fs/Kconfig" |
| 293 | 295 | ||
| 294 | source "security/Kconfig" | 296 | source "security/Kconfig" |
diff --git a/arch/um/Makefile-x86_64 b/arch/um/Makefile-x86_64 index 4f118d5cc2ee..38df311e75dc 100644 --- a/arch/um/Makefile-x86_64 +++ b/arch/um/Makefile-x86_64 | |||
| @@ -12,3 +12,7 @@ CHECKFLAGS += -m64 | |||
| 12 | 12 | ||
| 13 | ELF_ARCH := i386:x86-64 | 13 | ELF_ARCH := i386:x86-64 |
| 14 | ELF_FORMAT := elf64-x86-64 | 14 | ELF_FORMAT := elf64-x86-64 |
| 15 | |||
| 16 | # Not on all 64-bit distros /lib is a symlink to /lib64. PLD is an example. | ||
| 17 | |||
| 18 | LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64 | ||
diff --git a/arch/um/include/sysdep-i386/stub.h b/arch/um/include/sysdep-i386/stub.h index 6ba8cbbe0d36..b492b12b4a10 100644 --- a/arch/um/include/sysdep-i386/stub.h +++ b/arch/um/include/sysdep-i386/stub.h | |||
| @@ -6,8 +6,12 @@ | |||
| 6 | #ifndef __SYSDEP_STUB_H | 6 | #ifndef __SYSDEP_STUB_H |
| 7 | #define __SYSDEP_STUB_H | 7 | #define __SYSDEP_STUB_H |
| 8 | 8 | ||
| 9 | #include <sys/mman.h> | ||
| 9 | #include <asm/ptrace.h> | 10 | #include <asm/ptrace.h> |
| 10 | #include <asm/unistd.h> | 11 | #include <asm/unistd.h> |
| 12 | #include "stub-data.h" | ||
| 13 | #include "kern_constants.h" | ||
| 14 | #include "uml-config.h" | ||
| 11 | 15 | ||
| 12 | extern void stub_segv_handler(int sig); | 16 | extern void stub_segv_handler(int sig); |
| 13 | extern void stub_clone_handler(void); | 17 | extern void stub_clone_handler(void); |
| @@ -76,23 +80,22 @@ static inline long stub_syscall5(long syscall, long arg1, long arg2, long arg3, | |||
| 76 | return ret; | 80 | return ret; |
| 77 | } | 81 | } |
| 78 | 82 | ||
| 79 | static inline long stub_syscall6(long syscall, long arg1, long arg2, long arg3, | 83 | static inline void trap_myself(void) |
| 80 | long arg4, long arg5, long arg6) | ||
| 81 | { | 84 | { |
| 82 | long ret; | 85 | __asm("int3"); |
| 83 | |||
| 84 | __asm__ volatile ("push %%ebp ; movl %%eax,%%ebp ; movl %1,%%eax ; " | ||
| 85 | "int $0x80 ; pop %%ebp" | ||
| 86 | : "=a" (ret) | ||
| 87 | : "g" (syscall), "b" (arg1), "c" (arg2), "d" (arg3), | ||
| 88 | "S" (arg4), "D" (arg5), "0" (arg6)); | ||
| 89 | |||
| 90 | return ret; | ||
| 91 | } | 86 | } |
| 92 | 87 | ||
| 93 | static inline void trap_myself(void) | 88 | static inline void remap_stack(int fd, unsigned long offset) |
| 94 | { | 89 | { |
| 95 | __asm("int3"); | 90 | __asm__ volatile ("movl %%eax,%%ebp ; movl %0,%%eax ; int $0x80 ;" |
| 91 | "movl %7, %%ebx ; movl %%eax, (%%ebx)" | ||
| 92 | : : "g" (STUB_MMAP_NR), "b" (UML_CONFIG_STUB_DATA), | ||
| 93 | "c" (UM_KERN_PAGE_SIZE), | ||
| 94 | "d" (PROT_READ | PROT_WRITE), | ||
| 95 | "S" (MAP_FIXED | MAP_SHARED), "D" (fd), | ||
| 96 | "a" (offset), | ||
| 97 | "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err) | ||
| 98 | : "memory"); | ||
| 96 | } | 99 | } |
| 97 | 100 | ||
| 98 | #endif | 101 | #endif |
diff --git a/arch/um/include/sysdep-x86_64/stub.h b/arch/um/include/sysdep-x86_64/stub.h index c41689c13dc9..92e989f81761 100644 --- a/arch/um/include/sysdep-x86_64/stub.h +++ b/arch/um/include/sysdep-x86_64/stub.h | |||
| @@ -6,8 +6,12 @@ | |||
| 6 | #ifndef __SYSDEP_STUB_H | 6 | #ifndef __SYSDEP_STUB_H |
| 7 | #define __SYSDEP_STUB_H | 7 | #define __SYSDEP_STUB_H |
| 8 | 8 | ||
| 9 | #include <sys/mman.h> | ||
| 9 | #include <asm/unistd.h> | 10 | #include <asm/unistd.h> |
| 10 | #include <sysdep/ptrace_user.h> | 11 | #include <sysdep/ptrace_user.h> |
| 12 | #include "stub-data.h" | ||
| 13 | #include "kern_constants.h" | ||
| 14 | #include "uml-config.h" | ||
| 11 | 15 | ||
| 12 | extern void stub_segv_handler(int sig); | 16 | extern void stub_segv_handler(int sig); |
| 13 | extern void stub_clone_handler(void); | 17 | extern void stub_clone_handler(void); |
| @@ -81,23 +85,23 @@ static inline long stub_syscall5(long syscall, long arg1, long arg2, long arg3, | |||
| 81 | return ret; | 85 | return ret; |
| 82 | } | 86 | } |
| 83 | 87 | ||
| 84 | static inline long stub_syscall6(long syscall, long arg1, long arg2, long arg3, | 88 | static inline void trap_myself(void) |
| 85 | long arg4, long arg5, long arg6) | ||
| 86 | { | 89 | { |
| 87 | long ret; | 90 | __asm("int3"); |
| 88 | |||
| 89 | __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; " | ||
| 90 | "movq %7, %%r9; " __syscall : "=a" (ret) | ||
| 91 | : "0" (syscall), "D" (arg1), "S" (arg2), "d" (arg3), | ||
| 92 | "g" (arg4), "g" (arg5), "g" (arg6) | ||
| 93 | : __syscall_clobber, "r10", "r8", "r9" ); | ||
| 94 | |||
| 95 | return ret; | ||
| 96 | } | 91 | } |
| 97 | 92 | ||
| 98 | static inline void trap_myself(void) | 93 | static inline void remap_stack(long fd, unsigned long offset) |
| 99 | { | 94 | { |
| 100 | __asm("int3"); | 95 | __asm__ volatile ("movq %4,%%r10 ; movq %5,%%r8 ; " |
| 96 | "movq %6, %%r9; " __syscall "; movq %7, %%rbx ; " | ||
| 97 | "movq %%rax, (%%rbx)": | ||
| 98 | : "a" (STUB_MMAP_NR), "D" (UML_CONFIG_STUB_DATA), | ||
| 99 | "S" (UM_KERN_PAGE_SIZE), | ||
| 100 | "d" (PROT_READ | PROT_WRITE), | ||
| 101 | "g" (MAP_FIXED | MAP_SHARED), "g" (fd), | ||
| 102 | "g" (offset), | ||
| 103 | "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err) | ||
| 104 | : __syscall_clobber, "r10", "r8", "r9" ); | ||
| 101 | } | 105 | } |
| 102 | 106 | ||
| 103 | #endif | 107 | #endif |
diff --git a/arch/um/include/um_uaccess.h b/arch/um/include/um_uaccess.h index f8760a3f43b0..4567f1eeb4a7 100644 --- a/arch/um/include/um_uaccess.h +++ b/arch/um/include/um_uaccess.h | |||
| @@ -17,6 +17,8 @@ | |||
| 17 | #include "uaccess-skas.h" | 17 | #include "uaccess-skas.h" |
| 18 | #endif | 18 | #endif |
| 19 | 19 | ||
| 20 | #include "asm/fixmap.h" | ||
| 21 | |||
| 20 | #define __under_task_size(addr, size) \ | 22 | #define __under_task_size(addr, size) \ |
| 21 | (((unsigned long) (addr) < TASK_SIZE) && \ | 23 | (((unsigned long) (addr) < TASK_SIZE) && \ |
| 22 | (((unsigned long) (addr) + (size)) < TASK_SIZE)) | 24 | (((unsigned long) (addr) + (size)) < TASK_SIZE)) |
diff --git a/arch/um/kernel/skas/clone.c b/arch/um/kernel/skas/clone.c index cb37ce9124a6..47b812b3bca8 100644 --- a/arch/um/kernel/skas/clone.c +++ b/arch/um/kernel/skas/clone.c | |||
| @@ -18,11 +18,10 @@ | |||
| 18 | * on some systems. | 18 | * on some systems. |
| 19 | */ | 19 | */ |
| 20 | 20 | ||
| 21 | #define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field) | ||
| 22 | |||
| 23 | void __attribute__ ((__section__ (".__syscall_stub"))) | 21 | void __attribute__ ((__section__ (".__syscall_stub"))) |
| 24 | stub_clone_handler(void) | 22 | stub_clone_handler(void) |
| 25 | { | 23 | { |
| 24 | struct stub_data *data = (struct stub_data *) UML_CONFIG_STUB_DATA; | ||
| 26 | long err; | 25 | long err; |
| 27 | 26 | ||
| 28 | err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD, | 27 | err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD, |
| @@ -35,17 +34,21 @@ stub_clone_handler(void) | |||
| 35 | if(err) | 34 | if(err) |
| 36 | goto out; | 35 | goto out; |
| 37 | 36 | ||
| 38 | err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL, | 37 | err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL, |
| 39 | (long) &STUB_DATA(timer), 0); | 38 | (long) &data->timer, 0); |
| 40 | if(err) | 39 | if(err) |
| 41 | goto out; | 40 | goto out; |
| 42 | 41 | ||
| 43 | err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA, | 42 | remap_stack(data->fd, data->offset); |
| 44 | UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE, | 43 | goto done; |
| 45 | MAP_FIXED | MAP_SHARED, STUB_DATA(fd), | 44 | |
| 46 | STUB_DATA(offset)); | ||
| 47 | out: | 45 | out: |
| 48 | /* save current result. Parent: pid; child: retcode of mmap */ | 46 | /* save current result. |
| 49 | STUB_DATA(err) = err; | 47 | * Parent: pid; |
| 48 | * child: retcode of mmap already saved and it jumps around this | ||
| 49 | * assignment | ||
| 50 | */ | ||
| 51 | data->err = err; | ||
| 52 | done: | ||
| 50 | trap_myself(); | 53 | trap_myself(); |
| 51 | } | 54 | } |
diff --git a/arch/um/kernel/skas/include/uaccess-skas.h b/arch/um/kernel/skas/include/uaccess-skas.h index f611f83ad4ff..64516c556cdf 100644 --- a/arch/um/kernel/skas/include/uaccess-skas.h +++ b/arch/um/kernel/skas/include/uaccess-skas.h | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | #define __SKAS_UACCESS_H | 7 | #define __SKAS_UACCESS_H |
| 8 | 8 | ||
| 9 | #include "asm/errno.h" | 9 | #include "asm/errno.h" |
| 10 | #include "asm/fixmap.h" | ||
| 11 | 10 | ||
| 12 | /* No SKAS-specific checking. */ | 11 | /* No SKAS-specific checking. */ |
| 13 | #define access_ok_skas(type, addr, size) 0 | 12 | #define access_ok_skas(type, addr, size) 0 |
diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c index 37517d49c4ae..29a9e3f43763 100644 --- a/arch/um/os-Linux/start_up.c +++ b/arch/um/os-Linux/start_up.c | |||
| @@ -116,16 +116,16 @@ static int stop_ptraced_child(int pid, void *stack, int exitcode, | |||
| 116 | if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) { | 116 | if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) { |
| 117 | int exit_with = WEXITSTATUS(status); | 117 | int exit_with = WEXITSTATUS(status); |
| 118 | if (exit_with == 2) | 118 | if (exit_with == 2) |
| 119 | printk("check_ptrace : child exited with status 2. " | 119 | printf("check_ptrace : child exited with status 2. " |
| 120 | "Serious trouble happening! Try updating your " | 120 | "Serious trouble happening! Try updating your " |
| 121 | "host skas patch!\nDisabling SYSEMU support."); | 121 | "host skas patch!\nDisabling SYSEMU support."); |
| 122 | printk("check_ptrace : child exited with exitcode %d, while " | 122 | printf("check_ptrace : child exited with exitcode %d, while " |
| 123 | "expecting %d; status 0x%x", exit_with, | 123 | "expecting %d; status 0x%x", exit_with, |
| 124 | exitcode, status); | 124 | exitcode, status); |
| 125 | if (mustpanic) | 125 | if (mustpanic) |
| 126 | panic("\n"); | 126 | panic("\n"); |
| 127 | else | 127 | else |
| 128 | printk("\n"); | 128 | printf("\n"); |
| 129 | ret = -1; | 129 | ret = -1; |
| 130 | } | 130 | } |
| 131 | 131 | ||
| @@ -183,7 +183,7 @@ static void __init check_sysemu(void) | |||
| 183 | void *stack; | 183 | void *stack; |
| 184 | int pid, n, status, count=0; | 184 | int pid, n, status, count=0; |
| 185 | 185 | ||
| 186 | printk("Checking syscall emulation patch for ptrace..."); | 186 | printf("Checking syscall emulation patch for ptrace..."); |
| 187 | sysemu_supported = 0; | 187 | sysemu_supported = 0; |
| 188 | pid = start_ptraced_child(&stack); | 188 | pid = start_ptraced_child(&stack); |
| 189 | 189 | ||
| @@ -207,10 +207,10 @@ static void __init check_sysemu(void) | |||
| 207 | goto fail_stopped; | 207 | goto fail_stopped; |
| 208 | 208 | ||
| 209 | sysemu_supported = 1; | 209 | sysemu_supported = 1; |
| 210 | printk("OK\n"); | 210 | printf("OK\n"); |
| 211 | set_using_sysemu(!force_sysemu_disabled); | 211 | set_using_sysemu(!force_sysemu_disabled); |
| 212 | 212 | ||
| 213 | printk("Checking advanced syscall emulation patch for ptrace..."); | 213 | printf("Checking advanced syscall emulation patch for ptrace..."); |
| 214 | pid = start_ptraced_child(&stack); | 214 | pid = start_ptraced_child(&stack); |
| 215 | 215 | ||
| 216 | if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0, | 216 | if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0, |
| @@ -246,7 +246,7 @@ static void __init check_sysemu(void) | |||
| 246 | goto fail_stopped; | 246 | goto fail_stopped; |
| 247 | 247 | ||
| 248 | sysemu_supported = 2; | 248 | sysemu_supported = 2; |
| 249 | printk("OK\n"); | 249 | printf("OK\n"); |
| 250 | 250 | ||
| 251 | if ( !force_sysemu_disabled ) | 251 | if ( !force_sysemu_disabled ) |
| 252 | set_using_sysemu(sysemu_supported); | 252 | set_using_sysemu(sysemu_supported); |
| @@ -255,7 +255,7 @@ static void __init check_sysemu(void) | |||
| 255 | fail: | 255 | fail: |
| 256 | stop_ptraced_child(pid, stack, 1, 0); | 256 | stop_ptraced_child(pid, stack, 1, 0); |
| 257 | fail_stopped: | 257 | fail_stopped: |
| 258 | printk("missing\n"); | 258 | printf("missing\n"); |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | static void __init check_ptrace(void) | 261 | static void __init check_ptrace(void) |
| @@ -263,7 +263,7 @@ static void __init check_ptrace(void) | |||
| 263 | void *stack; | 263 | void *stack; |
| 264 | int pid, syscall, n, status; | 264 | int pid, syscall, n, status; |
| 265 | 265 | ||
| 266 | printk("Checking that ptrace can change system call numbers..."); | 266 | printf("Checking that ptrace can change system call numbers..."); |
| 267 | pid = start_ptraced_child(&stack); | 267 | pid = start_ptraced_child(&stack); |
| 268 | 268 | ||
| 269 | if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0) | 269 | if(ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0) |
| @@ -292,7 +292,7 @@ static void __init check_ptrace(void) | |||
| 292 | } | 292 | } |
| 293 | } | 293 | } |
| 294 | stop_ptraced_child(pid, stack, 0, 1); | 294 | stop_ptraced_child(pid, stack, 0, 1); |
| 295 | printk("OK\n"); | 295 | printf("OK\n"); |
| 296 | check_sysemu(); | 296 | check_sysemu(); |
| 297 | } | 297 | } |
| 298 | 298 | ||
| @@ -472,6 +472,8 @@ int can_do_skas(void) | |||
| 472 | 472 | ||
| 473 | int have_devanon = 0; | 473 | int have_devanon = 0; |
| 474 | 474 | ||
| 475 | /* Runs on boot kernel stack - already safe to use printk. */ | ||
| 476 | |||
| 475 | void check_devanon(void) | 477 | void check_devanon(void) |
| 476 | { | 478 | { |
| 477 | int fd; | 479 | int fd; |
diff --git a/arch/um/os-Linux/user_syms.c b/arch/um/os-Linux/user_syms.c index 56d3f870926b..8da6ab31152a 100644 --- a/arch/um/os-Linux/user_syms.c +++ b/arch/um/os-Linux/user_syms.c | |||
| @@ -34,6 +34,11 @@ EXPORT_SYMBOL(strstr); | |||
| 34 | int sym(void); \ | 34 | int sym(void); \ |
| 35 | EXPORT_SYMBOL(sym); | 35 | EXPORT_SYMBOL(sym); |
| 36 | 36 | ||
| 37 | extern void readdir64(void) __attribute__((weak)); | ||
| 38 | EXPORT_SYMBOL(readdir64); | ||
| 39 | extern void truncate64(void) __attribute__((weak)); | ||
| 40 | EXPORT_SYMBOL(truncate64); | ||
| 41 | |||
| 37 | #ifdef SUBARCH_i386 | 42 | #ifdef SUBARCH_i386 |
| 38 | EXPORT_SYMBOL(vsyscall_ehdr); | 43 | EXPORT_SYMBOL(vsyscall_ehdr); |
| 39 | EXPORT_SYMBOL(vsyscall_end); | 44 | EXPORT_SYMBOL(vsyscall_end); |
diff --git a/arch/um/scripts/Makefile.rules b/arch/um/scripts/Makefile.rules index b3fbf125709b..2e41cabd3d93 100644 --- a/arch/um/scripts/Makefile.rules +++ b/arch/um/scripts/Makefile.rules | |||
| @@ -21,11 +21,6 @@ define unprofile | |||
| 21 | endef | 21 | endef |
| 22 | 22 | ||
| 23 | 23 | ||
| 24 | # The stubs and unmap.o can't try to call mcount or update basic block data | ||
| 25 | define unprofile | ||
| 26 | $(patsubst -pg,,$(patsubst -fprofile-arcs -ftest-coverage,,$(1))) | ||
| 27 | endef | ||
| 28 | |||
| 29 | # cmd_make_link checks to see if the $(foo-dir) variable starts with a /. If | 24 | # cmd_make_link checks to see if the $(foo-dir) variable starts with a /. If |
| 30 | # so, it's considered to be a path relative to $(srcdir) rather than | 25 | # so, it's considered to be a path relative to $(srcdir) rather than |
| 31 | # $(srcdir)/arch/$(SUBARCH). This is because x86_64 wants to get ldt.c from | 26 | # $(srcdir)/arch/$(SUBARCH). This is because x86_64 wants to get ldt.c from |
diff --git a/arch/um/sys-i386/Makefile b/arch/um/sys-i386/Makefile index 150059dbee12..f5fd5b0156d0 100644 --- a/arch/um/sys-i386/Makefile +++ b/arch/um/sys-i386/Makefile | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | obj-y = bitops.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \ | 1 | obj-y := bitops.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \ |
| 2 | ptrace_user.o semaphore.o signal.o sigcontext.o stub.o stub_segv.o \ | 2 | ptrace_user.o semaphore.o signal.o sigcontext.o syscalls.o sysrq.o \ |
| 3 | syscalls.o sysrq.o sys_call_table.o | 3 | sys_call_table.o |
| 4 | |||
| 5 | obj-$(CONFIG_MODE_SKAS) += stub.o stub_segv.o | ||
| 4 | 6 | ||
| 5 | obj-$(CONFIG_HIGHMEM) += highmem.o | 7 | obj-$(CONFIG_HIGHMEM) += highmem.o |
| 6 | obj-$(CONFIG_MODULES) += module.o | 8 | obj-$(CONFIG_MODULES) += module.o |
diff --git a/arch/um/sys-x86_64/Makefile b/arch/um/sys-x86_64/Makefile index 00b2025427df..a351091fbd99 100644 --- a/arch/um/sys-x86_64/Makefile +++ b/arch/um/sys-x86_64/Makefile | |||
| @@ -6,8 +6,9 @@ | |||
| 6 | 6 | ||
| 7 | #XXX: why into lib-y? | 7 | #XXX: why into lib-y? |
| 8 | lib-y = bitops.o bugs.o csum-partial.o delay.o fault.o ldt.o mem.o memcpy.o \ | 8 | lib-y = bitops.o bugs.o csum-partial.o delay.o fault.o ldt.o mem.o memcpy.o \ |
| 9 | ptrace.o ptrace_user.o sigcontext.o signal.o stub.o \ | 9 | ptrace.o ptrace_user.o sigcontext.o signal.o syscalls.o \ |
| 10 | stub_segv.o syscalls.o syscall_table.o sysrq.o thunk.o | 10 | syscall_table.o sysrq.o thunk.o |
| 11 | lib-$(CONFIG_MODE_SKAS) += stub.o stub_segv.o | ||
| 11 | 12 | ||
| 12 | obj-y := ksyms.o | 13 | obj-y := ksyms.o |
| 13 | obj-$(CONFIG_MODULES) += module.o um_module.o | 14 | obj-$(CONFIG_MODULES) += module.o um_module.o |
