a5bd9f6
From 9775ebe3966c84e7b86ea66bc5cc7a828391c7f2 Mon Sep 17 00:00:00 2001
a5bd9f6
From: Leif Lindholm  <leif.lindholm@arm.com>
a5bd9f6
Date: Sun, 20 Jan 2013 23:01:47 +0100
a5bd9f6
Subject: [PATCH 120/364] 	* include/grub/elf.h: Update ARM definitions
a5bd9f6
 based on binutils.
a5bd9f6
a5bd9f6
---
a5bd9f6
 ChangeLog          |  4 ++++
a5bd9f6
 include/grub/elf.h | 65 +++++++++++++++++++++++++++++++++++++++++++++---------
a5bd9f6
 2 files changed, 58 insertions(+), 11 deletions(-)
a5bd9f6
a5bd9f6
diff --git a/ChangeLog b/ChangeLog
a5bd9f6
index c8edf73..e82ee8d 100644
a5bd9f6
--- a/ChangeLog
a5bd9f6
+++ b/ChangeLog
a5bd9f6
@@ -1,3 +1,7 @@
a5bd9f6
+2013-01-20  Leif Lindholm  <leif.lindholm@arm.com>
a5bd9f6
+
a5bd9f6
+	* include/grub/elf.h: Update ARM definitions based on binutils.
a5bd9f6
+
a5bd9f6
 2013-01-20  AleŇ° Nesrsta  <starous@volny.cz>
a5bd9f6
 
a5bd9f6
 	Split long USB transfers into short ones.
a5bd9f6
diff --git a/include/grub/elf.h b/include/grub/elf.h
a5bd9f6
index 9a75b52..d4a2a5f 100644
a5bd9f6
--- a/include/grub/elf.h
a5bd9f6
+++ b/include/grub/elf.h
a5bd9f6
@@ -145,6 +145,7 @@ typedef struct
a5bd9f6
 #define ELFOSABI_TRU64		10	/* Compaq TRU64 UNIX.  */
a5bd9f6
 #define ELFOSABI_MODESTO	11	/* Novell Modesto.  */
a5bd9f6
 #define ELFOSABI_OPENBSD	12	/* OpenBSD.  */
a5bd9f6
+#define ELFOSABI_ARM_AEABI	64	/* ARM EABI */
a5bd9f6
 #define ELFOSABI_ARM		97	/* ARM */
a5bd9f6
 #define ELFOSABI_STANDALONE	255	/* Standalone (embedded) application */
a5bd9f6
 
a5bd9f6
@@ -2005,15 +2006,18 @@ typedef Elf32_Addr Elf32_Conflict;
a5bd9f6
 /* ARM specific declarations */
a5bd9f6
 
a5bd9f6
 /* Processor specific flags for the ELF header e_flags field.  */
a5bd9f6
-#define EF_ARM_RELEXEC     0x01
a5bd9f6
-#define EF_ARM_HASENTRY    0x02
a5bd9f6
-#define EF_ARM_INTERWORK   0x04
a5bd9f6
-#define EF_ARM_APCS_26     0x08
a5bd9f6
-#define EF_ARM_APCS_FLOAT  0x10
a5bd9f6
-#define EF_ARM_PIC         0x20
a5bd9f6
-#define EF_ARM_ALIGN8      0x40		/* 8-bit structure alignment is in use */
a5bd9f6
-#define EF_ARM_NEW_ABI     0x80
a5bd9f6
-#define EF_ARM_OLD_ABI     0x100
a5bd9f6
+#define EF_ARM_RELEXEC     	0x01
a5bd9f6
+#define EF_ARM_HASENTRY    	0x02
a5bd9f6
+#define EF_ARM_INTERWORK   	0x04
a5bd9f6
+#define EF_ARM_APCS_26     	0x08
a5bd9f6
+#define EF_ARM_APCS_FLOAT  	0x10
a5bd9f6
+#define EF_ARM_PIC         	0x20
a5bd9f6
+#define EF_ARM_ALIGN8      	0x40 /* 8-bit structure alignment is in use */
a5bd9f6
+#define EF_ARM_NEW_ABI     	0x80
a5bd9f6
+#define EF_ARM_OLD_ABI     	0x100
a5bd9f6
+#define EF_ARM_SOFT_FLOAT	0x200
a5bd9f6
+#define EF_ARM_VFP_FLOAT	0x400
a5bd9f6
+#define EF_ARM_MAVERICK_FLOAT	0x800
a5bd9f6
 
a5bd9f6
 /* Other constants defined in the ARM ELF spec. version B-01.  */
a5bd9f6
 /* NB. These conflict with values defined above.  */
a5bd9f6
@@ -2022,13 +2026,21 @@ typedef Elf32_Addr Elf32_Conflict;
a5bd9f6
 #define EF_ARM_MAPSYMSFIRST	0x10
a5bd9f6
 #define EF_ARM_EABIMASK		0XFF000000
a5bd9f6
 
a5bd9f6
+/* Constants defined in AAELF.  */
a5bd9f6
+#define EF_ARM_BE8	    0x00800000
a5bd9f6
+#define EF_ARM_LE8	    0x00400000
a5bd9f6
+
a5bd9f6
 #define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
a5bd9f6
 #define EF_ARM_EABI_UNKNOWN  0x00000000
a5bd9f6
 #define EF_ARM_EABI_VER1     0x01000000
a5bd9f6
 #define EF_ARM_EABI_VER2     0x02000000
a5bd9f6
+#define EF_ARM_EABI_VER3     0x03000000
a5bd9f6
+#define EF_ARM_EABI_VER4     0x04000000
a5bd9f6
+#define EF_ARM_EABI_VER5     0x05000000
a5bd9f6
 
