um: merge arch/um/sys-{i386,x86_64}
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
committed by
Richard Weinberger
parent
858ba94499
commit
6582b7f774
@@ -121,8 +121,8 @@ archclean:
|
|||||||
|
|
||||||
# Generated files
|
# Generated files
|
||||||
|
|
||||||
$(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s: FORCE
|
$(ARCH_DIR)/sys-$(HEADER_ARCH)/user-offsets.s: FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(ARCH_DIR)/sys-$(SUBARCH) $@
|
$(Q)$(MAKE) $(build)=$(ARCH_DIR)/sys-$(HEADER_ARCH) $@
|
||||||
|
|
||||||
define filechk_gen-asm-offsets
|
define filechk_gen-asm-offsets
|
||||||
(set -e; \
|
(set -e; \
|
||||||
@@ -137,7 +137,7 @@ define filechk_gen-asm-offsets
|
|||||||
echo ""; )
|
echo ""; )
|
||||||
endef
|
endef
|
||||||
|
|
||||||
include/generated/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s
|
include/generated/user_constants.h: $(ARCH_DIR)/sys-$(HEADER_ARCH)/user-offsets.s
|
||||||
$(call filechk,gen-asm-offsets)
|
$(call filechk,gen-asm-offsets)
|
||||||
|
|
||||||
export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH
|
export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
core-y += arch/um/sys-i386/ arch/x86/crypto/
|
core-y += arch/um/sys-x86/ arch/x86/crypto/
|
||||||
|
|
||||||
TOP_ADDR := $(CONFIG_TOP_ADDR)
|
TOP_ADDR := $(CONFIG_TOP_ADDR)
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
# Copyright 2003 - 2004 Pathscale, Inc
|
# Copyright 2003 - 2004 Pathscale, Inc
|
||||||
# Released under the GPL
|
# Released under the GPL
|
||||||
|
|
||||||
core-y += arch/um/sys-x86_64/ arch/x86/crypto/
|
core-y += arch/um/sys-x86/ arch/x86/crypto/
|
||||||
START := 0x60000000
|
START := 0x60000000
|
||||||
|
|
||||||
_extra_flags_ = -fno-builtin -m64
|
_extra_flags_ = -fno-builtin -m64
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
|
||||||
#
|
|
||||||
|
|
||||||
obj-y = bug.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \
|
|
||||||
ptrace_user.o setjmp.o signal.o stub.o stub_segv.o syscalls.o sysrq.o \
|
|
||||||
sys_call_table.o tls.o mem.o
|
|
||||||
|
|
||||||
obj-$(CONFIG_BINFMT_ELF) += elfcore.o
|
|
||||||
|
|
||||||
subarch-obj-y = lib/string_32.o lib/atomic64_32.o lib/atomic64_cx8_32.o
|
|
||||||
subarch-obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += lib/rwsem.o
|
|
||||||
subarch-obj-$(CONFIG_HIGHMEM) += mm/highmem_32.o
|
|
||||||
subarch-obj-$(CONFIG_MODULES) += kernel/module.o
|
|
||||||
|
|
||||||
USER_OBJS := bugs.o ptrace_user.o fault.o
|
|
||||||
|
|
||||||
extra-y += user-offsets.s
|
|
||||||
$(obj)/user-offsets.s: c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS)
|
|
||||||
|
|
||||||
UNPROFILE_OBJS := stub_segv.o
|
|
||||||
CFLAGS_stub_segv.o := $(CFLAGS_NO_HARDENING)
|
|
||||||
|
|
||||||
include arch/um/scripts/Makefile.rules
|
|
@@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2006 Jeff Dike (jdike@addtoit.com)
|
|
||||||
* Licensed under the GPL V2
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/uaccess.h>
|
|
||||||
#include <asm/errno.h>
|
|
||||||
|
|
||||||
/* Mostly copied from i386/x86_86 - eliminated the eip < PAGE_OFFSET because
|
|
||||||
* that's not relevant in skas mode.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int is_valid_bugaddr(unsigned long eip)
|
|
||||||
{
|
|
||||||
unsigned short ud2;
|
|
||||||
|
|
||||||
if (probe_kernel_address((unsigned short __user *)eip, ud2))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return ud2 == 0x0b0f;
|
|
||||||
}
|
|
@@ -1,5 +0,0 @@
|
|||||||
#include "linux/module.h"
|
|
||||||
#include "asm/checksum.h"
|
|
||||||
|
|
||||||
/* Networking helper routines. */
|
|
||||||
EXPORT_SYMBOL(csum_partial);
|
|
@@ -1,53 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <sys/poll.h>
|
|
||||||
#include <sys/user.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <asm/ptrace.h>
|
|
||||||
|
|
||||||
#define DEFINE(sym, val) \
|
|
||||||
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
|
|
||||||
|
|
||||||
#define DEFINE_LONGS(sym, val) \
|
|
||||||
asm volatile("\n->" #sym " %0 " #val : : "i" (val/sizeof(unsigned long)))
|
|
||||||
|
|
||||||
#define OFFSET(sym, str, mem) \
|
|
||||||
DEFINE(sym, offsetof(struct str, mem));
|
|
||||||
|
|
||||||
void foo(void)
|
|
||||||
{
|
|
||||||
OFFSET(HOST_SC_TRAPNO, sigcontext, trapno);
|
|
||||||
OFFSET(HOST_SC_ERR, sigcontext, err);
|
|
||||||
OFFSET(HOST_SC_CR2, sigcontext, cr2);
|
|
||||||
|
|
||||||
DEFINE_LONGS(HOST_FP_SIZE, sizeof(struct user_fpregs_struct));
|
|
||||||
DEFINE_LONGS(HOST_FPX_SIZE, sizeof(struct user_fpxregs_struct));
|
|
||||||
|
|
||||||
DEFINE(HOST_IP, EIP);
|
|
||||||
DEFINE(HOST_SP, UESP);
|
|
||||||
DEFINE(HOST_EFLAGS, EFL);
|
|
||||||
DEFINE(HOST_EAX, EAX);
|
|
||||||
DEFINE(HOST_EBX, EBX);
|
|
||||||
DEFINE(HOST_ECX, ECX);
|
|
||||||
DEFINE(HOST_EDX, EDX);
|
|
||||||
DEFINE(HOST_ESI, ESI);
|
|
||||||
DEFINE(HOST_EDI, EDI);
|
|
||||||
DEFINE(HOST_EBP, EBP);
|
|
||||||
DEFINE(HOST_CS, CS);
|
|
||||||
DEFINE(HOST_SS, SS);
|
|
||||||
DEFINE(HOST_DS, DS);
|
|
||||||
DEFINE(HOST_FS, FS);
|
|
||||||
DEFINE(HOST_ES, ES);
|
|
||||||
DEFINE(HOST_GS, GS);
|
|
||||||
DEFINE(UM_FRAME_SIZE, sizeof(struct user_regs_struct));
|
|
||||||
|
|
||||||
/* XXX Duplicated between i386 and x86_64 */
|
|
||||||
DEFINE(UM_POLLIN, POLLIN);
|
|
||||||
DEFINE(UM_POLLPRI, POLLPRI);
|
|
||||||
DEFINE(UM_POLLOUT, POLLOUT);
|
|
||||||
|
|
||||||
DEFINE(UM_PROT_READ, PROT_READ);
|
|
||||||
DEFINE(UM_PROT_WRITE, PROT_WRITE);
|
|
||||||
DEFINE(UM_PROT_EXEC, PROT_EXEC);
|
|
||||||
}
|
|
45
arch/um/sys-x86/Makefile
Normal file
45
arch/um/sys-x86/Makefile
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
|
||||||
|
#
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_X86_32),y)
|
||||||
|
BITS := 32
|
||||||
|
else
|
||||||
|
BITS := 64
|
||||||
|
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 \
|
||||||
|
sys_call_table_$(BITS).o sysrq_$(BITS).o tls_$(BITS).o mem_$(BITS).o
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_X86_32),y)
|
||||||
|
|
||||||
|
obj-y += checksum_32.o
|
||||||
|
obj-$(CONFIG_BINFMT_ELF) += elfcore.o
|
||||||
|
|
||||||
|
subarch-obj-y = lib/string_32.o lib/atomic64_32.o lib/atomic64_cx8_32.o
|
||||||
|
subarch-obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += lib/rwsem.o
|
||||||
|
subarch-obj-$(CONFIG_HIGHMEM) += mm/highmem_32.o
|
||||||
|
subarch-obj-$(CONFIG_MODULES) += kernel/module.o
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
obj-y += vdso/
|
||||||
|
|
||||||
|
subarch-obj-y = lib/csum-partial_64.o lib/memcpy_64.o lib/thunk_64.o \
|
||||||
|
lib/rwsem.o
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
subarch-obj-$(CONFIG_MODULES) += kernel/module.o
|
||||||
|
|
||||||
|
USER_OBJS := bugs_$(BITS).o ptrace_user.o fault.o
|
||||||
|
|
||||||
|
extra-y += user-offsets.s
|
||||||
|
$(obj)/user-offsets.s: c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS)
|
||||||
|
|
||||||
|
UNPROFILE_OBJS := stub_segv.o
|
||||||
|
CFLAGS_stub_segv.o := $(CFLAGS_NO_HARDENING)
|
||||||
|
|
||||||
|
include arch/um/scripts/Makefile.rules
|
@@ -2,10 +2,12 @@
|
|||||||
#include <asm/string.h>
|
#include <asm/string.h>
|
||||||
#include <asm/checksum.h>
|
#include <asm/checksum.h>
|
||||||
|
|
||||||
|
#ifndef CONFIG_X86_32
|
||||||
/*XXX: we need them because they would be exported by x86_64 */
|
/*XXX: we need them because they would be exported by x86_64 */
|
||||||
#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4
|
#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4
|
||||||
EXPORT_SYMBOL(memcpy);
|
EXPORT_SYMBOL(memcpy);
|
||||||
#else
|
#else
|
||||||
EXPORT_SYMBOL(__memcpy);
|
EXPORT_SYMBOL(__memcpy);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
EXPORT_SYMBOL(csum_partial);
|
EXPORT_SYMBOL(csum_partial);
|
@@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/ptrace.h>
|
#include "ptrace_user.h"
|
||||||
|
|
||||||
int ptrace_getregs(long pid, unsigned long *regs_out)
|
int ptrace_getregs(long pid, unsigned long *regs_out)
|
||||||
{
|
{
|
@@ -19,10 +19,31 @@
|
|||||||
|
|
||||||
void foo(void)
|
void foo(void)
|
||||||
{
|
{
|
||||||
OFFSET(HOST_SC_CR2, sigcontext, cr2);
|
|
||||||
OFFSET(HOST_SC_ERR, sigcontext, err);
|
|
||||||
OFFSET(HOST_SC_TRAPNO, sigcontext, trapno);
|
OFFSET(HOST_SC_TRAPNO, sigcontext, trapno);
|
||||||
|
OFFSET(HOST_SC_ERR, sigcontext, err);
|
||||||
|
OFFSET(HOST_SC_CR2, sigcontext, cr2);
|
||||||
|
|
||||||
|
#ifdef __i386__
|
||||||
|
DEFINE_LONGS(HOST_FP_SIZE, sizeof(struct user_fpregs_struct));
|
||||||
|
DEFINE_LONGS(HOST_FPX_SIZE, sizeof(struct user_fpxregs_struct));
|
||||||
|
|
||||||
|
DEFINE(HOST_IP, EIP);
|
||||||
|
DEFINE(HOST_SP, UESP);
|
||||||
|
DEFINE(HOST_EFLAGS, EFL);
|
||||||
|
DEFINE(HOST_EAX, EAX);
|
||||||
|
DEFINE(HOST_EBX, EBX);
|
||||||
|
DEFINE(HOST_ECX, ECX);
|
||||||
|
DEFINE(HOST_EDX, EDX);
|
||||||
|
DEFINE(HOST_ESI, ESI);
|
||||||
|
DEFINE(HOST_EDI, EDI);
|
||||||
|
DEFINE(HOST_EBP, EBP);
|
||||||
|
DEFINE(HOST_CS, CS);
|
||||||
|
DEFINE(HOST_SS, SS);
|
||||||
|
DEFINE(HOST_DS, DS);
|
||||||
|
DEFINE(HOST_FS, FS);
|
||||||
|
DEFINE(HOST_ES, ES);
|
||||||
|
DEFINE(HOST_GS, GS);
|
||||||
|
#else
|
||||||
DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
|
DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
|
||||||
DEFINE_LONGS(HOST_RBX, RBX);
|
DEFINE_LONGS(HOST_RBX, RBX);
|
||||||
DEFINE_LONGS(HOST_RCX, RCX);
|
DEFINE_LONGS(HOST_RCX, RCX);
|
||||||
@@ -52,9 +73,9 @@ void foo(void)
|
|||||||
|
|
||||||
DEFINE_LONGS(HOST_IP, RIP);
|
DEFINE_LONGS(HOST_IP, RIP);
|
||||||
DEFINE_LONGS(HOST_SP, RSP);
|
DEFINE_LONGS(HOST_SP, RSP);
|
||||||
DEFINE(UM_FRAME_SIZE, sizeof(struct user_regs_struct));
|
#endif
|
||||||
|
|
||||||
/* XXX Duplicated between i386 and x86_64 */
|
DEFINE(UM_FRAME_SIZE, sizeof(struct user_regs_struct));
|
||||||
DEFINE(UM_POLLIN, POLLIN);
|
DEFINE(UM_POLLIN, POLLIN);
|
||||||
DEFINE(UM_POLLPRI, POLLPRI);
|
DEFINE(UM_POLLPRI, POLLPRI);
|
||||||
DEFINE(UM_POLLOUT, POLLOUT);
|
DEFINE(UM_POLLOUT, POLLOUT);
|
@@ -4,7 +4,7 @@ __INITDATA
|
|||||||
|
|
||||||
.globl vdso_start, vdso_end
|
.globl vdso_start, vdso_end
|
||||||
vdso_start:
|
vdso_start:
|
||||||
.incbin "arch/um/sys-x86_64/vdso/vdso.so"
|
.incbin "arch/um/sys-x86/vdso/vdso.so"
|
||||||
vdso_end:
|
vdso_end:
|
||||||
|
|
||||||
__FINIT
|
__FINIT
|
@@ -1,27 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright 2003 PathScale, Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the GPL
|
|
||||||
#
|
|
||||||
|
|
||||||
obj-y = bug.o bugs.o delay.o fault.o ldt.o ptrace.o ptrace_user.o mem.o \
|
|
||||||
setjmp.o signal.o stub.o stub_segv.o syscalls.o syscall_table.o \
|
|
||||||
sysrq.o ksyms.o tls.o
|
|
||||||
|
|
||||||
obj-y += vdso/
|
|
||||||
|
|
||||||
subarch-obj-y = lib/csum-partial_64.o lib/memcpy_64.o lib/thunk_64.o \
|
|
||||||
lib/rwsem.o
|
|
||||||
subarch-obj-$(CONFIG_MODULES) += kernel/module.o
|
|
||||||
|
|
||||||
ldt-y = ../sys-i386/ldt.o
|
|
||||||
|
|
||||||
USER_OBJS := ptrace_user.o
|
|
||||||
|
|
||||||
extra-y += user-offsets.s
|
|
||||||
$(obj)/user-offsets.s: c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS)
|
|
||||||
|
|
||||||
UNPROFILE_OBJS := stub_segv.o
|
|
||||||
CFLAGS_stub_segv.o := $(CFLAGS_NO_HARDENING)
|
|
||||||
|
|
||||||
include arch/um/scripts/Makefile.rules
|
|
@@ -1,28 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003 PathScale, Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the GPL
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "sysdep/ptrace.h"
|
|
||||||
|
|
||||||
/* These two are from asm-um/uaccess.h and linux/module.h, check them. */
|
|
||||||
struct exception_table_entry
|
|
||||||
{
|
|
||||||
unsigned long insn;
|
|
||||||
unsigned long fixup;
|
|
||||||
};
|
|
||||||
|
|
||||||
const struct exception_table_entry *search_exception_tables(unsigned long add);
|
|
||||||
|
|
||||||
int arch_fixup(unsigned long address, struct uml_pt_regs *regs)
|
|
||||||
{
|
|
||||||
const struct exception_table_entry *fixup;
|
|
||||||
|
|
||||||
fixup = search_exception_tables(address);
|
|
||||||
if (fixup != 0) {
|
|
||||||
UPT_IP(regs) = fixup->fixup;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003 PathScale, Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the GPL
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include "ptrace_user.h"
|
|
||||||
|
|
||||||
int ptrace_getregs(long pid, unsigned long *regs_out)
|
|
||||||
{
|
|
||||||
if (ptrace(PTRACE_GETREGS, pid, 0, regs_out) < 0)
|
|
||||||
return -errno;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ptrace_setregs(long pid, unsigned long *regs_out)
|
|
||||||
{
|
|
||||||
if (ptrace(PTRACE_SETREGS, pid, 0, regs_out) < 0)
|
|
||||||
return -errno;
|
|
||||||
return(0);
|
|
||||||
}
|
|
Reference in New Issue
Block a user