um: pass siginfo to guest process
UML guest processes now get correct siginfo_t for SIGTRAP, SIGFPE, SIGILL and SIGBUS. Specifically, si_addr and si_code are now correct where previously they were si_addr = NULL and si_code = 128. Signed-off-by: Martin Pärtel <martin.partel@gmail.com> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:

committed by
Richard Weinberger

parent
d4afcba95f
commit
d3c1cfcdb4
@@ -9,6 +9,8 @@
|
||||
#include "sysdep/ptrace.h"
|
||||
#include "sysdep/faultinfo.h"
|
||||
|
||||
struct siginfo;
|
||||
|
||||
extern int uml_exitcode;
|
||||
|
||||
extern int ncpus;
|
||||
@@ -22,7 +24,7 @@ extern void free_stack(unsigned long stack, int order);
|
||||
|
||||
extern int do_signal(void);
|
||||
extern void interrupt_end(void);
|
||||
extern void relay_signal(int sig, struct uml_pt_regs *regs);
|
||||
extern void relay_signal(int sig, struct siginfo *si, struct uml_pt_regs *regs);
|
||||
|
||||
extern unsigned long segv(struct faultinfo fi, unsigned long ip,
|
||||
int is_user, struct uml_pt_regs *regs);
|
||||
@@ -33,9 +35,8 @@ extern unsigned int do_IRQ(int irq, struct uml_pt_regs *regs);
|
||||
extern int smp_sigio_handler(void);
|
||||
extern void initial_thread_cb(void (*proc)(void *), void *arg);
|
||||
extern int is_syscall(unsigned long addr);
|
||||
extern void timer_handler(int sig, struct uml_pt_regs *regs);
|
||||
|
||||
extern void timer_handler(int sig, struct uml_pt_regs *regs);
|
||||
extern void timer_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs);
|
||||
|
||||
extern int start_uml(void);
|
||||
extern void paging_init(void);
|
||||
@@ -59,9 +60,9 @@ extern unsigned long from_irq_stack(int nested);
|
||||
extern void syscall_trace(struct uml_pt_regs *regs, int entryexit);
|
||||
extern int singlestepping(void *t);
|
||||
|
||||
extern void segv_handler(int sig, struct uml_pt_regs *regs);
|
||||
extern void bus_handler(int sig, struct uml_pt_regs *regs);
|
||||
extern void winch(int sig, struct uml_pt_regs *regs);
|
||||
extern void segv_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs);
|
||||
extern void bus_handler(int sig, struct siginfo *si, struct uml_pt_regs *regs);
|
||||
extern void winch(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs);
|
||||
extern void fatal_sigsegv(void) __attribute__ ((noreturn));
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user