aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/um/Kconfig.i38614
-rw-r--r--arch/um/Kconfig.x86_6414
-rw-r--r--arch/um/defconfig3
-rw-r--r--arch/um/include/as-layout.h24
-rw-r--r--arch/um/include/sysdep-i386/stub.h11
-rw-r--r--arch/um/include/sysdep-x86_64/stub.h13
-rw-r--r--arch/um/kernel/exec.c3
-rw-r--r--arch/um/kernel/skas/clone.c6
-rw-r--r--arch/um/kernel/skas/mmu.c5
-rw-r--r--arch/um/kernel/skas/process.c2
-rw-r--r--arch/um/kernel/tlb.c6
-rw-r--r--arch/um/kernel/um_arch.c3
-rw-r--r--arch/um/os-Linux/skas/mem.c8
-rw-r--r--arch/um/os-Linux/skas/process.c21
-rw-r--r--arch/um/sys-i386/stub.S9
-rw-r--r--arch/um/sys-i386/stub_segv.c4
-rw-r--r--arch/um/sys-x86_64/stub.S9
-rw-r--r--arch/um/sys-x86_64/stub_segv.c3
18 files changed, 81 insertions, 77 deletions
diff --git a/arch/um/Kconfig.i386 b/arch/um/Kconfig.i386
index d6cffb27fff8..9876d80d85dd 100644
--- a/arch/um/Kconfig.i386
+++ b/arch/um/Kconfig.i386
@@ -65,20 +65,6 @@ config 3_LEVEL_PGTABLES
65 However, this it experimental on 32-bit architectures, so if unsure say 65 However, this it experimental on 32-bit architectures, so if unsure say
66 N (on x86-64 it's automatically enabled, instead, as it's safe there). 66 N (on x86-64 it's automatically enabled, instead, as it's safe there).
67 67
68config STUB_CODE
69 hex
70 default 0xbfffe000 if !HOST_VMSPLIT_2G
71 default 0x7fffe000 if HOST_VMSPLIT_2G
72
73config STUB_DATA
74 hex
75 default 0xbffff000 if !HOST_VMSPLIT_2G
76 default 0x7ffff000 if HOST_VMSPLIT_2G
77
78config STUB_START
79 hex
80 default STUB_CODE
81
82config ARCH_HAS_SC_SIGNALS 68config ARCH_HAS_SC_SIGNALS
83 bool 69 bool
84 default y 70 default y
diff --git a/arch/um/Kconfig.x86_64 b/arch/um/Kconfig.x86_64
index f60e9e506424..d632e9a89cc3 100644
--- a/arch/um/Kconfig.x86_64
+++ b/arch/um/Kconfig.x86_64
@@ -17,24 +17,12 @@ config SEMAPHORE_SLEEPERS
17 17
18config TOP_ADDR 18config TOP_ADDR
19 hex 19 hex
20 default 0x80000000 20 default 0x7fc0000000
21 21
22config 3_LEVEL_PGTABLES 22config 3_LEVEL_PGTABLES
23 bool 23 bool
24 default y 24 default y
25 25
26config STUB_CODE
27 hex
28 default 0x7fbfffe000
29
30config STUB_DATA
31 hex
32 default 0x7fbffff000
33
34config STUB_START
35 hex
36 default STUB_CODE
37
38config ARCH_HAS_SC_SIGNALS 26config ARCH_HAS_SC_SIGNALS
39 bool 27 bool
40 default n 28 default n
diff --git a/arch/um/defconfig b/arch/um/defconfig
index 1cbbe980f106..f609edede065 100644
--- a/arch/um/defconfig
+++ b/arch/um/defconfig
@@ -59,9 +59,6 @@ CONFIG_SEMAPHORE_SLEEPERS=y
59# CONFIG_HOST_2G_2G is not set 59# CONFIG_HOST_2G_2G is not set
60CONFIG_TOP_ADDR=0xc0000000 60CONFIG_TOP_ADDR=0xc0000000
61# CONFIG_3_LEVEL_PGTABLES is not set 61# CONFIG_3_LEVEL_PGTABLES is not set
62CONFIG_STUB_CODE=0xbfffe000
63CONFIG_STUB_DATA=0xbffff000
64CONFIG_STUB_START=0xbfffe000
65CONFIG_ARCH_HAS_SC_SIGNALS=y 62CONFIG_ARCH_HAS_SC_SIGNALS=y
66CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA=y 63CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA=y
67CONFIG_GENERIC_HWEIGHT=y 64CONFIG_GENERIC_HWEIGHT=y
diff --git a/arch/um/include/as-layout.h b/arch/um/include/as-layout.h
index 2f16a1c7d616..a5cdf953e04a 100644
--- a/arch/um/include/as-layout.h
+++ b/arch/um/include/as-layout.h
@@ -6,6 +6,28 @@
6#ifndef __START_H__ 6#ifndef __START_H__
7#define __START_H__ 7#define __START_H__
8 8
9#include "uml-config.h"
10#include "kern_constants.h"
11
12/*
13 * Assembly doesn't want any casting, but C does, so define these
14 * without casts here, and define new symbols with casts inside the C
15 * section.
16 */
17#define ASM_STUB_CODE (UML_CONFIG_TOP_ADDR - 2 * UM_KERN_PAGE_SIZE)
18#define ASM_STUB_DATA (UML_CONFIG_TOP_ADDR - UM_KERN_PAGE_SIZE)
19#define ASM_STUB_START ASM_STUB_CODE
20
21/*
22 * This file is included by the assembly stubs, which just want the
23 * definitions above.
24 */
25#ifndef __ASSEMBLY__
26
27#define STUB_CODE ((unsigned long) ASM_STUB_CODE)
28#define STUB_DATA ((unsigned long) ASM_STUB_DATA)
29#define STUB_START ((unsigned long) ASM_STUB_START)
30
9#include "sysdep/ptrace.h" 31#include "sysdep/ptrace.h"
10 32
11struct cpu_task { 33struct cpu_task {
@@ -32,3 +54,5 @@ extern int linux_main(int argc, char **argv);
32extern void (*sig_info[])(int, struct uml_pt_regs *); 54extern void (*sig_info[])(int, struct uml_pt_regs *);
33 55
34#endif 56#endif
57
58#endif
diff --git a/arch/um/include/sysdep-i386/stub.h b/arch/um/include/sysdep-i386/stub.h
index 19c85f330fc1..8c097b87fca7 100644
--- a/arch/um/include/sysdep-i386/stub.h
+++ b/arch/um/include/sysdep-i386/stub.h
@@ -9,6 +9,7 @@
9#include <sys/mman.h> 9#include <sys/mman.h>
10#include <asm/ptrace.h> 10#include <asm/ptrace.h>
11#include <asm/unistd.h> 11#include <asm/unistd.h>
12#include "as-layout.h"
12#include "stub-data.h" 13#include "stub-data.h"
13#include "kern_constants.h" 14#include "kern_constants.h"
14#include "uml-config.h" 15#include "uml-config.h"
@@ -89,12 +90,12 @@ static inline void remap_stack(int fd, unsigned long offset)
89{ 90{
90 __asm__ volatile ("movl %%eax,%%ebp ; movl %0,%%eax ; int $0x80 ;" 91 __asm__ volatile ("movl %%eax,%%ebp ; movl %0,%%eax ; int $0x80 ;"
91 "movl %7, %%ebx ; movl %%eax, (%%ebx)" 92 "movl %7, %%ebx ; movl %%eax, (%%ebx)"
92 : : "g" (STUB_MMAP_NR), "b" (UML_CONFIG_STUB_DATA), 93 : : "g" (STUB_MMAP_NR), "b" (STUB_DATA),
93 "c" (UM_KERN_PAGE_SIZE), 94 "c" (UM_KERN_PAGE_SIZE),
94 "d" (PROT_READ | PROT_WRITE), 95 "d" (PROT_READ | PROT_WRITE),
95 "S" (MAP_FIXED | MAP_SHARED), "D" (fd), 96 "S" (MAP_FIXED | MAP_SHARED), "D" (fd),
96 "a" (offset), 97 "a" (offset),
97 "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err) 98 "i" (&((struct stub_data *) STUB_DATA)->err)
98 : "memory"); 99 : "memory");
99} 100}
100 101
diff --git a/arch/um/include/sysdep-x86_64/stub.h b/arch/um/include/sysdep-x86_64/stub.h
index 92e989f81761..655f9c2de3ac 100644
--- a/arch/um/include/sysdep-x86_64/stub.h
+++ b/arch/um/include/sysdep-x86_64/stub.h
@@ -9,6 +9,7 @@
9#include <sys/mman.h> 9#include <sys/mman.h>
10#include <asm/unistd.h> 10#include <asm/unistd.h>
11#include <sysdep/ptrace_user.h> 11#include <sysdep/ptrace_user.h>
12#include "as-layout.h"
12#include "stub-data.h" 13#include "stub-data.h"
13#include "kern_constants.h" 14#include "kern_constants.h"
14#include "uml-config.h" 15#include "uml-config.h"
@@ -94,13 +95,13 @@ static inline void remap_stack(long fd, unsigned long offset)
94{ 95{
95 __asm__ volatile ("movq %4,%%r10 ; movq %5,%%r8 ; " 96 __asm__ volatile ("movq %4,%%r10 ; movq %5,%%r8 ; "
96 "movq %6, %%r9; " __syscall "; movq %7, %%rbx ; " 97 "movq %6, %%r9; " __syscall "; movq %7, %%rbx ; "
97 "movq %%rax, (%%rbx)": 98 "movq %%rax, (%%rbx)":
98 : "a" (STUB_MMAP_NR), "D" (UML_CONFIG_STUB_DATA), 99 : "a" (STUB_MMAP_NR), "D" (STUB_DATA),
99 "S" (UM_KERN_PAGE_SIZE), 100 "S" (UM_KERN_PAGE_SIZE),
100 "d" (PROT_READ | PROT_WRITE), 101 "d" (PROT_READ | PROT_WRITE),
101 "g" (MAP_FIXED | MAP_SHARED), "g" (fd), 102 "g" (MAP_FIXED | MAP_SHARED), "g" (fd),
102 "g" (offset), 103 "g" (offset),
103 "i" (&((struct stub_data *) UML_CONFIG_STUB_DATA)->err) 104 "i" (&((struct stub_data *) STUB_DATA)->err)
104 : __syscall_clobber, "r10", "r8", "r9" ); 105 : __syscall_clobber, "r10", "r8", "r9" );
105} 106}
106 107
diff --git a/arch/um/kernel/exec.c b/arch/um/kernel/exec.c
index 7c77adecd919..8196450451cd 100644
--- a/arch/um/kernel/exec.c
+++ b/arch/um/kernel/exec.c
@@ -11,6 +11,7 @@
11#include "asm/current.h" 11#include "asm/current.h"
12#include "asm/processor.h" 12#include "asm/processor.h"
13#include "asm/uaccess.h" 13#include "asm/uaccess.h"
14#include "as-layout.h"
14#include "mem_user.h" 15#include "mem_user.h"
15#include "skas.h" 16#include "skas.h"
16#include "os.h" 17#include "os.h"
@@ -18,7 +19,7 @@
18void flush_thread(void) 19void flush_thread(void)
19{ 20{
20 void *data = NULL; 21 void *data = NULL;
21 unsigned long end = proc_mm ? task_size : CONFIG_STUB_START; 22 unsigned long end = proc_mm ? task_size : STUB_START;
22 int ret; 23 int ret;
23 24
24 arch_flush_thread(&current->thread.arch); 25 arch_flush_thread(&current->thread.arch);
diff --git a/arch/um/kernel/skas/clone.c b/arch/um/kernel/skas/clone.c
index 47b812b3bca8..d119f4f7d897 100644
--- a/arch/um/kernel/skas/clone.c
+++ b/arch/um/kernel/skas/clone.c
@@ -4,6 +4,7 @@
4#include <sys/time.h> 4#include <sys/time.h>
5#include <asm/unistd.h> 5#include <asm/unistd.h>
6#include <asm/page.h> 6#include <asm/page.h>
7#include "as-layout.h"
7#include "ptrace_user.h" 8#include "ptrace_user.h"
8#include "skas.h" 9#include "skas.h"
9#include "stub-data.h" 10#include "stub-data.h"
@@ -21,12 +22,11 @@
21void __attribute__ ((__section__ (".__syscall_stub"))) 22void __attribute__ ((__section__ (".__syscall_stub")))
22stub_clone_handler(void) 23stub_clone_handler(void)
23{ 24{
24 struct stub_data *data = (struct stub_data *) UML_CONFIG_STUB_DATA; 25 struct stub_data *data = (struct stub_data *) STUB_DATA;
25 long err; 26 long err;
26 27
27 err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD, 28 err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,
28 UML_CONFIG_STUB_DATA + UM_KERN_PAGE_SIZE / 2 - 29 STUB_DATA + UM_KERN_PAGE_SIZE / 2 - sizeof(void *));
29 sizeof(void *));
30 if(err != 0) 30 if(err != 0)
31 goto out; 31 goto out;
32 32
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c
index ae79888cf520..f859ec306cd5 100644
--- a/arch/um/kernel/skas/mmu.c
+++ b/arch/um/kernel/skas/mmu.c
@@ -7,6 +7,7 @@
7#include "linux/sched.h" 7#include "linux/sched.h"
8#include "asm/pgalloc.h" 8#include "asm/pgalloc.h"
9#include "asm/pgtable.h" 9#include "asm/pgtable.h"
10#include "as-layout.h"
10#include "os.h" 11#include "os.h"
11#include "skas.h" 12#include "skas.h"
12 13
@@ -83,12 +84,12 @@ int init_new_context(struct task_struct *task, struct mm_struct *mm)
83 */ 84 */
84 mm->pgd[USER_PTRS_PER_PGD] = __pgd(0); 85 mm->pgd[USER_PTRS_PER_PGD] = __pgd(0);
85 86
86 ret = init_stub_pte(mm, CONFIG_STUB_CODE, 87 ret = init_stub_pte(mm, STUB_CODE,
87 (unsigned long) &__syscall_stub_start); 88 (unsigned long) &__syscall_stub_start);
88 if (ret) 89 if (ret)
89 goto out_free; 90 goto out_free;
90 91
91 ret = init_stub_pte(mm, CONFIG_STUB_DATA, stack); 92 ret = init_stub_pte(mm, STUB_DATA, stack);
92 if (ret) 93 if (ret)
93 goto out_free; 94 goto out_free;
94 95
diff --git a/arch/um/kernel/skas/process.c b/arch/um/kernel/skas/process.c
index 0297e63f9725..fce389c2342f 100644
--- a/arch/um/kernel/skas/process.c
+++ b/arch/um/kernel/skas/process.c
@@ -18,7 +18,7 @@ int new_mm(unsigned long stack)
18 return fd; 18 return fd;
19 19
20 if (skas_needs_stub) 20 if (skas_needs_stub)
21 map_stub_pages(fd, CONFIG_STUB_CODE, CONFIG_STUB_DATA, stack); 21 map_stub_pages(fd, STUB_CODE, STUB_DATA, stack);
22 22
23 return fd; 23 return fd;
24} 24}
diff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c
index 942f20ea888a..f4a0e407eee4 100644
--- a/arch/um/kernel/tlb.c
+++ b/arch/um/kernel/tlb.c
@@ -485,8 +485,8 @@ void __flush_tlb_one(unsigned long addr)
485static void fix_range(struct mm_struct *mm, unsigned long start_addr, 485static void fix_range(struct mm_struct *mm, unsigned long start_addr,
486 unsigned long end_addr, int force) 486 unsigned long end_addr, int force)
487{ 487{
488 if (!proc_mm && (end_addr > CONFIG_STUB_START)) 488 if (!proc_mm && (end_addr > STUB_START))
489 end_addr = CONFIG_STUB_START; 489 end_addr = STUB_START;
490 490
491 fix_range_common(mm, start_addr, end_addr, force); 491 fix_range_common(mm, start_addr, end_addr, force);
492} 492}
@@ -510,7 +510,7 @@ void flush_tlb_mm(struct mm_struct *mm)
510 if (atomic_read(&mm->mm_users) == 0) 510 if (atomic_read(&mm->mm_users) == 0)
511 return; 511 return;
512 512
513 end = proc_mm ? task_size : CONFIG_STUB_START; 513 end = proc_mm ? task_size : STUB_START;
514 fix_range(mm, 0, end, 0); 514 fix_range(mm, 0, end, 0);
515} 515}
516 516
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
index 1993e5e12256..f1c71393f578 100644
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -242,7 +242,8 @@ static unsigned long set_task_sizes_skas(unsigned long *task_size_out)
242 242
243 if (!skas_needs_stub) 243 if (!skas_needs_stub)
244 *task_size_out = host_task_size; 244 *task_size_out = host_task_size;
245 else *task_size_out = CONFIG_STUB_START & PGDIR_MASK; 245 else
246 *task_size_out = STUB_START & PGDIR_MASK;
246 247
247 return host_task_size; 248 return host_task_size;
248} 249}
diff --git a/arch/um/os-Linux/skas/mem.c b/arch/um/os-Linux/skas/mem.c
index d58d11179bb7..484e68f9f7ae 100644
--- a/arch/um/os-Linux/skas/mem.c
+++ b/arch/um/os-Linux/skas/mem.c
@@ -10,6 +10,7 @@
10#include <sys/mman.h> 10#include <sys/mman.h>
11#include "init.h" 11#include "init.h"
12#include "kern_constants.h" 12#include "kern_constants.h"
13#include "as-layout.h"
13#include "mm_id.h" 14#include "mm_id.h"
14#include "os.h" 15#include "os.h"
15#include "proc_mm.h" 16#include "proc_mm.h"
@@ -40,7 +41,7 @@ static unsigned long syscall_regs[MAX_REG_NR];
40static int __init init_syscall_regs(void) 41static int __init init_syscall_regs(void)
41{ 42{
42 get_safe_registers(syscall_regs); 43 get_safe_registers(syscall_regs);
43 syscall_regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + 44 syscall_regs[REGS_IP_INDEX] = STUB_CODE +
44 ((unsigned long) &batch_syscall_stub - 45 ((unsigned long) &batch_syscall_stub -
45 (unsigned long) &__syscall_stub_start); 46 (unsigned long) &__syscall_stub_start);
46 return 0; 47 return 0;
@@ -93,8 +94,7 @@ static inline long do_syscall_stub(struct mm_id * mm_idp, void **addr)
93 ret = *((unsigned long *) mm_idp->stack); 94 ret = *((unsigned long *) mm_idp->stack);
94 offset = *((unsigned long *) mm_idp->stack + 1); 95 offset = *((unsigned long *) mm_idp->stack + 1);
95 if (offset) { 96 if (offset) {
96 data = (unsigned long *)(mm_idp->stack + 97 data = (unsigned long *)(mm_idp->stack + offset - STUB_DATA);
97 offset - UML_CONFIG_STUB_DATA);
98 printk(UM_KERN_ERR "do_syscall_stub : ret = %ld, offset = %ld, " 98 printk(UM_KERN_ERR "do_syscall_stub : ret = %ld, offset = %ld, "
99 "data = %p\n", ret, offset, data); 99 "data = %p\n", ret, offset, data);
100 syscall = (unsigned long *)((unsigned long)data + data[0]); 100 syscall = (unsigned long *)((unsigned long)data + data[0]);
@@ -182,7 +182,7 @@ long syscall_stub_data(struct mm_id * mm_idp,
182 memcpy(stack + 1, data, data_count * sizeof(long)); 182 memcpy(stack + 1, data, data_count * sizeof(long));
183 183
184 *stub_addr = (void *)(((unsigned long)(stack + 1) & 184 *stub_addr = (void *)(((unsigned long)(stack + 1) &
185 ~UM_KERN_PAGE_MASK) + UML_CONFIG_STUB_DATA); 185 ~UM_KERN_PAGE_MASK) + STUB_DATA);
186 186
187 return 0; 187 return 0;
188} 188}
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index 8548f126d628..e60d6e6c5a58 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -191,22 +191,23 @@ static int userspace_tramp(void *stack)
191 int fd; 191 int fd;
192 unsigned long long offset; 192 unsigned long long offset;
193 fd = phys_mapping(to_phys(&__syscall_stub_start), &offset); 193 fd = phys_mapping(to_phys(&__syscall_stub_start), &offset);
194 addr = mmap64((void *) UML_CONFIG_STUB_CODE, UM_KERN_PAGE_SIZE, 194 addr = mmap64((void *) STUB_CODE, UM_KERN_PAGE_SIZE,
195 PROT_EXEC, MAP_FIXED | MAP_PRIVATE, fd, offset); 195 PROT_EXEC, MAP_FIXED | MAP_PRIVATE, fd, offset);
196 if (addr == MAP_FAILED) { 196 if (addr == MAP_FAILED) {
197 printk(UM_KERN_ERR "mapping mmap stub failed, " 197 printk(UM_KERN_ERR "mapping mmap stub at 0x%lx failed, "
198 "errno = %d\n", errno); 198 "errno = %d\n", STUB_CODE, errno);
199 exit(1); 199 exit(1);
200 } 200 }
201 201
202 if (stack != NULL) { 202 if (stack != NULL) {
203 fd = phys_mapping(to_phys(stack), &offset); 203 fd = phys_mapping(to_phys(stack), &offset);
204 addr = mmap((void *) UML_CONFIG_STUB_DATA, 204 addr = mmap((void *) STUB_DATA,
205 UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE, 205 UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE,
206 MAP_FIXED | MAP_SHARED, fd, offset); 206 MAP_FIXED | MAP_SHARED, fd, offset);
207 if (addr == MAP_FAILED) { 207 if (addr == MAP_FAILED) {
208 printk(UM_KERN_ERR "mapping segfault stack " 208 printk(UM_KERN_ERR "mapping segfault stack "
209 "failed, errno = %d\n", errno); 209 "at 0x%lx failed, errno = %d\n",
210 STUB_DATA, errno);
210 exit(1); 211 exit(1);
211 } 212 }
212 } 213 }
@@ -214,11 +215,11 @@ static int userspace_tramp(void *stack)
214 if (!ptrace_faultinfo && (stack != NULL)) { 215 if (!ptrace_faultinfo && (stack != NULL)) {
215 struct sigaction sa; 216 struct sigaction sa;
216 217
217 unsigned long v = UML_CONFIG_STUB_CODE + 218 unsigned long v = STUB_CODE +
218 (unsigned long) stub_segv_handler - 219 (unsigned long) stub_segv_handler -
219 (unsigned long) &__syscall_stub_start; 220 (unsigned long) &__syscall_stub_start;
220 221
221 set_sigstack((void *) UML_CONFIG_STUB_DATA, UM_KERN_PAGE_SIZE); 222 set_sigstack((void *) STUB_DATA, UM_KERN_PAGE_SIZE);
222 sigemptyset(&sa.sa_mask); 223 sigemptyset(&sa.sa_mask);
223 sigaddset(&sa.sa_mask, SIGIO); 224 sigaddset(&sa.sa_mask, SIGIO);
224 sigaddset(&sa.sa_mask, SIGWINCH); 225 sigaddset(&sa.sa_mask, SIGWINCH);
@@ -382,10 +383,10 @@ static int __init init_thread_regs(void)
382{ 383{
383 get_safe_registers(thread_regs); 384 get_safe_registers(thread_regs);
384 /* Set parent's instruction pointer to start of clone-stub */ 385 /* Set parent's instruction pointer to start of clone-stub */
385 thread_regs[REGS_IP_INDEX] = UML_CONFIG_STUB_CODE + 386 thread_regs[REGS_IP_INDEX] = STUB_CODE +
386 (unsigned long) stub_clone_handler - 387 (unsigned long) stub_clone_handler -
387 (unsigned long) &__syscall_stub_start; 388 (unsigned long) &__syscall_stub_start;
388 thread_regs[REGS_SP_INDEX] = UML_CONFIG_STUB_DATA + UM_KERN_PAGE_SIZE - 389 thread_regs[REGS_SP_INDEX] = STUB_DATA + UM_KERN_PAGE_SIZE -
389 sizeof(void *); 390 sizeof(void *);
390#ifdef __SIGNAL_FRAMESIZE 391#ifdef __SIGNAL_FRAMESIZE
391 thread_regs[REGS_SP_INDEX] -= __SIGNAL_FRAMESIZE; 392 thread_regs[REGS_SP_INDEX] -= __SIGNAL_FRAMESIZE;
@@ -443,7 +444,7 @@ int copy_context_skas0(unsigned long new_stack, int pid)
443 * child's stack and check it. 444 * child's stack and check it.
444 */ 445 */
445 wait_stub_done(pid); 446 wait_stub_done(pid);
446 if (child_data->err != UML_CONFIG_STUB_DATA) 447 if (child_data->err != STUB_DATA)
447 panic("copy_context_skas0 - stub-child reports error %ld\n", 448 panic("copy_context_skas0 - stub-child reports error %ld\n",
448 child_data->err); 449 child_data->err);
449 450
diff --git a/arch/um/sys-i386/stub.S b/arch/um/sys-i386/stub.S
index 6a70d9ab5c29..e730772c401b 100644
--- a/arch/um/sys-i386/stub.S
+++ b/arch/um/sys-i386/stub.S
@@ -1,4 +1,5 @@
1#include "uml-config.h" 1#include "uml-config.h"
2#include "as-layout.h"
2 3
3 .globl syscall_stub 4 .globl syscall_stub
4.section .__syscall_stub, "x" 5.section .__syscall_stub, "x"
@@ -6,7 +7,7 @@
6 .globl batch_syscall_stub 7 .globl batch_syscall_stub
7batch_syscall_stub: 8batch_syscall_stub:
8 /* load pointer to first operation */ 9 /* load pointer to first operation */
9 mov $(UML_CONFIG_STUB_DATA+8), %esp 10 mov $(ASM_STUB_DATA+8), %esp
10 11
11again: 12again:
12 /* load length of additional data */ 13 /* load length of additional data */
@@ -14,12 +15,12 @@ again:
14 15
15 /* if(length == 0) : end of list */ 16 /* if(length == 0) : end of list */
16 /* write possible 0 to header */ 17 /* write possible 0 to header */
17 mov %eax, UML_CONFIG_STUB_DATA+4 18 mov %eax, ASM_STUB_DATA+4
18 cmpl $0, %eax 19 cmpl $0, %eax
19 jz done 20 jz done
20 21
21 /* save current pointer */ 22 /* save current pointer */
22 mov %esp, UML_CONFIG_STUB_DATA+4 23 mov %esp, ASM_STUB_DATA+4
23 24
24 /* skip additional data */ 25 /* skip additional data */
25 add %eax, %esp 26 add %eax, %esp
@@ -45,7 +46,7 @@ again:
45 46
46done: 47done:
47 /* save return value */ 48 /* save return value */
48 mov %eax, UML_CONFIG_STUB_DATA 49 mov %eax, ASM_STUB_DATA
49 50
50 /* stop */ 51 /* stop */
51 int3 52 int3
diff --git a/arch/um/sys-i386/stub_segv.c b/arch/um/sys-i386/stub_segv.c
index 2355dc19c46c..b3999cb76bfd 100644
--- a/arch/um/sys-i386/stub_segv.c
+++ b/arch/um/sys-i386/stub_segv.c
@@ -6,6 +6,7 @@
6#include <signal.h> 6#include <signal.h>
7#include <sys/select.h> /* The only way I can see to get sigset_t */ 7#include <sys/select.h> /* The only way I can see to get sigset_t */
8#include <asm/unistd.h> 8#include <asm/unistd.h>
9#include "as-layout.h"
9#include "uml-config.h" 10#include "uml-config.h"
10#include "sysdep/stub.h" 11#include "sysdep/stub.h"
11#include "sysdep/sigcontext.h" 12#include "sysdep/sigcontext.h"
@@ -17,8 +18,7 @@ stub_segv_handler(int sig)
17 struct sigcontext *sc = (struct sigcontext *) (&sig + 1); 18 struct sigcontext *sc = (struct sigcontext *) (&sig + 1);
18 int pid; 19 int pid;
19 20
20 GET_FAULTINFO_FROM_SC(*((struct faultinfo *) UML_CONFIG_STUB_DATA), 21 GET_FAULTINFO_FROM_SC(*((struct faultinfo *) STUB_DATA), sc);
21 sc);
22 22
23 pid = stub_syscall0(__NR_getpid); 23 pid = stub_syscall0(__NR_getpid);
24 stub_syscall2(__NR_kill, pid, SIGUSR1); 24 stub_syscall2(__NR_kill, pid, SIGUSR1);
diff --git a/arch/um/sys-x86_64/stub.S b/arch/um/sys-x86_64/stub.S
index 03c279735784..4afe204a6af7 100644
--- a/arch/um/sys-x86_64/stub.S
+++ b/arch/um/sys-x86_64/stub.S
@@ -1,4 +1,5 @@
1#include "uml-config.h" 1#include "uml-config.h"
2#include "as-layout.h"
2 3
3 .globl syscall_stub 4 .globl syscall_stub
4.section .__syscall_stub, "x" 5.section .__syscall_stub, "x"
@@ -7,18 +8,18 @@ syscall_stub:
7 /* We don't have 64-bit constants, so this constructs the address 8 /* We don't have 64-bit constants, so this constructs the address
8 * we need. 9 * we need.
9 */ 10 */
10 movq $(UML_CONFIG_STUB_DATA >> 32), %rbx 11 movq $(ASM_STUB_DATA >> 32), %rbx
11 salq $32, %rbx 12 salq $32, %rbx
12 movq $(UML_CONFIG_STUB_DATA & 0xffffffff), %rcx 13 movq $(ASM_STUB_DATA & 0xffffffff), %rcx
13 or %rcx, %rbx 14 or %rcx, %rbx
14 movq %rax, (%rbx) 15 movq %rax, (%rbx)
15 int3 16 int3
16 17
17 .globl batch_syscall_stub 18 .globl batch_syscall_stub
18batch_syscall_stub: 19batch_syscall_stub:
19 mov $(UML_CONFIG_STUB_DATA >> 32), %rbx 20 mov $(ASM_STUB_DATA >> 32), %rbx
20 sal $32, %rbx 21 sal $32, %rbx
21 mov $(UML_CONFIG_STUB_DATA & 0xffffffff), %rax 22 mov $(ASM_STUB_DATA & 0xffffffff), %rax
22 or %rax, %rbx 23 or %rax, %rbx
23 /* load pointer to first operation */ 24 /* load pointer to first operation */
24 mov %rbx, %rsp 25 mov %rbx, %rsp
diff --git a/arch/um/sys-x86_64/stub_segv.c b/arch/um/sys-x86_64/stub_segv.c
index 652fa34c2cd3..3afb590f0072 100644
--- a/arch/um/sys-x86_64/stub_segv.c
+++ b/arch/um/sys-x86_64/stub_segv.c
@@ -6,6 +6,7 @@
6#include <stddef.h> 6#include <stddef.h>
7#include <signal.h> 7#include <signal.h>
8#include <asm/unistd.h> 8#include <asm/unistd.h>
9#include "as-layout.h"
9#include "uml-config.h" 10#include "uml-config.h"
10#include "sysdep/sigcontext.h" 11#include "sysdep/sigcontext.h"
11#include "sysdep/faultinfo.h" 12#include "sysdep/faultinfo.h"
@@ -33,7 +34,7 @@ stub_segv_handler(int sig)
33 int pid; 34 int pid;
34 35
35 __asm__ __volatile__("movq %%rdx, %0" : "=g" (uc) :); 36 __asm__ __volatile__("movq %%rdx, %0" : "=g" (uc) :);
36 GET_FAULTINFO_FROM_SC(*((struct faultinfo *) UML_CONFIG_STUB_DATA), 37 GET_FAULTINFO_FROM_SC(*((struct faultinfo *) STUB_DATA),
37 &uc->uc_mcontext); 38 &uc->uc_mcontext);
38 39
39 pid = stub_syscall0(__NR_getpid); 40 pid = stub_syscall0(__NR_getpid);