diff options
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/kernel/dyn.lds.S | 12 | ||||
-rw-r--r-- | arch/um/kernel/uml.lds.S | 11 | ||||
-rw-r--r-- | arch/um/os-Linux/sys-x86_64/registers.c | 15 | ||||
-rw-r--r-- | arch/um/sys-x86_64/ptrace.c | 6 |
4 files changed, 28 insertions, 16 deletions
diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S index 24547741b205..41850906116e 100644 --- a/arch/um/kernel/dyn.lds.S +++ b/arch/um/kernel/dyn.lds.S | |||
@@ -71,11 +71,13 @@ SECTIONS | |||
71 | *(.gnu.warning) | 71 | *(.gnu.warning) |
72 | 72 | ||
73 | . = ALIGN(4096); | 73 | . = ALIGN(4096); |
74 | __syscall_stub_start = .; | ||
75 | *(.__syscall_stub*) | ||
76 | __syscall_stub_end = .; | ||
77 | . = ALIGN(4096); | ||
78 | } =0x90909090 | 74 | } =0x90909090 |
75 | . = ALIGN(4096); | ||
76 | .syscall_stub : { | ||
77 | __syscall_stub_start = .; | ||
78 | *(.__syscall_stub*) | ||
79 | __syscall_stub_end = .; | ||
80 | } | ||
79 | .fini : { | 81 | .fini : { |
80 | KEEP (*(.fini)) | 82 | KEEP (*(.fini)) |
81 | } =0x90909090 | 83 | } =0x90909090 |
@@ -138,8 +140,8 @@ SECTIONS | |||
138 | .got : { *(.got.plt) *(.got) } | 140 | .got : { *(.got.plt) *(.got) } |
139 | _edata = .; | 141 | _edata = .; |
140 | PROVIDE (edata = .); | 142 | PROVIDE (edata = .); |
141 | __bss_start = .; | ||
142 | .bss : { | 143 | .bss : { |
144 | __bss_start = .; | ||
143 | *(.dynbss) | 145 | *(.dynbss) |
144 | *(.bss .bss.* .gnu.linkonce.b.*) | 146 | *(.bss .bss.* .gnu.linkonce.b.*) |
145 | *(COMMON) | 147 | *(COMMON) |
diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S index 307b9373676b..81acdc24348e 100644 --- a/arch/um/kernel/uml.lds.S +++ b/arch/um/kernel/uml.lds.S | |||
@@ -44,12 +44,13 @@ SECTIONS | |||
44 | /* .gnu.warning sections are handled specially by elf32.em. */ | 44 | /* .gnu.warning sections are handled specially by elf32.em. */ |
45 | *(.gnu.warning) | 45 | *(.gnu.warning) |
46 | *(.gnu.linkonce.t*) | 46 | *(.gnu.linkonce.t*) |
47 | } | ||
47 | 48 | ||
48 | . = ALIGN(4096); | 49 | . = ALIGN(4096); |
49 | __syscall_stub_start = .; | 50 | .syscall_stub : { |
50 | *(.__syscall_stub*) | 51 | __syscall_stub_start = .; |
51 | __syscall_stub_end = .; | 52 | *(.__syscall_stub*) |
52 | . = ALIGN(4096); | 53 | __syscall_stub_end = .; |
53 | } | 54 | } |
54 | 55 | ||
55 | #include "asm/common.lds.S" | 56 | #include "asm/common.lds.S" |
diff --git a/arch/um/os-Linux/sys-x86_64/registers.c b/arch/um/os-Linux/sys-x86_64/registers.c index e6fc2179d1bc..9467315b8059 100644 --- a/arch/um/os-Linux/sys-x86_64/registers.c +++ b/arch/um/os-Linux/sys-x86_64/registers.c | |||
@@ -4,6 +4,7 @@ | |||
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <errno.h> | 6 | #include <errno.h> |
7 | #include <sys/ptrace.h> | ||
7 | #include <string.h> | 8 | #include <string.h> |
8 | #include "ptrace_user.h" | 9 | #include "ptrace_user.h" |
9 | #include "uml-config.h" | 10 | #include "uml-config.h" |
@@ -17,6 +18,20 @@ | |||
17 | static unsigned long exec_regs[MAX_REG_NR]; | 18 | static unsigned long exec_regs[MAX_REG_NR]; |
18 | static unsigned long exec_fp_regs[HOST_FP_SIZE]; | 19 | static unsigned long exec_fp_regs[HOST_FP_SIZE]; |
19 | 20 | ||
21 | int save_fp_registers(int pid, unsigned long *fp_regs) | ||
22 | { | ||
23 | if(ptrace(PTRACE_GETFPREGS, pid, 0, fp_regs) < 0) | ||
24 | return -errno; | ||
25 | return 0; | ||
26 | } | ||
27 | |||
28 | int restore_fp_registers(int pid, unsigned long *fp_regs) | ||
29 | { | ||
30 | if(ptrace(PTRACE_SETFPREGS, pid, 0, fp_regs) < 0) | ||
31 | return -errno; | ||
32 | return 0; | ||
33 | } | ||
34 | |||
20 | void init_thread_registers(union uml_pt_regs *to) | 35 | void init_thread_registers(union uml_pt_regs *to) |
21 | { | 36 | { |
22 | memcpy(to->skas.regs, exec_regs, sizeof(to->skas.regs)); | 37 | memcpy(to->skas.regs, exec_regs, sizeof(to->skas.regs)); |
diff --git a/arch/um/sys-x86_64/ptrace.c b/arch/um/sys-x86_64/ptrace.c index 55b66e09a98c..1970d78aa528 100644 --- a/arch/um/sys-x86_64/ptrace.c +++ b/arch/um/sys-x86_64/ptrace.c | |||
@@ -156,12 +156,6 @@ int is_syscall(unsigned long addr) | |||
156 | return(instr == 0x050f); | 156 | return(instr == 0x050f); |
157 | } | 157 | } |
158 | 158 | ||
159 | int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu ) | ||
160 | { | ||
161 | panic("dump_fpu"); | ||
162 | return(1); | ||
163 | } | ||
164 | |||
165 | int get_fpregs(unsigned long buf, struct task_struct *child) | 159 | int get_fpregs(unsigned long buf, struct task_struct *child) |
166 | { | 160 | { |
167 | panic("get_fpregs"); | 161 | panic("get_fpregs"); |