Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea2ba7dc authored by Gennady Sharapov's avatar Gennady Sharapov Committed by Linus Torvalds
Browse files

[PATCH] uml: move libc-dependent code from trap_user.c



The serial UML OS-abstraction layer patch (um/kernel dir).

This moves all systemcalls from trap_user.c file under os-Linux dir

Signed-off-by: default avatarGennady Sharapov <Gennady.V.Sharapov@intel.com>
Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 0805d89c
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -10,6 +10,19 @@
#include "sysdep/ptrace.h"
#include "sysdep/faultinfo.h"

typedef void (*kern_hndl)(int, union uml_pt_regs *);

struct kern_handlers {
	kern_hndl relay_signal;
	kern_hndl winch;
	kern_hndl bus_handler;
	kern_hndl page_fault;
	kern_hndl sigio_handler;
	kern_hndl timer_handler;
};

extern struct kern_handlers handlinfo_kern;

extern int ncpus;
extern char *linux_prog;
extern char *gdb_init;
@@ -109,6 +122,8 @@ extern void arch_switch(void);
extern void free_irq(unsigned int, void *);
extern int um_in_interrupt(void);
extern int cpu(void);
extern void segv_handler(int sig, union uml_pt_regs *regs);
extern void sigio_handler(int sig, union uml_pt_regs *regs);

#endif

+6 −0
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@
#include "uml-config.h"
#include "asm/types.h"
#include "../os/include/file.h"
#include "sysdep/ptrace.h"
#include "kern_util.h"

#define OS_TYPE_FILE 1 
#define OS_TYPE_DIR 2 
@@ -229,4 +231,8 @@ extern void unblock_signals(void);
extern int get_signals(void);
extern int set_signals(int enable);

/* trap.c */
extern void os_fill_handlinfo(struct kern_handlers h);
extern void do_longjmp(void *p, int val);

#endif
+2 −8
Original line number Diff line number Diff line
@@ -23,12 +23,7 @@ struct cpu_task {

extern struct cpu_task cpu_tasks[];

struct signal_info {
	void (*handler)(int, union uml_pt_regs *);
	int is_irq;
};

extern struct signal_info sig_info[];
extern void (*sig_info[])(int, union uml_pt_regs *);

extern unsigned long low_physmem;
extern unsigned long high_physmem;
@@ -64,7 +59,6 @@ extern void setup_machinename(char *machine_out);
extern void setup_hostinfo(void);
extern void do_exec(int old_pid, int new_pid);
extern void tracer_panic(char *msg, ...);
extern void do_longjmp(void *p, int val);
extern int detach(int pid, int sig);
extern int attach(int pid);
extern void kill_child_dead(int pid);
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
#

obj-y := clone.o exec_kern.o mem.o mem_user.o mmu.o process.o process_kern.o \
	syscall.o tlb.o trap_user.o uaccess.o
	syscall.o tlb.o uaccess.o

USER_OBJS := process.o clone.o

+10 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#ifdef CONFIG_MODE_SKAS
#include "skas.h"
#endif
#include "os.h"

/* Note this is constrained to return 0, -EFAULT, -EACCESS, -ENOMEM by segv(). */
int handle_page_fault(unsigned long address, unsigned long ip, 
@@ -125,6 +126,14 @@ int handle_page_fault(unsigned long address, unsigned long ip,
	goto out;
}

struct kern_handlers handlinfo_kern = {
	.relay_signal = relay_signal,
	.winch = winch,
	.bus_handler = relay_signal,
	.page_fault = segv_handler,
	.sigio_handler = sigio_handler,
	.timer_handler = timer_handler
};
/*
 * We give a *copy* of the faultinfo in the regs to segv.
 * This must be done, since nesting SEGVs could overwrite
Loading