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

Commit ba9950c8 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds
Browse files

[PATCH] uml: small fixes left over from rc4



Some changes that I sent in didn't make 2.6.12-rc4 for some reason.  This
adds them back.  We have
	an x86_64 definition of TOP_ADDR
	a reimplementation of the x86_64 csum_partial_copy_from_user
	some syntax fixes in arch/um/kernel/ptrace.c
	removal of a CFLAGS definition in the x86_64 Makefile
	some include changes in the x86_64 ptrace.c and user-offsets.h
	a syntax fix in elf-x86_64.h
Also moved an include in the i386 and x86_64 Makefiles to make the symlinks
work, and some small fixes from Al Viro.

Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Cc: <viro@parcelfarce.linux.theplanet.co.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 46f4e1b7
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -6,6 +6,10 @@ config 64BIT
	bool
	default y

config TOP_ADDR
 	hex
	default 0x80000000

config 3_LEVEL_PGTABLES
       bool
       default y
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ extern int sysemu_supported;
#ifdef UML_CONFIG_MODE_SKAS

#include "skas_ptregs.h"
#include "sysdep/faultinfo.h"

#define REGS_IP(r) ((r)[HOST_IP])
#define REGS_SP(r) ((r)[HOST_SP])
@@ -59,6 +58,7 @@ extern int sysemu_supported;
#define PTRACE_SYSEMU_SINGLESTEP 32
#endif

#include "sysdep/faultinfo.h"
#include "choose-mode.h"

