Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / frv / include / asm / elf.h
diff --git a/kernel/arch/frv/include/asm/elf.h b/kernel/arch/frv/include/asm/elf.h
new file mode 100644 (file)
index 0000000..2bac644
--- /dev/null
@@ -0,0 +1,140 @@
+/* elf.h: FR-V ELF definitions
+ *
+ * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ * - Derived from include/asm-m68knommu/elf.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#ifndef __ASM_ELF_H
+#define __ASM_ELF_H
+
+#include <asm/ptrace.h>
+#include <asm/user.h>
+
+struct elf32_hdr;
+
+/*
+ * ELF header e_flags defines.
+ */
+#define EF_FRV_GPR_MASK         0x00000003 /* mask for # of gprs */
+#define EF_FRV_GPR32           0x00000001 /* Only uses GR on 32-register */
+#define EF_FRV_GPR64           0x00000002 /* Only uses GR on 64-register */
+#define EF_FRV_FPR_MASK         0x0000000c /* mask for # of fprs */
+#define EF_FRV_FPR32           0x00000004 /* Only uses FR on 32-register */
+#define EF_FRV_FPR64           0x00000008 /* Only uses FR on 64-register */
+#define EF_FRV_FPR_NONE                0x0000000C /* Uses software floating-point */
+#define EF_FRV_DWORD_MASK       0x00000030 /* mask for dword support */
+#define EF_FRV_DWORD_YES       0x00000010 /* Assumes stack aligned to 8-byte boundaries. */
+#define EF_FRV_DWORD_NO                0x00000020 /* Assumes stack aligned to 4-byte boundaries. */
+#define EF_FRV_DOUBLE          0x00000040 /* Uses double instructions. */
+#define EF_FRV_MEDIA           0x00000080 /* Uses media instructions. */
+#define EF_FRV_PIC             0x00000100 /* Uses position independent code. */
+#define EF_FRV_NON_PIC_RELOCS  0x00000200 /* Does not use position Independent code. */
+#define EF_FRV_MULADD           0x00000400 /* -mmuladd */
+#define EF_FRV_BIGPIC           0x00000800 /* -fPIC */
+#define EF_FRV_LIBPIC           0x00001000 /* -mlibrary-pic */
+#define EF_FRV_G0               0x00002000 /* -G 0, no small data ptr */
+#define EF_FRV_NOPACK           0x00004000 /* -mnopack */
+#define EF_FRV_FDPIC            0x00008000 /* -mfdpic */
+#define EF_FRV_CPU_MASK         0xff000000 /* specific cpu bits */
+#define EF_FRV_CPU_GENERIC     0x00000000 /* Set CPU type is FR-V */
+#define EF_FRV_CPU_FR500       0x01000000 /* Set CPU type is FR500 */
+#define EF_FRV_CPU_FR300       0x02000000 /* Set CPU type is FR300 */
+#define EF_FRV_CPU_SIMPLE       0x03000000 /* SIMPLE */
+#define EF_FRV_CPU_TOMCAT       0x04000000 /* Tomcat, FR500 prototype */
+#define EF_FRV_CPU_FR400       0x05000000 /* Set CPU type is FR400 */
+#define EF_FRV_CPU_FR550        0x06000000 /* Set CPU type is FR550 */
+#define EF_FRV_CPU_FR405       0x07000000 /* Set CPU type is FR405 */
+#define EF_FRV_CPU_FR450       0x08000000 /* Set CPU type is FR450 */
+
+/*
+ * FR-V ELF relocation types
+ */
+
+
+/*
+ * ELF register definitions..
+ */
+typedef unsigned long elf_greg_t;
+
+#define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t))
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+typedef struct user_fpmedia_regs elf_fpregset_t;
+
+/*
+ * This is used to ensure we don't load something for the wrong architecture.
+ */
+extern int elf_check_arch(const struct elf32_hdr *hdr);
+
+#define elf_check_fdpic(x) ((x)->e_flags & EF_FRV_FDPIC && !((x)->e_flags & EF_FRV_NON_PIC_RELOCS))
+#define elf_check_const_displacement(x) ((x)->e_flags & EF_FRV_PIC)
+
+/*
+ * These are used to set parameters in the core dumps.
+ */
+#define ELF_CLASS      ELFCLASS32
+#define ELF_DATA       ELFDATA2MSB
+#define ELF_ARCH       EM_FRV
+
+#define ELF_PLAT_INIT(_r)                      \
+do {                                           \
+       __kernel_frame0_ptr->gr16       = 0;    \
+       __kernel_frame0_ptr->gr17       = 0;    \
+       __kernel_frame0_ptr->gr18       = 0;    \
+       __kernel_frame0_ptr->gr19       = 0;    \
+       __kernel_frame0_ptr->gr20       = 0;    \
+       __kernel_frame0_ptr->gr21       = 0;    \
+       __kernel_frame0_ptr->gr22       = 0;    \
+       __kernel_frame0_ptr->gr23       = 0;    \
+       __kernel_frame0_ptr->gr24       = 0;    \
+       __kernel_frame0_ptr->gr25       = 0;    \
+       __kernel_frame0_ptr->gr26       = 0;    \
+       __kernel_frame0_ptr->gr27       = 0;    \
+       __kernel_frame0_ptr->gr29       = 0;    \
+} while(0)
+
+#define ELF_FDPIC_PLAT_INIT(_regs, _exec_map_addr, _interp_map_addr, _dynamic_addr)    \
+do {                                                                                   \
+       __kernel_frame0_ptr->gr16       = _exec_map_addr;                               \
+       __kernel_frame0_ptr->gr17       = _interp_map_addr;                             \
+       __kernel_frame0_ptr->gr18       = _dynamic_addr;                                \
+       __kernel_frame0_ptr->gr19       = 0;                                            \
+       __kernel_frame0_ptr->gr20       = 0;                                            \
+       __kernel_frame0_ptr->gr21       = 0;                                            \
+       __kernel_frame0_ptr->gr22       = 0;                                            \
+       __kernel_frame0_ptr->gr23       = 0;                                            \
+       __kernel_frame0_ptr->gr24       = 0;                                            \
+       __kernel_frame0_ptr->gr25       = 0;                                            \
+       __kernel_frame0_ptr->gr26       = 0;                                            \
+       __kernel_frame0_ptr->gr27       = 0;                                            \
+       __kernel_frame0_ptr->gr29       = 0;                                            \
+} while(0)
+
+#define CORE_DUMP_USE_REGSET
+#define ELF_FDPIC_CORE_EFLAGS  EF_FRV_FDPIC
+#define ELF_EXEC_PAGESIZE      16384
+
+/* This is the location that an ET_DYN program is loaded if exec'ed.  Typical
+   use of this is to invoke "./ld.so someprog" to test out a new version of
+   the loader.  We need to make sure that it is out of the way of the program
+   that it will "exec", and that there is sufficient room for the brk.  */
+
+#define ELF_ET_DYN_BASE         0x08000000UL
+
+/* This yields a mask that user programs can use to figure out what
+   instruction set this cpu supports.  */
+
+#define ELF_HWCAP      (0)
+
+/* This yields a string that ld.so will use to load implementation
+   specific libraries for optimization.  This is more specific in
+   intent than poking at uname or /proc/cpuinfo.  */
+
+#define ELF_PLATFORM  (NULL)
+
+#endif