Blame view

include/asm-arm/elf.h 3.82 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef __ASMARM_ELF_H
  #define __ASMARM_ELF_H
4a5222ca4   Russell King   [ARM] Arrange asm...
3
  #ifndef __ASSEMBLY__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
  /*
   * ELF register definitions..
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
  #include <asm/ptrace.h>
  #include <asm/user.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
11
  
  typedef unsigned long elf_greg_t;
  typedef unsigned long elf_freg_t[3];
4a5222ca4   Russell King   [ARM] Arrange asm...
12
13
14
15
16
  #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t))
  typedef elf_greg_t elf_gregset_t[ELF_NGREG];
  
  typedef struct user_fp elf_fpregset_t;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
20
21
22
23
24
  #define EM_ARM	40
  #define EF_ARM_APCS26 0x08
  #define EF_ARM_SOFT_FLOAT 0x200
  #define EF_ARM_EABI_MASK 0xFF000000
  
  #define R_ARM_NONE	0
  #define R_ARM_PC24	1
  #define R_ARM_ABS32	2
c2e261142   Daniel Jacobowitz   [ARM] 3205/1: Han...
25
26
  #define R_ARM_CALL	28
  #define R_ARM_JUMP24	29
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
30
31
32
   * These are used to set parameters in the core dumps.
   */
  #define ELF_CLASS	ELFCLASS32
  #ifdef __ARMEB__
718a30a5c   Mike Frysinger   [PATCH] ARM: 2696...
33
  #define ELF_DATA	ELFDATA2MSB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34
  #else
718a30a5c   Mike Frysinger   [PATCH] ARM: 2696...
35
  #define ELF_DATA	ELFDATA2LSB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
36
37
  #endif
  #define ELF_ARCH	EM_ARM
5974eaaed   Russell King   [ARM] Move HWCAP_...
38
39
40
41
42
43
44
45
46
47
48
49
50
  /*
   * HWCAP flags - for elf_hwcap (in kernel) and AT_HWCAP
   */
  #define HWCAP_SWP	1
  #define HWCAP_HALF	2
  #define HWCAP_THUMB	4
  #define HWCAP_26BIT	8	/* Play it safe */
  #define HWCAP_FAST_MULT	16
  #define HWCAP_FPA	32
  #define HWCAP_VFP	64
  #define HWCAP_EDSP	128
  #define HWCAP_JAVA	256
  #define HWCAP_IWMMXT	512
99e4a6dda   Lennert Buytenhek   [ARM] 4054/1: ep9...
51
  #define HWCAP_CRUNCH	1024
6ff6340ab   David Woodhouse   [HEADERS] Fix ARM...
52

5974eaaed   Russell King   [ARM] Move HWCAP_...
53
  #ifdef __KERNEL__
4a5222ca4   Russell King   [ARM] Arrange asm...
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  #ifndef __ASSEMBLY__
  /*
   * This yields a mask that user programs can use to figure out what
   * instruction set this cpu supports.
   */
  #define ELF_HWCAP	(elf_hwcap)
  extern unsigned int elf_hwcap;
  
  /*
   * 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.
   *
   * For now we just provide a fairly general string that describes the
   * processor family.  This could be made more specific later if someone
   * implemented optimisations that require it.  26-bit CPUs give you
   * "v1l" for ARM2 (no SWP) and "v2l" for anything else (ARM1 isn't
   * supported).  32-bit CPUs give you "v3[lb]" for anything based on an
   * ARM6 or ARM7 core and "armv4[lb]" for anything based on a StrongARM-1
   * core.
   */
  #define ELF_PLATFORM_SIZE 8
  #define ELF_PLATFORM	(elf_platform)
  
  extern char elf_platform[];
  #endif
6ff6340ab   David Woodhouse   [HEADERS] Fix ARM...
80
81
82
  /*
   * This is used to ensure we don't load something for the wrong architecture.
   */
4a5222ca4   Russell King   [ARM] Arrange asm...
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  #define elf_check_arch(x) ((x)->e_machine == EM_ARM && ELF_PROC_OK(x))
  
  /*
   * 32-bit code is always OK.  Some cpus can do 26-bit, some can't.
   */
  #define ELF_PROC_OK(x)	(ELF_THUMB_OK(x) && ELF_26BIT_OK(x))
  
  #define ELF_THUMB_OK(x) \
  	((elf_hwcap & HWCAP_THUMB && ((x)->e_entry & 1) == 1) || \
  	 ((x)->e_entry & 3) == 0)
  
  #define ELF_26BIT_OK(x) \
  	((elf_hwcap & HWCAP_26BIT && (x)->e_flags & EF_ARM_APCS26) || \
  	  ((x)->e_flags & EF_ARM_APCS26) == 0)
6ff6340ab   David Woodhouse   [HEADERS] Fix ARM...
97

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
99
100
101
102
103
104
105
106
107
108
109
110
111
  #define USE_ELF_CORE_DUMP
  #define ELF_EXEC_PAGESIZE	4096
  
  /* 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	(2 * TASK_SIZE / 3)
  
  /* When the program starts, a1 contains a pointer to a function to be 
     registered with atexit, as per the SVR4 ABI.  A value of 0 means we 
     have no such handler.  */
  #define ELF_PLAT_INIT(_r, load_addr)	(_r)->ARM_r0 = 0
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
112
  /*
afe4b25e7   Lennert Buytenhek   [ARM] 3881/4: xsc...
113
114
115
116
   * Since the FPA coprocessor uses CP1 and CP2, and iWMMXt uses CP0
   * and CP1, we only enable access to the iWMMXt coprocessor if the
   * binary is EABI or softfloat (and thus, guaranteed not to use
   * FPA instructions.)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
117
   */
afe4b25e7   Lennert Buytenhek   [ARM] 3881/4: xsc...
118
119
120
121
122
123
124
125
126
127
128
129
  #define SET_PERSONALITY(ex, ibcs2)					\
  	do {								\
  		if ((ex).e_flags & EF_ARM_APCS26) {			\
  			set_personality(PER_LINUX);			\
  		} else {						\
  			set_personality(PER_LINUX_32BIT);		\
  			if (elf_hwcap & HWCAP_IWMMXT && (ex).e_flags & (EF_ARM_EABI_MASK | EF_ARM_SOFT_FLOAT)) \
  				set_thread_flag(TIF_USING_IWMMXT);	\
  			else						\
  				clear_thread_flag(TIF_USING_IWMMXT);	\
  		}							\
  	} while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
130
131
132
133
  
  #endif
  
  #endif