svn commit: r247047 - in head/sys: amd64/include boot/userboot/userboot i386/include x86/include
Konstantin Belousov
kib at FreeBSD.org
Wed Feb 20 17:39:55 UTC 2013
Author: kib
Date: Wed Feb 20 17:39:52 2013
New Revision: 247047
URL: http://svnweb.freebsd.org/changeset/base/247047
Log:
Convert machine/elf.h, machine/frame.h, machine/sigframe.h,
machine/signal.h and machine/ucontext.h into common x86 includes,
copying from amd64 and merging with i386.
Kernel-only compat definitions are kept in the i386/include/sigframe.h
and i386/include/signal.h, to reduce amd64 kernel namespace pollution.
The amd64 compat uses its own definitions so far.
The _MACHINE_ELF_WANT_32BIT definition is to allow the
sys/boot/userboot/userboot/elf32_freebsd.c to use i386 ELF definitions
on the amd64 compile host. The same hack could be usefully abused by
other code too.
Added:
head/sys/x86/include/elf.h
- copied, changed from r247045, head/sys/amd64/include/elf.h
head/sys/x86/include/frame.h
- copied, changed from r247045, head/sys/amd64/include/frame.h
head/sys/x86/include/sigframe.h
- copied, changed from r247045, head/sys/amd64/include/sigframe.h
head/sys/x86/include/signal.h
- copied, changed from r247045, head/sys/amd64/include/signal.h
head/sys/x86/include/ucontext.h
- copied, changed from r247045, head/sys/amd64/include/ucontext.h
Modified:
head/sys/amd64/include/elf.h
head/sys/amd64/include/frame.h
head/sys/amd64/include/sigframe.h
head/sys/amd64/include/signal.h
head/sys/amd64/include/ucontext.h
head/sys/boot/userboot/userboot/elf32_freebsd.c
head/sys/i386/include/elf.h
head/sys/i386/include/frame.h
head/sys/i386/include/sigframe.h
head/sys/i386/include/signal.h
head/sys/i386/include/ucontext.h
Modified: head/sys/amd64/include/elf.h
==============================================================================
--- head/sys/amd64/include/elf.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/amd64/include/elf.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -1,124 +1,6 @@
/*-
- * Copyright (c) 1996-1997 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_ELF_H_
-#define _MACHINE_ELF_H_ 1
-
-/*
- * ELF definitions for the AMD64 architecture.
- */
-
-
-#ifndef __ELF_WORD_SIZE
-#define __ELF_WORD_SIZE 64 /* Used by <sys/elf_generic.h> */
-#endif
-#include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */
-#include <sys/elf64.h> /* Definitions common to all 64 bit architectures. */
-#include <sys/elf_generic.h>
-
-#define ELF_ARCH EM_X86_64
-#define ELF_ARCH32 EM_386
-
-#define ELF_MACHINE_OK(x) ((x) == EM_X86_64)
-
-/*
- * Auxiliary vector entries for passing information to the interpreter.
- *
- * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
- * but POSIX lays claim to all symbols ending with "_t".
- */
-typedef struct { /* Auxiliary vector entry on initial stack */
- int a_type; /* Entry type. */
- union {
- int a_val; /* Integer value. */
- } a_un;
-} Elf32_Auxinfo;
-
-
-typedef struct { /* Auxiliary vector entry on initial stack */
- long a_type; /* Entry type. */
- union {
- long a_val; /* Integer value. */
- void *a_ptr; /* Address. */
- void (*a_fcn)(void); /* Function pointer (not used). */
- } a_un;
-} Elf64_Auxinfo;
-
-__ElfType(Auxinfo);
-
-/* Values for a_type. */
-#define AT_NULL 0 /* Terminates the vector. */
-#define AT_IGNORE 1 /* Ignored entry. */
-#define AT_EXECFD 2 /* File descriptor of program to load. */
-#define AT_PHDR 3 /* Program header of program already loaded. */
-#define AT_PHENT 4 /* Size of each program header entry. */
-#define AT_PHNUM 5 /* Number of program header entries. */
-#define AT_PAGESZ 6 /* Page size in bytes. */
-#define AT_BASE 7 /* Interpreter's base address. */
-#define AT_FLAGS 8 /* Flags (unused for i386). */
-#define AT_ENTRY 9 /* Where interpreter should transfer control. */
-#define AT_NOTELF 10 /* Program is not ELF ?? */
-#define AT_UID 11 /* Real uid. */
-#define AT_EUID 12 /* Effective uid. */
-#define AT_GID 13 /* Real gid. */
-#define AT_EGID 14 /* Effective gid. */
-#define AT_EXECPATH 15 /* Path to the executable. */
-#define AT_CANARY 16 /* Canary for SSP */
-#define AT_CANARYLEN 17 /* Length of the canary. */
-#define AT_OSRELDATE 18 /* OSRELDATE. */
-#define AT_NCPUS 19 /* Number of CPUs. */
-#define AT_PAGESIZES 20 /* Pagesizes. */
-#define AT_PAGESIZESLEN 21 /* Number of pagesizes. */
-#define AT_TIMEKEEP 22 /* Pointer to timehands. */
-#define AT_STACKPROT 23 /* Initial stack protection. */
-
-#define AT_COUNT 24 /* Count of defined aux entry types. */
-
-/*
- * Relocation types.
- */
-
-#define R_X86_64_COUNT 24 /* Count of defined relocation types. */
-
-/* Define "machine" characteristics */
-#if __ELF_WORD_SIZE == 32
-#define ELF_TARG_CLASS ELFCLASS32
-#else
-#define ELF_TARG_CLASS ELFCLASS64
-#endif
-#define ELF_TARG_DATA ELFDATA2LSB
-#define ELF_TARG_MACH EM_X86_64
-#define ELF_TARG_VER 1
-
-#if __ELF_WORD_SIZE == 32
-#define ET_DYN_LOAD_ADDR 0x01001000
-#else
-#define ET_DYN_LOAD_ADDR 0x01021000
-#endif
-
-#endif /* !_MACHINE_ELF_H_ */
+#include <x86/elf.h>
Modified: head/sys/amd64/include/frame.h
==============================================================================
--- head/sys/amd64/include/frame.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/amd64/include/frame.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -1,87 +1,6 @@
/*-
- * Copyright (c) 2003 Peter Wemm.
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)frame.h 5.2 (Berkeley) 1/18/91
- * $FreeBSD$
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_FRAME_H_
-#define _MACHINE_FRAME_H_ 1
-
-/*
- * System stack frames.
- */
-
-/*
- * Exception/Trap Stack Frame
- *
- * The ordering of this is specifically so that we can take first 6
- * the syscall arguments directly from the beginning of the frame.
- */
-
-struct trapframe {
- register_t tf_rdi;
- register_t tf_rsi;
- register_t tf_rdx;
- register_t tf_rcx;
- register_t tf_r8;
- register_t tf_r9;
- register_t tf_rax;
- register_t tf_rbx;
- register_t tf_rbp;
- register_t tf_r10;
- register_t tf_r11;
- register_t tf_r12;
- register_t tf_r13;
- register_t tf_r14;
- register_t tf_r15;
- uint32_t tf_trapno;
- uint16_t tf_fs;
- uint16_t tf_gs;
- register_t tf_addr;
- uint32_t tf_flags;
- uint16_t tf_es;
- uint16_t tf_ds;
- /* below portion defined in hardware */
- register_t tf_err;
- register_t tf_rip;
- register_t tf_cs;
- register_t tf_rflags;
- register_t tf_rsp;
- register_t tf_ss;
-};
-
-#define TF_HASSEGS 0x1
-#define TF_HASBASES 0x2
-#define TF_HASFPXSTATE 0x4
-
-#endif /* _MACHINE_FRAME_H_ */
+#include <x86/frame.h>
Modified: head/sys/amd64/include/sigframe.h
==============================================================================
--- head/sys/amd64/include/sigframe.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/amd64/include/sigframe.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -1,46 +1,6 @@
/*-
- * Copyright (c) 1999 Marcel Moolenaar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_SIGFRAME_H_
-#define _MACHINE_SIGFRAME_H_
-
-/*
- * Signal frames, arguments passed to application signal handlers.
- */
-struct sigframe {
- union {
- __siginfohandler_t *sf_action;
- __sighandler_t *sf_handler;
- } sf_ahu;
- ucontext_t sf_uc; /* = *sf_ucontext */
- siginfo_t sf_si; /* = *sf_siginfo (SA_SIGINFO case) */
-};
-
-#endif /* !_MACHINE_SIGFRAME_H_ */
+#include <x86/sigframe.h>
Modified: head/sys/amd64/include/signal.h
==============================================================================
--- head/sys/amd64/include/signal.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/amd64/include/signal.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -1,109 +1,6 @@
/*-
- * Copyright (c) 2003 Peter Wemm.
- * Copyright (c) 1986, 1989, 1991, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)signal.h 8.1 (Berkeley) 6/11/93
- * $FreeBSD$
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_SIGNAL_H_
-#define _MACHINE_SIGNAL_H_
-
-#include <sys/cdefs.h>
-#include <sys/_sigset.h>
-
-/*
- * Machine-dependent signal definitions
- */
-
-typedef long sig_atomic_t;
-
-#if __BSD_VISIBLE
-#include <machine/trap.h> /* codes for SIGILL, SIGFPE */
-
-/*
- * Information pushed on stack when a signal is delivered.
- * This is used by the kernel to restore state following
- * execution of the signal handler. It is also made available
- * to the handler to allow it to restore state properly if
- * a non-standard exit is performed.
- *
- * The sequence of the fields/registers after sc_mask in struct
- * sigcontext must match those in mcontext_t and struct trapframe.
- */
-struct sigcontext {
- struct __sigset sc_mask; /* signal mask to restore */
- long sc_onstack; /* sigstack state to restore */
- long sc_rdi; /* machine state (struct trapframe) */
- long sc_rsi;
- long sc_rdx;
- long sc_rcx;
- long sc_r8;
- long sc_r9;
- long sc_rax;
- long sc_rbx;
- long sc_rbp;
- long sc_r10;
- long sc_r11;
- long sc_r12;
- long sc_r13;
- long sc_r14;
- long sc_r15;
- int sc_trapno;
- short sc_fs;
- short sc_gs;
- long sc_addr;
- int sc_flags;
- short sc_es;
- short sc_ds;
- long sc_err;
- long sc_rip;
- long sc_cs;
- long sc_rflags;
- long sc_rsp;
- long sc_ss;
- long sc_len; /* sizeof(mcontext_t) */
- /*
- * See <machine/ucontext.h> and <machine/fpu.h> for the following
- * fields.
- */
- long sc_fpformat;
- long sc_ownedfp;
- long sc_fpstate[64] __aligned(16);
-
- long sc_fsbase;
- long sc_gsbase;
-
- long sc_xfpustate;
- long sc_xfpustate_len;
-
- long sc_spare[4];
-};
-#endif /* __BSD_VISIBLE */
-
-#endif /* !_MACHINE_SIGNAL_H_ */
+#include <x86/signal.h>
Modified: head/sys/amd64/include/ucontext.h
==============================================================================
--- head/sys/amd64/include/ucontext.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/amd64/include/ucontext.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -1,103 +1,6 @@
/*-
- * Copyright (c) 2003 Peter Wemm
- * Copyright (c) 1999 Marcel Moolenaar
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_UCONTEXT_H_
-#define _MACHINE_UCONTEXT_H_
-
-/*
- * mc_trapno bits. Shall be in sync with TF_XXX.
- */
-#define _MC_HASSEGS 0x1
-#define _MC_HASBASES 0x2
-#define _MC_HASFPXSTATE 0x4
-#define _MC_FLAG_MASK (_MC_HASSEGS | _MC_HASBASES | _MC_HASFPXSTATE)
-
-typedef struct __mcontext {
- /*
- * The definition of mcontext_t must match the layout of
- * struct sigcontext after the sc_mask member. This is so
- * that we can support sigcontext and ucontext_t at the same
- * time.
- */
- __register_t mc_onstack; /* XXX - sigcontext compat. */
- __register_t mc_rdi; /* machine state (struct trapframe) */
- __register_t mc_rsi;
- __register_t mc_rdx;
- __register_t mc_rcx;
- __register_t mc_r8;
- __register_t mc_r9;
- __register_t mc_rax;
- __register_t mc_rbx;
- __register_t mc_rbp;
- __register_t mc_r10;
- __register_t mc_r11;
- __register_t mc_r12;
- __register_t mc_r13;
- __register_t mc_r14;
- __register_t mc_r15;
- __uint32_t mc_trapno;
- __uint16_t mc_fs;
- __uint16_t mc_gs;
- __register_t mc_addr;
- __uint32_t mc_flags;
- __uint16_t mc_es;
- __uint16_t mc_ds;
- __register_t mc_err;
- __register_t mc_rip;
- __register_t mc_cs;
- __register_t mc_rflags;
- __register_t mc_rsp;
- __register_t mc_ss;
-
- long mc_len; /* sizeof(mcontext_t) */
-
-#define _MC_FPFMT_NODEV 0x10000 /* device not present or configured */
-#define _MC_FPFMT_XMM 0x10002
- long mc_fpformat;
-#define _MC_FPOWNED_NONE 0x20000 /* FP state not used */
-#define _MC_FPOWNED_FPU 0x20001 /* FP state came from FPU */
-#define _MC_FPOWNED_PCB 0x20002 /* FP state came from PCB */
- long mc_ownedfp;
- /*
- * See <machine/fpu.h> for the internals of mc_fpstate[].
- */
- long mc_fpstate[64] __aligned(16);
-
- __register_t mc_fsbase;
- __register_t mc_gsbase;
-
- __register_t mc_xfpustate;
- __register_t mc_xfpustate_len;
-
- long mc_spare[4];
-} mcontext_t;
-
-#endif /* !_MACHINE_UCONTEXT_H_ */
+#include <x86/ucontext.h>
Modified: head/sys/boot/userboot/userboot/elf32_freebsd.c
==============================================================================
--- head/sys/boot/userboot/userboot/elf32_freebsd.c Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/boot/userboot/userboot/elf32_freebsd.c Wed Feb 20 17:39:52 2013 (r247047)
@@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
#include <sys/exec.h>
#include <sys/linker.h>
#include <string.h>
+#define _MACHINE_ELF_WANT_32BIT
#include <i386/include/bootinfo.h>
#include <i386/include/elf.h>
#include <stand.h>
Modified: head/sys/i386/include/elf.h
==============================================================================
--- head/sys/i386/include/elf.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/i386/include/elf.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -1,118 +1,6 @@
/*-
- * Copyright (c) 1996-1997 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_ELF_H_
-#define _MACHINE_ELF_H_ 1
-
-/*
- * ELF definitions for the i386 architecture.
- */
-
-#include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */
-#if defined(__ELF_WORD_SIZE) && __ELF_WORD_SIZE == 64
-#include <sys/elf64.h> /* Definitions common to all 64 bit architectures. */
-#endif
-
-#ifndef __ELF_WORD_SIZE
-#define __ELF_WORD_SIZE 32 /* Used by <sys/elf_generic.h> */
-#endif
-
-#include <sys/elf_generic.h>
-
-#define ELF_ARCH EM_386
-
-#define ELF_MACHINE_OK(x) ((x) == EM_386 || (x) == EM_486)
-
-/*
- * Auxiliary vector entries for passing information to the interpreter.
- *
- * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
- * but POSIX lays claim to all symbols ending with "_t".
- */
-
-typedef struct { /* Auxiliary vector entry on initial stack */
- int a_type; /* Entry type. */
- union {
- long a_val; /* Integer value. */
- void *a_ptr; /* Address. */
- void (*a_fcn)(void); /* Function pointer (not used). */
- } a_un;
-} Elf32_Auxinfo;
-
-#if __ELF_WORD_SIZE == 64
-/* Fake for amd64 loader support */
-typedef struct {
- int fake;
-} Elf64_Auxinfo;
-#endif
-
-__ElfType(Auxinfo);
-
-/* Values for a_type. */
-#define AT_NULL 0 /* Terminates the vector. */
-#define AT_IGNORE 1 /* Ignored entry. */
-#define AT_EXECFD 2 /* File descriptor of program to load. */
-#define AT_PHDR 3 /* Program header of program already loaded. */
-#define AT_PHENT 4 /* Size of each program header entry. */
-#define AT_PHNUM 5 /* Number of program header entries. */
-#define AT_PAGESZ 6 /* Page size in bytes. */
-#define AT_BASE 7 /* Interpreter's base address. */
-#define AT_FLAGS 8 /* Flags (unused for i386). */
-#define AT_ENTRY 9 /* Where interpreter should transfer control. */
-#define AT_NOTELF 10 /* Program is not ELF ?? */
-#define AT_UID 11 /* Real uid. */
-#define AT_EUID 12 /* Effective uid. */
-#define AT_GID 13 /* Real gid. */
-#define AT_EGID 14 /* Effective gid. */
-#define AT_EXECPATH 15 /* Path to the executable. */
-#define AT_CANARY 16 /* Canary for SSP. */
-#define AT_CANARYLEN 17 /* Length of the canary. */
-#define AT_OSRELDATE 18 /* OSRELDATE. */
-#define AT_NCPUS 19 /* Number of CPUs. */
-#define AT_PAGESIZES 20 /* Pagesizes. */
-#define AT_PAGESIZESLEN 21 /* Number of pagesizes. */
-#define AT_TIMEKEEP 22 /* Pointer to timehands. */
-#define AT_STACKPROT 23 /* Initial stack protection. */
-
-#define AT_COUNT 24 /* Count of defined aux entry types. */
-
-/*
- * Relocation types.
- */
-
-#define R_386_COUNT 38 /* Count of defined relocation types. */
-
-/* Define "machine" characteristics */
-#define ELF_TARG_CLASS ELFCLASS32
-#define ELF_TARG_DATA ELFDATA2LSB
-#define ELF_TARG_MACH EM_386
-#define ELF_TARG_VER 1
-
-#define ET_DYN_LOAD_ADDR 0x01001000
-
-#endif /* !_MACHINE_ELF_H_ */
+#include <x86/elf.h>
Modified: head/sys/i386/include/frame.h
==============================================================================
--- head/sys/i386/include/frame.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/i386/include/frame.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -1,100 +1,6 @@
/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * William Jolitz.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)frame.h 5.2 (Berkeley) 1/18/91
- * $FreeBSD$
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_FRAME_H_
-#define _MACHINE_FRAME_H_ 1
-
-/*
- * System stack frames.
- */
-
-/*
- * Exception/Trap Stack Frame
- */
-
-struct trapframe {
- int tf_fs;
- int tf_es;
- int tf_ds;
- int tf_edi;
- int tf_esi;
- int tf_ebp;
- int tf_isp;
- int tf_ebx;
- int tf_edx;
- int tf_ecx;
- int tf_eax;
- int tf_trapno;
- /* below portion defined in 386 hardware */
- int tf_err;
- int tf_eip;
- int tf_cs;
- int tf_eflags;
- /* below only when crossing rings (e.g. user to kernel) */
- int tf_esp;
- int tf_ss;
-};
-
-/* Superset of trap frame, for traps from virtual-8086 mode */
-
-struct trapframe_vm86 {
- int tf_fs;
- int tf_es;
- int tf_ds;
- int tf_edi;
- int tf_esi;
- int tf_ebp;
- int tf_isp;
- int tf_ebx;
- int tf_edx;
- int tf_ecx;
- int tf_eax;
- int tf_trapno;
- /* below portion defined in 386 hardware */
- int tf_err;
- int tf_eip;
- int tf_cs;
- int tf_eflags;
- /* below only when crossing rings (e.g. user to kernel) */
- int tf_esp;
- int tf_ss;
- /* below only when switching out of VM86 mode */
- int tf_vm86_es;
- int tf_vm86_ds;
- int tf_vm86_fs;
- int tf_vm86_gs;
-};
-
-#endif /* _MACHINE_FRAME_H_ */
+#include <x86/frame.h>
Modified: head/sys/i386/include/sigframe.h
==============================================================================
--- head/sys/i386/include/sigframe.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/i386/include/sigframe.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -89,25 +89,6 @@ struct sigframe4 {
#endif
#endif
-struct sigframe {
- /*
- * The first four members may be used by applications.
- *
- * NOTE: The 4th argument is undocumented, ill commented
- * on and seems to be somewhat BSD "standard". Handlers
- * installed with sigvec may be using it.
- */
- register_t sf_signum;
- register_t sf_siginfo; /* code or pointer to sf_si */
- register_t sf_ucontext; /* points to sf_uc */
- register_t sf_addr; /* undocumented 4th arg */
-
- union {
- __siginfohandler_t *sf_action;
- __sighandler_t *sf_handler;
- } sf_ahu;
- ucontext_t sf_uc; /* = *sf_ucontext */
- siginfo_t sf_si; /* = *sf_siginfo (SA_SIGINFO case) */
-};
+#include <x86/sigframe.h>
#endif /* !_MACHINE_SIGFRAME_H_ */
Modified: head/sys/i386/include/signal.h
==============================================================================
--- head/sys/i386/include/signal.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/i386/include/signal.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -33,25 +33,7 @@
#ifndef _MACHINE_SIGNAL_H_
#define _MACHINE_SIGNAL_H_
-#include <sys/cdefs.h>
-#include <sys/_sigset.h>
-
-/*
- * Machine-dependent signal definitions
- */
-
-typedef int sig_atomic_t;
-
-#if __BSD_VISIBLE
-#include <machine/trap.h> /* codes for SIGILL, SIGFPE */
-
-/*
- * Information pushed on stack when a signal is delivered.
- * This is used by the kernel to restore state following
- * execution of the signal handler. It is also made available
- * to the handler to allow it to restore state properly if
- * a non-standard exit is performed.
- */
+#include <x86/signal.h>
#if defined(_KERNEL) && defined(COMPAT_43)
/*
@@ -82,57 +64,4 @@ struct osigcontext {
};
#endif
-/*
- * The sequence of the fields/registers in struct sigcontext should match
- * those in mcontext_t and struct trapframe.
- */
-struct sigcontext {
- struct __sigset sc_mask; /* signal mask to restore */
- int sc_onstack; /* sigstack state to restore */
- int sc_gs; /* machine state (struct trapframe) */
- int sc_fs;
- int sc_es;
- int sc_ds;
- int sc_edi;
- int sc_esi;
- int sc_ebp;
- int sc_isp;
- int sc_ebx;
- int sc_edx;
- int sc_ecx;
- int sc_eax;
- int sc_trapno;
- int sc_err;
- int sc_eip;
- int sc_cs;
- int sc_efl;
- int sc_esp;
- int sc_ss;
- int sc_len; /* sizeof(mcontext_t) */
- /*
- * See <machine/ucontext.h> and <machine/npx.h> for
- * the following fields.
- */
- int sc_fpformat;
- int sc_ownedfp;
- int sc_flags;
- int sc_fpstate[128] __aligned(16);
-
- int sc_fsbase;
- int sc_gsbase;
-
- int sc_xfpustate;
- int sc_xfpustate_len;
-
- int sc_spare2[4];
-};
-
-#define sc_sp sc_esp
-#define sc_fp sc_ebp
-#define sc_pc sc_eip
-#define sc_ps sc_efl
-#define sc_eflags sc_efl
-
-#endif /* __BSD_VISIBLE */
-
#endif /* !_MACHINE_SIGNAL_H_ */
Modified: head/sys/i386/include/ucontext.h
==============================================================================
--- head/sys/i386/include/ucontext.h Wed Feb 20 16:48:52 2013 (r247046)
+++ head/sys/i386/include/ucontext.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -31,64 +31,6 @@
#ifndef _MACHINE_UCONTEXT_H_
#define _MACHINE_UCONTEXT_H_
-/* Keep _MC_* values similar to amd64 */
-#define _MC_HASSEGS 0x1
-#define _MC_HASBASES 0x2
-#define _MC_HASFPXSTATE 0x4
-#define _MC_FLAG_MASK (_MC_HASSEGS | _MC_HASBASES | _MC_HASFPXSTATE)
-
-typedef struct __mcontext {
- /*
- * The definition of mcontext_t must match the layout of
- * struct sigcontext after the sc_mask member. This is so
- * that we can support sigcontext and ucontext_t at the same
- * time.
- */
- __register_t mc_onstack; /* XXX - sigcontext compat. */
- __register_t mc_gs; /* machine state (struct trapframe) */
- __register_t mc_fs;
- __register_t mc_es;
- __register_t mc_ds;
- __register_t mc_edi;
- __register_t mc_esi;
- __register_t mc_ebp;
- __register_t mc_isp;
- __register_t mc_ebx;
- __register_t mc_edx;
- __register_t mc_ecx;
- __register_t mc_eax;
- __register_t mc_trapno;
- __register_t mc_err;
- __register_t mc_eip;
- __register_t mc_cs;
- __register_t mc_eflags;
- __register_t mc_esp;
- __register_t mc_ss;
-
- int mc_len; /* sizeof(mcontext_t) */
-#define _MC_FPFMT_NODEV 0x10000 /* device not present or configured */
-#define _MC_FPFMT_387 0x10001
-#define _MC_FPFMT_XMM 0x10002
- int mc_fpformat;
-#define _MC_FPOWNED_NONE 0x20000 /* FP state not used */
-#define _MC_FPOWNED_FPU 0x20001 /* FP state came from FPU */
-#define _MC_FPOWNED_PCB 0x20002 /* FP state came from PCB */
- int mc_ownedfp;
- __register_t mc_flags;
- /*
- * See <machine/npx.h> for the internals of mc_fpstate[].
- */
- int mc_fpstate[128] __aligned(16);
-
- __register_t mc_fsbase;
- __register_t mc_gsbase;
-
- __register_t mc_xfpustate;
- __register_t mc_xfpustate_len;
-
- int mc_spare2[4];
-} mcontext_t;
-
#if defined(_KERNEL) && defined(COMPAT_FREEBSD4)
struct mcontext4 {
__register_t mc_onstack; /* XXX - sigcontext compat. */
@@ -116,4 +58,6 @@ struct mcontext4 {
};
#endif
+#include <x86/ucontext.h>
+
#endif /* !_MACHINE_UCONTEXT_H_ */
Copied and modified: head/sys/x86/include/elf.h (from r247045, head/sys/amd64/include/elf.h)
==============================================================================
--- head/sys/amd64/include/elf.h Wed Feb 20 16:32:38 2013 (r247045, copy source)
+++ head/sys/x86/include/elf.h Wed Feb 20 17:39:52 2013 (r247047)
@@ -29,10 +29,99 @@
#ifndef _MACHINE_ELF_H_
#define _MACHINE_ELF_H_ 1
+#if defined(__i386__) || defined(_MACHINE_ELF_WANT_32BIT)
+
/*
- * ELF definitions for the AMD64 architecture.
+ * ELF definitions for the i386 architecture.
*/
+#include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */
+#if defined(__ELF_WORD_SIZE) && __ELF_WORD_SIZE == 64
+#include <sys/elf64.h> /* Definitions common to all 64 bit architectures. */
+#endif
+
+#ifndef __ELF_WORD_SIZE
+#define __ELF_WORD_SIZE 32 /* Used by <sys/elf_generic.h> */
+#endif
+
+#include <sys/elf_generic.h>
+
+#define ELF_ARCH EM_386
+
+#define ELF_MACHINE_OK(x) ((x) == EM_386 || (x) == EM_486)
+
+/*
+ * Auxiliary vector entries for passing information to the interpreter.
+ *
+ * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
+ * but POSIX lays claim to all symbols ending with "_t".
+ */
+
+typedef struct { /* Auxiliary vector entry on initial stack */
+ int a_type; /* Entry type. */
+ union {
+ long a_val; /* Integer value. */
+ void *a_ptr; /* Address. */
+ void (*a_fcn)(void); /* Function pointer (not used). */
+ } a_un;
+} Elf32_Auxinfo;
+
+#if __ELF_WORD_SIZE == 64
+/* Fake for amd64 loader support */
+typedef struct {
+ int fake;
+} Elf64_Auxinfo;
+#endif
+
+__ElfType(Auxinfo);
+
+/* Values for a_type. */
+#define AT_NULL 0 /* Terminates the vector. */
+#define AT_IGNORE 1 /* Ignored entry. */
+#define AT_EXECFD 2 /* File descriptor of program to load. */
+#define AT_PHDR 3 /* Program header of program already loaded. */
+#define AT_PHENT 4 /* Size of each program header entry. */
+#define AT_PHNUM 5 /* Number of program header entries. */
+#define AT_PAGESZ 6 /* Page size in bytes. */
+#define AT_BASE 7 /* Interpreter's base address. */
+#define AT_FLAGS 8 /* Flags (unused for i386). */
+#define AT_ENTRY 9 /* Where interpreter should transfer control. */
+#define AT_NOTELF 10 /* Program is not ELF ?? */
+#define AT_UID 11 /* Real uid. */
+#define AT_EUID 12 /* Effective uid. */
+#define AT_GID 13 /* Real gid. */
+#define AT_EGID 14 /* Effective gid. */
+#define AT_EXECPATH 15 /* Path to the executable. */
+#define AT_CANARY 16 /* Canary for SSP. */
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-head
mailing list