Skip to content

Commit

Permalink
um: switch stub_segv_handler to SA_SIGINFO variant, get rid of magic …
Browse files Browse the repository at this point in the history
…crap in there

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Richard Weinberger <richard@nod.at>
  • Loading branch information
Al Viro authored and Richard Weinberger committed Nov 2, 2011
1 parent adcfb98 commit 9b25fcb
Show file tree
Hide file tree
Showing 7 changed files with 14 additions and 39 deletions.
4 changes: 2 additions & 2 deletions arch/um/os-Linux/skas/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,8 +255,8 @@ static int userspace_tramp(void *stack)

set_sigstack((void *) STUB_DATA, UM_KERN_PAGE_SIZE);
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_ONSTACK | SA_NODEFER;
sa.sa_handler = (void *) v;
sa.sa_flags = SA_ONSTACK | SA_NODEFER | SA_SIGINFO;
sa.sa_sigaction = (void *) v;
sa.sa_restorer = NULL;
if (sigaction(SIGSEGV, &sa, NULL) < 0) {
printk(UM_KERN_ERR "userspace_tramp - setting SIGSEGV "
Expand Down
2 changes: 1 addition & 1 deletion arch/um/sys-x86/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ endif

obj-y = bug.o bugs_$(BITS).o delay_$(BITS).o fault.o ksyms.o ldt.o \
ptrace_$(BITS).o ptrace_user.o setjmp_$(BITS).o signal_$(BITS).o \
stub_$(BITS).o stub_segv_$(BITS).o syscalls_$(BITS).o \
stub_$(BITS).o stub_segv.o syscalls_$(BITS).o \
sys_call_table_$(BITS).o sysrq_$(BITS).o tls_$(BITS).o mem_$(BITS).o

ifeq ($(CONFIG_X86_32),y)
Expand Down
9 changes: 9 additions & 0 deletions arch/um/sys-x86/shared/sysdep/stub.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
#include <asm/unistd.h>
#include <sys/mman.h>
#include <signal.h>
#include "as-layout.h"
#include "stub-data.h"

#ifdef __i386__
#include "stub_32.h"
#else
#include "stub_64.h"
#endif

extern void stub_segv_handler(int, siginfo_t *, void *);
extern void stub_clone_handler(void);
7 changes: 0 additions & 7 deletions arch/um/sys-x86/shared/sysdep/stub_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,7 @@
#ifndef __SYSDEP_STUB_H
#define __SYSDEP_STUB_H

#include <sys/mman.h>
#include <asm/ptrace.h>
#include <asm/unistd.h>
#include "as-layout.h"
#include "stub-data.h"

extern void stub_segv_handler(int sig);
extern void stub_clone_handler(void);

#define STUB_SYSCALL_RET EAX
#define STUB_MMAP_NR __NR_mmap2
Expand Down
7 changes: 0 additions & 7 deletions arch/um/sys-x86/shared/sysdep/stub_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,7 @@
#ifndef __SYSDEP_STUB_H
#define __SYSDEP_STUB_H

#include <sys/mman.h>
#include <asm/unistd.h>
#include <sysdep/ptrace_user.h>
#include "as-layout.h"
#include "stub-data.h"

extern void stub_segv_handler(int sig);
extern void stub_clone_handler(void);

#define STUB_SYSCALL_RET PT_INDEX(RAX)
#define STUB_MMAP_NR __NR_mmap
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,15 @@
* Licensed under the GPL
*/

#include <signal.h>
#include "as-layout.h"
#include "sysdep/stub.h"
#include "sysdep/faultinfo.h"
#include "sysdep/sigcontext.h"

void __attribute__ ((__section__ (".__syscall_stub")))
stub_segv_handler(int sig)
stub_segv_handler(int sig, siginfo_t *info, void *p)
{
struct ucontext *uc;
struct ucontext *uc = p;

__asm__ __volatile__("movq %%rdx, %0" : "=g" (uc) :);
GET_FAULTINFO_FROM_SC(*((struct faultinfo *) STUB_DATA),
&uc->uc_mcontext);
trap_myself();
Expand Down
17 changes: 0 additions & 17 deletions arch/um/sys-x86/stub_segv_32.c

This file was deleted.

0 comments on commit 9b25fcb

Please sign in to comment.