a5bd9f6
 /* Additional symbol types for Thumb */
a5bd9f6
-#define STT_ARM_TFUNC      0xd
a5bd9f6
+#define STT_ARM_TFUNC	     STT_LOPROC /* A Thumb function.  */
a5bd9f6
+#define STT_ARM_16BIT	     STT_HIPROC /* A Thumb label.  */
a5bd9f6
 
a5bd9f6
 /* ARM-specific values for sh_flags */
a5bd9f6
 #define SHF_ARM_ENTRYSECT  0x10000000   /* Section contains an entry point */
a5bd9f6
@@ -2038,6 +2050,17 @@ typedef Elf32_Addr Elf32_Conflict;
a5bd9f6
 /* ARM-specific program header flags */
a5bd9f6
 #define PF_ARM_SB          0x10000000   /* Segment contains the location
a5bd9f6
 					   addressed by the static base */
a5bd9f6
+#define PF_ARM_PI	   0x20000000   /* Position-independent segment.  */
a5bd9f6
+#define PF_ARM_ABS	   0x40000000   /* Absolute segment.  */
a5bd9f6
+
a5bd9f6
+/* Processor specific values for the Phdr p_type field.  */
a5bd9f6
+#define PT_ARM_EXIDX		(PT_LOPROC + 1)	/* ARM unwind segment.  */
a5bd9f6
+
a5bd9f6
+/* Processor specific values for the Shdr sh_type field.  */
a5bd9f6
+#define SHT_ARM_EXIDX		(SHT_LOPROC + 1) /* ARM unwind section.  */
a5bd9f6
+#define SHT_ARM_PREEMPTMAP	(SHT_LOPROC + 2) /* Preemption details.  */
a5bd9f6
+#define SHT_ARM_ATTRIBUTES	(SHT_LOPROC + 3) /* ARM attributes section.  */
a5bd9f6
+
a5bd9f6
 
a5bd9f6
 /* ARM relocs.  */
a5bd9f6
 #define R_ARM_NONE		0	/* No reloc */
a5bd9f6
@@ -2050,7 +2073,7 @@ typedef Elf32_Addr Elf32_Conflict;
a5bd9f6
 #define R_ARM_THM_ABS5		7
a5bd9f6
 #define R_ARM_ABS8		8	/* Direct 8 bit */
a5bd9f6
 #define R_ARM_SBREL32		9
a5bd9f6
-#define R_ARM_THM_PC22		10
a5bd9f6
+#define R_ARM_THM_CALL		10
a5bd9f6
 #define R_ARM_THM_PC8		11
a5bd9f6
 #define R_ARM_AMP_VCALL9	12
a5bd9f6
 #define R_ARM_SWI24		13
a5bd9f6
@@ -2065,16 +2088,36 @@ typedef Elf32_Addr Elf32_Conflict;
a5bd9f6
 #define R_ARM_GOTPC		25	/* 32 bit PC relative offset to GOT */
a5bd9f6
 #define R_ARM_GOT32		26	/* 32 bit GOT entry */
a5bd9f6
 #define R_ARM_PLT32		27	/* 32 bit PLT address */
a5bd9f6
+#define R_ARM_CALL		28
a5bd9f6
+#define R_ARM_JUMP24		29
a5bd9f6
+#define R_ARM_THM_JUMP24	30
a5bd9f6
+#define R_ARM_BASE_ABS		31
a5bd9f6
 #define R_ARM_ALU_PCREL_7_0	32
a5bd9f6
 #define R_ARM_ALU_PCREL_15_8	33
a5bd9f6
 #define R_ARM_ALU_PCREL_23_15	34
a5bd9f6
 #define R_ARM_LDR_SBREL_11_0	35
a5bd9f6
 #define R_ARM_ALU_SBREL_19_12	36
a5bd9f6
 #define R_ARM_ALU_SBREL_27_20	37
a5bd9f6
+#define R_ARM_TLS_GOTDESC	90
a5bd9f6
+#define R_ARM_TLS_CALL		91
a5bd9f6
+#define R_ARM_TLS_DESCSEQ	92
a5bd9f6
+#define R_ARM_THM_TLS_CALL	93
a5bd9f6
 #define R_ARM_GNU_VTENTRY	100
a5bd9f6
 #define R_ARM_GNU_VTINHERIT	101
a5bd9f6
 #define R_ARM_THM_PC11		102	/* thumb unconditional branch */
a5bd9f6
 #define R_ARM_THM_PC9		103	/* thumb conditional branch */
a5bd9f6
+#define R_ARM_TLS_GD32		104	/* PC-rel 32 bit for global dynamic
a5bd9f6
+					   thread local data */
a5bd9f6
+#define R_ARM_TLS_LDM32		105	/* PC-rel 32 bit for local dynamic
a5bd9f6
+					   thread local data */
a5bd9f6
+#define R_ARM_TLS_LDO32		106	/* 32 bit offset relative to TLS
a5bd9f6
+					   block */
a5bd9f6
+#define R_ARM_TLS_IE32		107	/* PC-rel 32 bit for GOT entry of
a5bd9f6
+					   static TLS block offset */
a5bd9f6
+#define R_ARM_TLS_LE32		108	/* 32 bit offset relative to static
a5bd9f6
+					   TLS block */
a5bd9f6
+#define	R_ARM_THM_TLS_DESCSEQ	129
a5bd9f6
+#define R_ARM_IRELATIVE		160
a5bd9f6
 #define R_ARM_RXPC25		249
a5bd9f6
 #define R_ARM_RSBREL32		250
a5bd9f6
 #define R_ARM_THM_RPC22		251
a5bd9f6
-- 
a5bd9f6
1.8.1.4
a5bd9f6