MIPS: ELF: Add definition for the .MIPS.abiflags section
authorPaul Burton <paul.burton@imgtec.com>
Thu, 11 Sep 2014 07:30:21 +0000 (08:30 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 24 Nov 2014 06:45:07 +0000 (07:45 +0100)
New toolchains will generate a .MIPS.abiflags section, referenced by a
new PT_MIPS_ABIFLAGS program header. This section will provide
information about the requirements of the ELF, including the ISA level
the code is built for, the ASEs it requires, the size of various
registers and its expectations of the floating point mode. This patch
introduces a definition of the structure of this section and the program
header, for use in a subsequent patch.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/7682/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/elf.h

index 9343529db7bcd94916668a890a207fa54d43a630..bfa4bbd42c6c82d8fd287d96826034a48db5210f 100644 (file)
@@ -28,6 +28,7 @@
 #define PT_MIPS_REGINFO                0x70000000
 #define PT_MIPS_RTPROC         0x70000001
 #define PT_MIPS_OPTIONS                0x70000002
+#define PT_MIPS_ABIFLAGS       0x70000003
 
 /* Flags in the e_flags field of the header */
 #define EF_MIPS_NOREORDER      0x00000001
@@ -174,6 +175,30 @@ typedef elf_greg_t elf_gregset_t[ELF_NGREG];
 typedef double elf_fpreg_t;
 typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
 
+struct mips_elf_abiflags_v0 {
+       uint16_t version;       /* Version of flags structure */
+       uint8_t isa_level;      /* The level of the ISA: 1-5, 32, 64 */
+       uint8_t isa_rev;        /* The revision of ISA: 0 for MIPS V and below,
+                                  1-n otherwise */
+       uint8_t gpr_size;       /* The size of general purpose registers */
+       uint8_t cpr1_size;      /* The size of co-processor 1 registers */
+       uint8_t cpr2_size;      /* The size of co-processor 2 registers */
+       uint8_t fp_abi;         /* The floating-point ABI */
+       uint32_t isa_ext;       /* Mask of processor-specific extensions */
+       uint32_t ases;          /* Mask of ASEs used */
+       uint32_t flags1;        /* Mask of general flags */
+       uint32_t flags2;
+};
+
+#define MIPS_ABI_FP_ANY                0       /* FP ABI doesn't matter */
+#define MIPS_ABI_FP_DOUBLE     1       /* -mdouble-float */
+#define MIPS_ABI_FP_SINGLE     2       /* -msingle-float */
+#define MIPS_ABI_FP_SOFT       3       /* -msoft-float */
+#define MIPS_ABI_FP_OLD_64     4       /* -mips32r2 -mfp64 */
+#define MIPS_ABI_FP_XX         5       /* -mfpxx */
+#define MIPS_ABI_FP_64         6       /* -mips32r2 -mfp64 */
+#define MIPS_ABI_FP_64A                7       /* -mips32r2 -mfp64 -mno-odd-spreg */
+
 #ifdef CONFIG_32BIT
 
 /*