union uml_pt_regs {
+10 −16
Original line number Diff line number Diff line
@@ -9,8 +9,6 @@
#include "linux/in6.h"
#include "asm/uaccess.h"

extern unsigned int csum_partial_copy_from(const unsigned char *src, unsigned char *dst, int len,
					   int sum, int *err_ptr);
extern unsigned csum_partial(const unsigned char *buff, unsigned len,
                             unsigned sum);

@@ -31,10 +29,15 @@ unsigned int csum_partial_copy_nocheck(const unsigned char *src, unsigned char *
}

static __inline__
unsigned int csum_partial_copy_from_user(const unsigned char *src, unsigned char *dst,
					 int len, int sum, int *err_ptr)
unsigned int csum_partial_copy_from_user(const unsigned char *src,
                                         unsigned char *dst, int len, int sum,
                                         int *err_ptr)
{
	return csum_partial_copy_from(src, dst, len, sum, err_ptr);
        if(copy_from_user(dst, src, len)){
                *err_ptr = -EFAULT;
                return(-1);
        }
        return csum_partial(dst, len, sum);
}

/**
@@ -137,15 +140,6 @@ static inline unsigned add32_with_carry(unsigned a, unsigned b)
        return a;
}

#endif
extern unsigned short ip_compute_csum(unsigned char * buff, int len);

/*
 * Overrides for Emacs so that we follow Linus's tabbing style.
 * Emacs will notice this stuff at the end of the file and automatically
 * adjust the settings for this buffer only.  This must remain at the end
 * of the file.
 * ---------------------------------------------------------------------------
 * Local variables:
 * c-file-style: "linux"
 * End:
 */
#endif
+26 −36
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ extern int mode_tt;
	__CHOOSE_MODE(SC_EFLAGS(UPT_SC(r)), REGS_EFLAGS((r)->skas.regs))
#define UPT_SC(r) ((r)->tt.sc)
#define UPT_SYSCALL_NR(r) __CHOOSE_MODE((r)->tt.syscall, (r)->skas.syscall)
#define UPT_SYSCALL_RET(r) UPT_RAX(r)

extern int user_context(unsigned long sp);

@@ -196,32 +197,32 @@ struct syscall_args {


#define UPT_SET(regs, reg, val) \
        ({      unsigned long val; \
        ({      unsigned long __upt_val = val; \
                switch(reg){ \
		case R8: UPT_R8(regs) = val; break; \
		case R9: UPT_R9(regs) = val; break; \
		case R10: UPT_R10(regs) = val; break; \
		case R11: UPT_R11(regs) = val; break; \
		case R12: UPT_R12(regs) = val; break; \
		case R13: UPT_R13(regs) = val; break; \
		case R14: UPT_R14(regs) = val; break; \
		case R15: UPT_R15(regs) = val; break; \
                case RIP: UPT_IP(regs) = val; break; \
                case RSP: UPT_SP(regs) = val; break; \
                case RAX: UPT_RAX(regs) = val; break; \
                case RBX: UPT_RBX(regs) = val; break; \
                case RCX: UPT_RCX(regs) = val; break; \
                case RDX: UPT_RDX(regs) = val; break; \
                case RSI: UPT_RSI(regs) = val; break; \
                case RDI: UPT_RDI(regs) = val; break; \
                case RBP: UPT_RBP(regs) = val; break; \
                case ORIG_RAX: UPT_ORIG_RAX(regs) = val; break; \
                case CS: UPT_CS(regs) = val; break; \
                case DS: UPT_DS(regs) = val; break; \
                case ES: UPT_ES(regs) = val; break; \
                case FS: UPT_FS(regs) = val; break; \
                case GS: UPT_GS(regs) = val; break; \
                case EFLAGS: UPT_EFLAGS(regs) = val; break; \
                case R8: UPT_R8(regs) = __upt_val; break; \
                case R9: UPT_R9(regs) = __upt_val; break; \
                case R10: UPT_R10(regs) = __upt_val; break; \
                case R11: UPT_R11(regs) = __upt_val; break; \
                case R12: UPT_R12(regs) = __upt_val; break; \
                case R13: UPT_R13(regs) = __upt_val; break; \
                case R14: UPT_R14(regs) = __upt_val; break; \
                case R15: UPT_R15(regs) = __upt_val; break; \
                case RIP: UPT_IP(regs) = __upt_val; break; \
                case RSP: UPT_SP(regs) = __upt_val; break; \
                case RAX: UPT_RAX(regs) = __upt_val; break; \
                case RBX: UPT_RBX(regs) = __upt_val; break; \
                case RCX: UPT_RCX(regs) = __upt_val; break; \
                case RDX: UPT_RDX(regs) = __upt_val; break; \
                case RSI: UPT_RSI(regs) = __upt_val; break; \
                case RDI: UPT_RDI(regs) = __upt_val; break; \
                case RBP: UPT_RBP(regs) = __upt_val; break; \
                case ORIG_RAX: UPT_ORIG_RAX(regs) = __upt_val; break; \
                case CS: UPT_CS(regs) = __upt_val; break; \
                case DS: UPT_DS(regs) = __upt_val; break; \
                case ES: UPT_ES(regs) = __upt_val; break; \
                case FS: UPT_FS(regs) = __upt_val; break; \
                case GS: UPT_GS(regs) = __upt_val; break; \
                case EFLAGS: UPT_EFLAGS(regs) = __upt_val; break; \
                default :  \
                        panic("Bad register in UPT_SET : %d\n", reg);  \
			break; \
@@ -245,14 +246,3 @@ struct syscall_args {
        CHOOSE_MODE((&(r)->tt.faultinfo), (&(r)->skas.faultinfo))

#endif

/*
 * Overrides for Emacs so that we follow Linus's tabbing style.
 * Emacs will notice this stuff at the end of the file and automatically
 * adjust the settings for this buffer only.  This must remain at the end
 * of the file.
 * ---------------------------------------------------------------------------
 * Local variables:
 * c-file-style: "linux"
 * End:
 */
+3 −3
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ static inline void set_singlestepping(struct task_struct *child, int on)
        child->thread.singlestep_syscall = 0;

#ifdef SUBARCH_SET_SINGLESTEPPING
        SUBARCH_SET_SINGLESTEPPING(child, on)
        SUBARCH_SET_SINGLESTEPPING(child, on);
#endif
}

@@ -83,7 +83,7 @@ long sys_ptrace(long request, long pid, long addr, long data)
	}

#ifdef SUBACH_PTRACE_SPECIAL
        SUBARCH_PTRACE_SPECIAL(child,request,addr,data)
        SUBARCH_PTRACE_SPECIAL(child,request,addr,data);
#endif

	ret = ptrace_check_attach(child, request == PTRACE_KILL);
Loading