diff options
Diffstat (limited to 'arch/um/kernel')
| -rw-r--r-- | arch/um/kernel/irq.c | 11 | ||||
| -rw-r--r-- | arch/um/kernel/irq_user.c | 2 | ||||
| -rw-r--r-- | arch/um/kernel/main.c | 2 | ||||
| -rw-r--r-- | arch/um/kernel/mem.c | 1 | ||||
| -rw-r--r-- | arch/um/kernel/process.c | 49 | ||||
| -rw-r--r-- | arch/um/kernel/skas/process_kern.c | 7 | ||||
| -rw-r--r-- | arch/um/kernel/tt/Makefile | 15 | ||||
| -rw-r--r-- | arch/um/kernel/tt/unmap.c | 31 | ||||
| -rw-r--r-- | arch/um/kernel/um_arch.c | 1 | ||||
| -rw-r--r-- | arch/um/kernel/uml.lds.S | 15 |
10 files changed, 35 insertions, 99 deletions
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index d44fb5282547..9f18061ef4c9 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c | |||
| @@ -124,14 +124,16 @@ void irq_unlock(unsigned long flags) | |||
| 124 | spin_unlock_irqrestore(&irq_spinlock, flags); | 124 | spin_unlock_irqrestore(&irq_spinlock, flags); |
| 125 | } | 125 | } |
| 126 | 126 | ||
| 127 | /* presently hw_interrupt_type must define (startup || enable) && | 127 | /* hw_interrupt_type must define (startup || enable) && |
| 128 | * disable && end */ | 128 | * (shutdown || disable) && end */ |
| 129 | static void dummy(unsigned int irq) | 129 | static void dummy(unsigned int irq) |
| 130 | { | 130 | { |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | static struct hw_interrupt_type SIGIO_irq_type = { | 133 | /* This is used for everything else than the timer. */ |
| 134 | static struct hw_interrupt_type normal_irq_type = { | ||
| 134 | .typename = "SIGIO", | 135 | .typename = "SIGIO", |
| 136 | .release = free_irq_by_irq_and_dev, | ||
| 135 | .disable = dummy, | 137 | .disable = dummy, |
| 136 | .enable = dummy, | 138 | .enable = dummy, |
| 137 | .ack = dummy, | 139 | .ack = dummy, |
| @@ -140,6 +142,7 @@ static struct hw_interrupt_type SIGIO_irq_type = { | |||
| 140 | 142 | ||
| 141 | static struct hw_interrupt_type SIGVTALRM_irq_type = { | 143 | static struct hw_interrupt_type SIGVTALRM_irq_type = { |
| 142 | .typename = "SIGVTALRM", | 144 | .typename = "SIGVTALRM", |
| 145 | .release = free_irq_by_irq_and_dev, | ||
| 143 | .shutdown = dummy, /* never called */ | 146 | .shutdown = dummy, /* never called */ |
| 144 | .disable = dummy, | 147 | .disable = dummy, |
| 145 | .enable = dummy, | 148 | .enable = dummy, |
| @@ -160,7 +163,7 @@ void __init init_IRQ(void) | |||
| 160 | irq_desc[i].status = IRQ_DISABLED; | 163 | irq_desc[i].status = IRQ_DISABLED; |
| 161 | irq_desc[i].action = NULL; | 164 | irq_desc[i].action = NULL; |
| 162 | irq_desc[i].depth = 1; | 165 | irq_desc[i].depth = 1; |
| 163 | irq_desc[i].handler = &SIGIO_irq_type; | 166 | irq_desc[i].handler = &normal_irq_type; |
| 164 | enable_irq(i); | 167 | enable_irq(i); |
| 165 | } | 168 | } |
| 166 | } | 169 | } |
diff --git a/arch/um/kernel/irq_user.c b/arch/um/kernel/irq_user.c index b3074cbaa479..c3ccaf24f3e0 100644 --- a/arch/um/kernel/irq_user.c +++ b/arch/um/kernel/irq_user.c | |||
| @@ -85,8 +85,6 @@ void sigio_handler(int sig, union uml_pt_regs *regs) | |||
| 85 | next = irq_fd->next; | 85 | next = irq_fd->next; |
| 86 | if(irq_fd->freed){ | 86 | if(irq_fd->freed){ |
| 87 | free_irq(irq_fd->irq, irq_fd->id); | 87 | free_irq(irq_fd->irq, irq_fd->id); |
| 88 | free_irq_by_irq_and_dev(irq_fd->irq, | ||
| 89 | irq_fd->id); | ||
| 90 | } | 88 | } |
| 91 | } | 89 | } |
| 92 | } | 90 | } |
diff --git a/arch/um/kernel/main.c b/arch/um/kernel/main.c index e42e6364ca13..e59f58152678 100644 --- a/arch/um/kernel/main.c +++ b/arch/um/kernel/main.c | |||
| @@ -24,8 +24,6 @@ | |||
| 24 | #include "mode.h" | 24 | #include "mode.h" |
| 25 | #include "choose-mode.h" | 25 | #include "choose-mode.h" |
| 26 | #include "uml-config.h" | 26 | #include "uml-config.h" |
| 27 | #include "irq_user.h" | ||
| 28 | #include "time_user.h" | ||
| 29 | #include "os.h" | 27 | #include "os.h" |
| 30 | 28 | ||
| 31 | /* Set in set_stklim, which is called from main and __wrap_malloc. | 29 | /* Set in set_stklim, which is called from main and __wrap_malloc. |
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c index c22825f13e40..5597bd39e6b5 100644 --- a/arch/um/kernel/mem.c +++ b/arch/um/kernel/mem.c | |||
| @@ -53,7 +53,6 @@ static void setup_highmem(unsigned long highmem_start, | |||
| 53 | for(i = 0; i < highmem_len >> PAGE_SHIFT; i++){ | 53 | for(i = 0; i < highmem_len >> PAGE_SHIFT; i++){ |
| 54 | page = &mem_map[highmem_pfn + i]; | 54 | page = &mem_map[highmem_pfn + i]; |
| 55 | ClearPageReserved(page); | 55 | ClearPageReserved(page); |
| 56 | set_bit(PG_highmem, &page->flags); | ||
| 57 | set_page_count(page, 1); | 56 | set_page_count(page, 1); |
| 58 | __free_page(page); | 57 | __free_page(page); |
| 59 | } | 58 | } |
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index 51f8e5a8ac6a..1b5ef3e96c71 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c | |||
| @@ -30,7 +30,6 @@ | |||
| 30 | #include "init.h" | 30 | #include "init.h" |
| 31 | #include "os.h" | 31 | #include "os.h" |
| 32 | #include "uml-config.h" | 32 | #include "uml-config.h" |
| 33 | #include "ptrace_user.h" | ||
| 34 | #include "choose-mode.h" | 33 | #include "choose-mode.h" |
| 35 | #include "mode.h" | 34 | #include "mode.h" |
| 36 | #ifdef UML_CONFIG_MODE_SKAS | 35 | #ifdef UML_CONFIG_MODE_SKAS |
| @@ -131,7 +130,7 @@ int start_fork_tramp(void *thread_arg, unsigned long temp_stack, | |||
| 131 | return(arg.pid); | 130 | return(arg.pid); |
| 132 | } | 131 | } |
| 133 | 132 | ||
| 134 | static int ptrace_child(void *arg) | 133 | static int ptrace_child(void) |
| 135 | { | 134 | { |
| 136 | int ret; | 135 | int ret; |
| 137 | int pid = os_getpid(), ppid = getppid(); | 136 | int pid = os_getpid(), ppid = getppid(); |
| @@ -160,20 +159,16 @@ static int ptrace_child(void *arg) | |||
| 160 | _exit(ret); | 159 | _exit(ret); |
| 161 | } | 160 | } |
| 162 | 161 | ||
| 163 | static int start_ptraced_child(void **stack_out) | 162 | static int start_ptraced_child(void) |
| 164 | { | 163 | { |
| 165 | void *stack; | ||
| 166 | unsigned long sp; | ||
| 167 | int pid, n, status; | 164 | int pid, n, status; |
| 168 | 165 | ||
| 169 | stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, | 166 | pid = fork(); |
| 170 | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | 167 | if(pid == 0) |
| 171 | if(stack == MAP_FAILED) | 168 | ptrace_child(); |
| 172 | panic("check_ptrace : mmap failed, errno = %d", errno); | 169 | |
| 173 | sp = (unsigned long) stack + PAGE_SIZE - sizeof(void *); | ||
| 174 | pid = clone(ptrace_child, (void *) sp, SIGCHLD, NULL); | ||
| 175 | if(pid < 0) | 170 | if(pid < 0) |
| 176 | panic("check_ptrace : clone failed, errno = %d", errno); | 171 | panic("check_ptrace : fork failed, errno = %d", errno); |
| 177 | CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); | 172 | CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED)); |
| 178 | if(n < 0) | 173 | if(n < 0) |
| 179 | panic("check_ptrace : wait failed, errno = %d", errno); | 174 | panic("check_ptrace : wait failed, errno = %d", errno); |
| @@ -181,7 +176,6 @@ static int start_ptraced_child(void **stack_out) | |||
| 181 | panic("check_ptrace : expected SIGSTOP, got status = %d", | 176 | panic("check_ptrace : expected SIGSTOP, got status = %d", |
| 182 | status); | 177 | status); |
| 183 | 178 | ||
| 184 | *stack_out = stack; | ||
| 185 | return(pid); | 179 | return(pid); |
| 186 | } | 180 | } |
| 187 | 181 | ||
| @@ -189,12 +183,12 @@ static int start_ptraced_child(void **stack_out) | |||
| 189 | * just avoid using sysemu, not panic, but only if SYSEMU features are broken. | 183 | * just avoid using sysemu, not panic, but only if SYSEMU features are broken. |
| 190 | * So only for SYSEMU features we test mustpanic, while normal host features | 184 | * So only for SYSEMU features we test mustpanic, while normal host features |
| 191 | * must work anyway!*/ | 185 | * must work anyway!*/ |
| 192 | static int stop_ptraced_child(int pid, void *stack, int exitcode, int mustpanic) | 186 | static int stop_ptraced_child(int pid, int exitcode, int mustexit) |
| 193 | { | 187 | { |
| 194 | int status, n, ret = 0; | 188 | int status, n, ret = 0; |
| 195 | 189 | ||
| 196 | if(ptrace(PTRACE_CONT, pid, 0, 0) < 0) | 190 | if(ptrace(PTRACE_CONT, pid, 0, 0) < 0) |
| 197 | panic("check_ptrace : ptrace failed, errno = %d", errno); | 191 | panic("stop_ptraced_child : ptrace failed, errno = %d", errno); |
| 198 | CATCH_EINTR(n = waitpid(pid, &status, 0)); | 192 | CATCH_EINTR(n = waitpid(pid, &status, 0)); |
| 199 | if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) { | 193 | if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) { |
| 200 | int exit_with = WEXITSTATUS(status); | 194 | int exit_with = WEXITSTATUS(status); |
| @@ -205,15 +199,13 @@ static int stop_ptraced_child(int pid, void *stack, int exitcode, int mustpanic) | |||
| 205 | printk("check_ptrace : child exited with exitcode %d, while " | 199 | printk("check_ptrace : child exited with exitcode %d, while " |
| 206 | "expecting %d; status 0x%x", exit_with, | 200 | "expecting %d; status 0x%x", exit_with, |
| 207 | exitcode, status); | 201 | exitcode, status); |
| 208 | if (mustpanic) | 202 | if (mustexit) |
| 209 | panic("\n"); | 203 | panic("\n"); |
| 210 | else | 204 | else |
| 211 | printk("\n"); | 205 | printk("\n"); |
| 212 | ret = -1; | 206 | ret = -1; |
| 213 | } | 207 | } |
| 214 | 208 | ||
| 215 | if(munmap(stack, PAGE_SIZE) < 0) | ||
| 216 | panic("check_ptrace : munmap failed, errno = %d", errno); | ||
| 217 | return ret; | 209 | return ret; |
| 218 | } | 210 | } |
| 219 | 211 | ||
| @@ -235,12 +227,11 @@ __uml_setup("nosysemu", nosysemu_cmd_param, | |||
| 235 | 227 | ||
| 236 | static void __init check_sysemu(void) | 228 | static void __init check_sysemu(void) |
| 237 | { | 229 | { |
| 238 | void *stack; | ||
| 239 | int pid, syscall, n, status, count=0; | 230 | int pid, syscall, n, status, count=0; |
| 240 | 231 | ||
| 241 | printk("Checking syscall emulation patch for ptrace..."); | 232 | printk("Checking syscall emulation patch for ptrace..."); |
| 242 | sysemu_supported = 0; | 233 | sysemu_supported = 0; |
| 243 | pid = start_ptraced_child(&stack); | 234 | pid = start_ptraced_child(); |
| 244 | 235 | ||
| 245 | if(ptrace(PTRACE_SYSEMU, pid, 0, 0) < 0) | 236 | if(ptrace(PTRACE_SYSEMU, pid, 0, 0) < 0) |
| 246 | goto fail; | 237 | goto fail; |
| @@ -258,7 +249,7 @@ static void __init check_sysemu(void) | |||
| 258 | panic("check_sysemu : failed to modify system " | 249 | panic("check_sysemu : failed to modify system " |
| 259 | "call return, errno = %d", errno); | 250 | "call return, errno = %d", errno); |
| 260 | 251 | ||
| 261 | if (stop_ptraced_child(pid, stack, 0, 0) < 0) | 252 | if (stop_ptraced_child(pid, 0, 0) < 0) |
| 262 | goto fail_stopped; | 253 | goto fail_stopped; |
| 263 | 254 | ||
| 264 | sysemu_supported = 1; | 255 | sysemu_supported = 1; |
| @@ -266,7 +257,7 @@ static void __init check_sysemu(void) | |||
| 266 | set_using_sysemu(!force_sysemu_disabled); | 257 | set_using_sysemu(!force_sysemu_disabled); |
| 267 | 258 | ||
| 268 | printk("Checking advanced syscall emulation patch for ptrace..."); | 259 | printk("Checking advanced syscall emulation patch for ptrace..."); |
| 269 | pid = start_ptraced_child(&stack); | 260 | pid = start_ptraced_child(); |
| 270 | while(1){ | 261 | while(1){ |
| 271 | count++; | 262 | count++; |
| 272 | if(ptrace(PTRACE_SYSEMU_SINGLESTEP, pid, 0, 0) < 0) | 263 | if(ptrace(PTRACE_SYSEMU_SINGLESTEP, pid, 0, 0) < 0) |
| @@ -291,7 +282,7 @@ static void __init check_sysemu(void) | |||
| 291 | break; | 282 | break; |
| 292 | } | 283 | } |
| 293 | } | 284 | } |
| 294 | if (stop_ptraced_child(pid, stack, 0, 0) < 0) | 285 | if (stop_ptraced_child(pid, 0, 0) < 0) |
| 295 | goto fail_stopped; | 286 | goto fail_stopped; |
| 296 | 287 | ||
| 297 | sysemu_supported = 2; | 288 | sysemu_supported = 2; |
| @@ -302,18 +293,17 @@ static void __init check_sysemu(void) | |||
| 302 | return; | 293 | return; |
| 303 | 294 | ||
| 304 | fail: | 295 | fail: |
| 305 | stop_ptraced_child(pid, stack, 1, 0); | 296 | stop_ptraced_child(pid, 1, 0); |
| 306 | fail_stopped: | 297 | fail_stopped: |
| 307 | printk("missing\n"); | 298 | printk("missing\n"); |
| 308 | } | 299 | } |
| 309 | 300 | ||
| 310 | void __init check_ptrace(void) | 301 | void __init check_ptrace(void) |
| 311 | { | 302 | { |
| 312 | void *stack; | ||
| 313 | int pid, syscall, n, status; | 303 | int pid, syscall, n, status; |
| 314 | 304 | ||
| 315 | printk("Checking that ptrace can change system call numbers..."); | 305 | printk("Checking that ptrace can change system call numbers..."); |
| 316 | pid = start_ptraced_child(&stack); | 306 | pid = start_ptraced_child(); |
| 317 | 307 | ||
| 318 | if (ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0) | 308 | if (ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0) |
| 319 | panic("check_ptrace: PTRACE_SETOPTIONS failed, errno = %d", errno); | 309 | panic("check_ptrace: PTRACE_SETOPTIONS failed, errno = %d", errno); |
| @@ -340,7 +330,7 @@ void __init check_ptrace(void) | |||
| 340 | break; | 330 | break; |
| 341 | } | 331 | } |
| 342 | } | 332 | } |
| 343 | stop_ptraced_child(pid, stack, 0, 1); | 333 | stop_ptraced_child(pid, 0, 1); |
| 344 | printk("OK\n"); | 334 | printk("OK\n"); |
| 345 | check_sysemu(); | 335 | check_sysemu(); |
| 346 | } | 336 | } |
| @@ -372,11 +362,10 @@ void forward_pending_sigio(int target) | |||
| 372 | static inline int check_skas3_ptrace_support(void) | 362 | static inline int check_skas3_ptrace_support(void) |
| 373 | { | 363 | { |
| 374 | struct ptrace_faultinfo fi; | 364 | struct ptrace_faultinfo fi; |
| 375 | void *stack; | ||
| 376 | int pid, n, ret = 1; | 365 | int pid, n, ret = 1; |
| 377 | 366 | ||
| 378 | printf("Checking for the skas3 patch in the host..."); | 367 | printf("Checking for the skas3 patch in the host..."); |
| 379 | pid = start_ptraced_child(&stack); | 368 | pid = start_ptraced_child(); |
| 380 | 369 | ||
| 381 | n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi); | 370 | n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi); |
| 382 | if (n < 0) { | 371 | if (n < 0) { |
| @@ -391,7 +380,7 @@ static inline int check_skas3_ptrace_support(void) | |||
| 391 | } | 380 | } |
| 392 | 381 | ||
| 393 | init_registers(pid); | 382 | init_registers(pid); |
| 394 | stop_ptraced_child(pid, stack, 1, 1); | 383 | stop_ptraced_child(pid, 1, 1); |
| 395 | 384 | ||
| 396 | return(ret); | 385 | return(ret); |
| 397 | } | 386 | } |
diff --git a/arch/um/kernel/skas/process_kern.c b/arch/um/kernel/skas/process_kern.c index ab5d3271da0b..fc71ef295782 100644 --- a/arch/um/kernel/skas/process_kern.c +++ b/arch/um/kernel/skas/process_kern.c | |||
| @@ -68,8 +68,11 @@ void new_thread_handler(int sig) | |||
| 68 | * 0 if it just exits | 68 | * 0 if it just exits |
| 69 | */ | 69 | */ |
| 70 | n = run_kernel_thread(fn, arg, ¤t->thread.exec_buf); | 70 | n = run_kernel_thread(fn, arg, ¤t->thread.exec_buf); |
| 71 | if(n == 1) | 71 | if(n == 1){ |
| 72 | /* Handle any immediate reschedules or signals */ | ||
| 73 | interrupt_end(); | ||
| 72 | userspace(¤t->thread.regs.regs); | 74 | userspace(¤t->thread.regs.regs); |
| 75 | } | ||
| 73 | else do_exit(0); | 76 | else do_exit(0); |
| 74 | } | 77 | } |
| 75 | 78 | ||
| @@ -96,6 +99,8 @@ void fork_handler(int sig) | |||
| 96 | schedule_tail(current->thread.prev_sched); | 99 | schedule_tail(current->thread.prev_sched); |
| 97 | current->thread.prev_sched = NULL; | 100 | current->thread.prev_sched = NULL; |
| 98 | 101 | ||
| 102 | /* Handle any immediate reschedules or signals */ | ||
| 103 | interrupt_end(); | ||
| 99 | userspace(¤t->thread.regs.regs); | 104 | userspace(¤t->thread.regs.regs); |
| 100 | } | 105 | } |
| 101 | 106 | ||
diff --git a/arch/um/kernel/tt/Makefile b/arch/um/kernel/tt/Makefile index c3faea21a996..3fd2554e60b6 100644 --- a/arch/um/kernel/tt/Makefile +++ b/arch/um/kernel/tt/Makefile | |||
| @@ -3,10 +3,6 @@ | |||
| 3 | # Licensed under the GPL | 3 | # Licensed under the GPL |
| 4 | # | 4 | # |
| 5 | 5 | ||
| 6 | extra-y := unmap_fin.o | ||
| 7 | targets := unmap.o | ||
| 8 | clean-files := unmap_tmp.o | ||
| 9 | |||
| 10 | obj-y = exec_kern.o exec_user.o gdb.o ksyms.o mem.o mem_user.o process_kern.o \ | 6 | obj-y = exec_kern.o exec_user.o gdb.o ksyms.o mem.o mem_user.o process_kern.o \ |
| 11 | syscall_kern.o syscall_user.o time.o tlb.o tracer.o trap_user.o \ | 7 | syscall_kern.o syscall_user.o time.o tlb.o tracer.o trap_user.o \ |
| 12 | uaccess.o uaccess_user.o | 8 | uaccess.o uaccess_user.o |
| @@ -16,14 +12,3 @@ obj-$(CONFIG_PT_PROXY) += gdb_kern.o ptproxy/ | |||
| 16 | USER_OBJS := gdb.o time.o tracer.o | 12 | USER_OBJS := gdb.o time.o tracer.o |
| 17 | 13 | ||
| 18 | include arch/um/scripts/Makefile.rules | 14 | include arch/um/scripts/Makefile.rules |
| 19 | |||
| 20 | UNMAP_CFLAGS := $(patsubst -pg -DPROFILING,,$(USER_CFLAGS)) | ||
| 21 | UNMAP_CFLAGS := $(patsubst -fprofile-arcs -ftest-coverage,,$(UNMAP_CFLAGS)) | ||
| 22 | |||
| 23 | #XXX: partially copied from arch/um/scripts/Makefile.rules | ||
| 24 | $(obj)/unmap.o: c_flags = -Wp,-MD,$(depfile) $(UNMAP_CFLAGS) | ||
| 25 | |||
| 26 | $(obj)/unmap_fin.o : $(obj)/unmap.o | ||
| 27 | $(LD) -r -o $(obj)/unmap_tmp.o $< $(shell $(CC) -print-file-name=libc.a) | ||
| 28 | $(OBJCOPY) $(obj)/unmap_tmp.o $@ -G switcheroo | ||
| 29 | |||
diff --git a/arch/um/kernel/tt/unmap.c b/arch/um/kernel/tt/unmap.c deleted file mode 100644 index 3f7aecdbe532..000000000000 --- a/arch/um/kernel/tt/unmap.c +++ /dev/null | |||
| @@ -1,31 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2000 Jeff Dike (jdike@karaya.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <sys/mman.h> | ||
| 7 | |||
| 8 | int switcheroo(int fd, int prot, void *from, void *to, int size) | ||
| 9 | { | ||
| 10 | if(munmap(to, size) < 0){ | ||
| 11 | return(-1); | ||
| 12 | } | ||
| 13 | if(mmap(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) != to){ | ||
| 14 | return(-1); | ||
| 15 | } | ||
| 16 | if(munmap(from, size) < 0){ | ||
| 17 | return(-1); | ||
| 18 | } | ||
| 19 | return(0); | ||
| 20 | } | ||
| 21 | |||
| 22 | /* | ||
| 23 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
| 24 | * Emacs will notice this stuff at the end of the file and automatically | ||
| 25 | * adjust the settings for this buffer only. This must remain at the end | ||
| 26 | * of the file. | ||
| 27 | * --------------------------------------------------------------------------- | ||
| 28 | * Local variables: | ||
| 29 | * c-file-style: "linux" | ||
| 30 | * End: | ||
| 31 | */ | ||
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c index 418427107b29..8736d098f0ee 100644 --- a/arch/um/kernel/um_arch.c +++ b/arch/um/kernel/um_arch.c | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | #include "asm/setup.h" | 26 | #include "asm/setup.h" |
| 27 | #include "ubd_user.h" | 27 | #include "ubd_user.h" |
| 28 | #include "asm/current.h" | 28 | #include "asm/current.h" |
| 29 | #include "asm/setup.h" | ||
| 30 | #include "user_util.h" | 29 | #include "user_util.h" |
| 31 | #include "kern_util.h" | 30 | #include "kern_util.h" |
| 32 | #include "kern.h" | 31 | #include "kern.h" |
diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S index dd5355500bdc..61dfd4fef752 100644 --- a/arch/um/kernel/uml.lds.S +++ b/arch/um/kernel/uml.lds.S | |||
| @@ -14,19 +14,10 @@ SECTIONS | |||
| 14 | /* Used in arch/um/kernel/mem.c. Any memory between START and __binary_start | 14 | /* Used in arch/um/kernel/mem.c. Any memory between START and __binary_start |
| 15 | * is remapped.*/ | 15 | * is remapped.*/ |
| 16 | __binary_start = .; | 16 | __binary_start = .; |
| 17 | #ifdef MODE_TT | ||
| 18 | .thread_private : { | ||
| 19 | __start_thread_private = .; | ||
| 20 | errno = .; | ||
| 21 | . += 4; | ||
| 22 | arch/um/kernel/tt/unmap_fin.o (.data) | ||
| 23 | __end_thread_private = .; | ||
| 24 | } | ||
| 25 | . = ALIGN(4096); | ||
| 26 | .remap : { arch/um/kernel/tt/unmap_fin.o (.text) } | ||
| 27 | 17 | ||
| 28 | /* We want it only if we are in MODE_TT. In both cases, however, when MODE_TT | 18 | #ifdef MODE_TT |
| 29 | * is off the resulting binary segfaults.*/ | 19 | .remap_data : { arch/um/sys-SUBARCH/unmap_fin.o (.data .bss) } |
| 20 | .remap : { arch/um/sys-SUBARCH/unmap_fin.o (.text) } | ||
| 30 | 21 | ||
| 31 | . = ALIGN(4096); /* Init code and data */ | 22 | . = ALIGN(4096); /* Init code and data */ |
| 32 | #endif | 23 | #endif |
