| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #ifndef __ASMPARISC_ELF_H
 | 
					
						
							|  |  |  | #define __ASMPARISC_ELF_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * ELF register definitions.. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <asm/ptrace.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EM_PARISC 15
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HPPA specific definitions.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Legal values for e_flags field of Elf32_Ehdr.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EF_PARISC_TRAPNIL	0x00010000 /* Trap nil pointer dereference.  */
 | 
					
						
							|  |  |  | #define EF_PARISC_EXT		0x00020000 /* Program uses arch. extensions. */
 | 
					
						
							|  |  |  | #define EF_PARISC_LSB		0x00040000 /* Program expects little endian. */
 | 
					
						
							|  |  |  | #define EF_PARISC_WIDE		0x00080000 /* Program expects wide mode.  */
 | 
					
						
							|  |  |  | #define EF_PARISC_NO_KABP	0x00100000 /* No kernel assisted branch
 | 
					
						
							|  |  |  | 					      prediction.  */ | 
					
						
							|  |  |  | #define EF_PARISC_LAZYSWAP	0x00400000 /* Allow lazy swapping.  */
 | 
					
						
							|  |  |  | #define EF_PARISC_ARCH		0x0000ffff /* Architecture version.  */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Defined values for `e_flags & EF_PARISC_ARCH' are:  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define EFA_PARISC_1_0		    0x020b /* PA-RISC 1.0 big-endian.  */
 | 
					
						
							|  |  |  | #define EFA_PARISC_1_1		    0x0210 /* PA-RISC 1.1 big-endian.  */
 | 
					
						
							|  |  |  | #define EFA_PARISC_2_0		    0x0214 /* PA-RISC 2.0 big-endian.  */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-03 17:00:11 +02:00
										 |  |  | /* Additional section indices.  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define SHN_PARISC_ANSI_COMMON	0xff00	   /* Section for tenatively declared
 | 
					
						
							|  |  |  | 					      symbols in ANSI C.  */ | 
					
						
							|  |  |  | #define SHN_PARISC_HUGE_COMMON	0xff01	   /* Common blocks in huge model.  */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Legal values for sh_type field of Elf32_Shdr.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SHT_PARISC_EXT		0x70000000 /* Contains product specific ext. */
 | 
					
						
							|  |  |  | #define SHT_PARISC_UNWIND	0x70000001 /* Unwind information.  */
 | 
					
						
							|  |  |  | #define SHT_PARISC_DOC		0x70000002 /* Debug info for optimized code. */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Legal values for sh_flags field of Elf32_Shdr.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define SHF_PARISC_SHORT	0x20000000 /* Section with short addressing. */
 | 
					
						
							|  |  |  | #define SHF_PARISC_HUGE		0x40000000 /* Section far from gp.  */
 | 
					
						
							|  |  |  | #define SHF_PARISC_SBP		0x80000000 /* Static branch prediction code. */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Legal values for ST_TYPE subfield of st_info (symbol type).  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define STT_PARISC_MILLICODE	13	/* Millicode function entry point.  */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define STT_HP_OPAQUE		(STT_LOOS + 0x1)
 | 
					
						
							|  |  |  | #define STT_HP_STUB		(STT_LOOS + 0x2)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* HPPA relocs.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define R_PARISC_NONE		0	/* No reloc.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR32		1	/* Direct 32-bit reference.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR21L		2	/* Left 21 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR17R		3	/* Right 17 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR17F		4	/* 17 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR14R		6	/* Right 14 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL32	9	/* 32-bit rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL21L	10	/* Left 21 bits of rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL17R	11	/* Right 17 bits of rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL17F	12	/* 17 bits of rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL14R	14	/* Right 14 bits of rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DPREL21L	18	/* Left 21 bits of rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DPREL14R	22	/* Right 14 bits of rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL21L	26	/* GP-relative, left 21 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL14R	30	/* GP-relative, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF21L	34	/* LT-relative, left 21 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF14R	38	/* LT-relative, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_SECREL32	41	/* 32 bits section rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_SEGBASE	48	/* No relocation, set segment base.  */
 | 
					
						
							|  |  |  | #define R_PARISC_SEGREL32	49	/* 32 bits segment rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLTOFF21L	50	/* PLT rel. address, left 21 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLTOFF14R	54	/* PLT rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR32	57	/* 32 bits LT-rel. function pointer. */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR21L	58	/* LT-rel. fct ptr, left 21 bits. */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR14R	62	/* LT-rel. fct ptr, right 14 bits. */
 | 
					
						
							|  |  |  | #define R_PARISC_FPTR64		64	/* 64 bits function address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLABEL32	65	/* 32 bits function address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL64	72	/* 64 bits PC-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL22F	74	/* 22 bits PC-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL14WR	75	/* PC-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL14DR	76	/* PC rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL16F	77	/* 16 bits PC-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL16WF	78	/* 16 bits PC-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PCREL16DF	79	/* 16 bits PC-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR64		80	/* 64 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR14WR	83	/* 14 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR14DR	84	/* 14 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR16F		85	/* 16 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR16WF	86	/* 16 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_DIR16DF	87	/* 16 bits of eff. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL64	88	/* 64 bits of GP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL14WR	91	/* GP-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL14DR	92	/* GP-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL16F	93	/* 16 bits GP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL16WF	94	/* 16 bits GP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_GPREL16DF	95	/* 16 bits GP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF64	96	/* 64 bits LT-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF14WR	99	/* LT-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF14DR	100	/* LT-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF16F	101	/* 16 bits LT-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF16WF	102	/* 16 bits LT-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF16DF	103	/* 16 bits LT-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_SECREL64	104	/* 64 bits section rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_SEGREL64	112	/* 64 bits segment rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLTOFF14WR	115	/* PLT-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLTOFF14DR	116	/* PLT-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLTOFF16F	117	/* 16 bits LT-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLTOFF16WF	118	/* 16 bits PLT-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_PLTOFF16DF	119	/* 16 bits PLT-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR64	120	/* 64 bits LT-rel. function ptr.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR14WR	123	/* LT-rel. fct. ptr., right 14 bits. */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR14DR	124	/* LT-rel. fct. ptr., right 14 bits. */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR16F	125	/* 16 bits LT-rel. function ptr.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR16WF	126	/* 16 bits LT-rel. function ptr.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_FPTR16DF	127	/* 16 bits LT-rel. function ptr.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LORESERVE	128
 | 
					
						
							|  |  |  | #define R_PARISC_COPY		128	/* Copy relocation.  */
 | 
					
						
							|  |  |  | #define R_PARISC_IPLT		129	/* Dynamic reloc, imported PLT */
 | 
					
						
							|  |  |  | #define R_PARISC_EPLT		130	/* Dynamic reloc, exported PLT */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL32	153	/* 32 bits TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL21L	154	/* TP-rel. address, left 21 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL14R	158	/* TP-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP21L	162	/* LT-TP-rel. address, left 21 bits. */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP14R	166	/* LT-TP-rel. address, right 14 bits.*/
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP14F	167	/* 14 bits LT-TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL64	216	/* 64 bits TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL14WR	219	/* TP-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL14DR	220	/* TP-rel. address, right 14 bits.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL16F	221	/* 16 bits TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL16WF	222	/* 16 bits TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_TPREL16DF	223	/* 16 bits TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP64	224	/* 64 bits LT-TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP14WR	227	/* LT-TP-rel. address, right 14 bits.*/
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP14DR	228	/* LT-TP-rel. address, right 14 bits.*/
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP16F	229	/* 16 bits LT-TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP16WF	230	/* 16 bits LT-TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_LTOFF_TP16DF	231	/* 16 bits LT-TP-rel. address.  */
 | 
					
						
							|  |  |  | #define R_PARISC_HIRESERVE	255
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PA_PLABEL_FDESC		0x02	/* bit set if PLABEL points to
 | 
					
						
							|  |  |  | 					 * a function descriptor, not | 
					
						
							|  |  |  | 					 * an address */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* The following are PA function descriptors 
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * addr:	the absolute address of the function | 
					
						
							|  |  |  |  * gp:		either the data pointer (r27) for non-PIC code or the | 
					
						
							|  |  |  |  *		the PLT pointer (r19) for PIC code */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Format for the Elf32 Function descriptor */ | 
					
						
							|  |  |  | typedef struct elf32_fdesc { | 
					
						
							|  |  |  | 	__u32	addr; | 
					
						
							|  |  |  | 	__u32	gp; | 
					
						
							|  |  |  | } Elf32_Fdesc; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Format for the Elf64 Function descriptor */ | 
					
						
							|  |  |  | typedef struct elf64_fdesc { | 
					
						
							|  |  |  | 	__u64	dummy[2]; /* FIXME: nothing uses these, why waste
 | 
					
						
							|  |  |  | 			   * the space */ | 
					
						
							|  |  |  | 	__u64	addr; | 
					
						
							|  |  |  | 	__u64	gp; | 
					
						
							|  |  |  | } Elf64_Fdesc; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-15 16:44:25 -04:00
										 |  |  | #ifdef __KERNEL__
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CONFIG_64BIT
 | 
					
						
							|  |  |  | #define Elf_Fdesc	Elf64_Fdesc
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define Elf_Fdesc	Elf32_Fdesc
 | 
					
						
							|  |  |  | #endif /*CONFIG_64BIT*/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /*__KERNEL__*/
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PT_HP_TLS		(PT_LOOS + 0x0)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_NONE		(PT_LOOS + 0x1)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_VERSION	(PT_LOOS + 0x2)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_KERNEL	(PT_LOOS + 0x3)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_COMM		(PT_LOOS + 0x4)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_PROC		(PT_LOOS + 0x5)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_LOADABLE	(PT_LOOS + 0x6)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_STACK	(PT_LOOS + 0x7)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_SHM		(PT_LOOS + 0x8)
 | 
					
						
							|  |  |  | #define PT_HP_CORE_MMF		(PT_LOOS + 0x9)
 | 
					
						
							|  |  |  | #define PT_HP_PARALLEL		(PT_LOOS + 0x10)
 | 
					
						
							|  |  |  | #define PT_HP_FASTBIND		(PT_LOOS + 0x11)
 | 
					
						
							|  |  |  | #define PT_HP_OPT_ANNOT		(PT_LOOS + 0x12)
 | 
					
						
							|  |  |  | #define PT_HP_HSL_ANNOT		(PT_LOOS + 0x13)
 | 
					
						
							|  |  |  | #define PT_HP_STACK		(PT_LOOS + 0x14)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PT_PARISC_ARCHEXT	0x70000000
 | 
					
						
							|  |  |  | #define PT_PARISC_UNWIND	0x70000001
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PF_PARISC_SBP		0x08000000
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define PF_HP_PAGE_SIZE		0x00100000
 | 
					
						
							|  |  |  | #define PF_HP_FAR_SHARED	0x00200000
 | 
					
						
							|  |  |  | #define PF_HP_NEAR_SHARED	0x00400000
 | 
					
						
							|  |  |  | #define PF_HP_CODE		0x01000000
 | 
					
						
							|  |  |  | #define PF_HP_MODIFY		0x02000000
 | 
					
						
							|  |  |  | #define PF_HP_LAZYSWAP		0x04000000
 | 
					
						
							|  |  |  | #define PF_HP_SBP		0x08000000
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * The following definitions are those for 32-bit ELF binaries on a 32-bit | 
					
						
							|  |  |  |  * kernel and for 64-bit binaries on a 64-bit kernel.  To run 32-bit binaries | 
					
						
							| 
									
										
										
										
											2008-02-24 10:44:21 -08:00
										 |  |  |  * on a 64-bit kernel, arch/parisc/kernel/binfmt_elf32.c defines these | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * macros appropriately and then #includes binfmt_elf.c, which then includes | 
					
						
							|  |  |  |  * this file. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef ELF_CLASS
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * This is used to ensure we don't load something for the wrong architecture. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Note that this header file is used by default in fs/binfmt_elf.c. So | 
					
						
							|  |  |  |  * the following macros are for the default case. However, for the 64 | 
					
						
							|  |  |  |  * bit kernel we also support 32 bit parisc binaries. To do that | 
					
						
							| 
									
										
										
										
											2008-02-24 10:44:21 -08:00
										 |  |  |  * arch/parisc/kernel/binfmt_elf32.c defines its own set of these | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |  * macros, and then it includes fs/binfmt_elf.c to provide an alternate | 
					
						
							|  |  |  |  * elf binary handler for 32 bit binaries (on the 64 bit kernel). | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2007-01-28 15:09:20 +01:00
										 |  |  | #ifdef CONFIG_64BIT
 | 
					
						
							| 
									
										
										
										
											2008-02-24 10:44:21 -08:00
										 |  |  | #define ELF_CLASS   ELFCLASS64
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #else
 | 
					
						
							|  |  |  | #define ELF_CLASS	ELFCLASS32
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef unsigned long elf_greg_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-24 10:44:21 -08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * 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. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-24 10:44:21 -08:00
										 |  |  | #define ELF_PLATFORM  ("PARISC\0")
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-16 15:39:57 +02:00
										 |  |  | #define SET_PERSONALITY(ex) \
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	current->personality = PER_LINUX; \ | 
					
						
							|  |  |  | 	current->thread.map_base = DEFAULT_MAP_BASE; \ | 
					
						
							|  |  |  | 	current->thread.task_size = DEFAULT_TASK_SIZE \ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Fill in general registers in a core dump.  This saves pretty | 
					
						
							|  |  |  |  * much the same registers as hp-ux, although in a different order. | 
					
						
							|  |  |  |  * Registers marked # below are not currently saved in pt_regs, so | 
					
						
							|  |  |  |  * we use their current values here. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 	gr0..gr31 | 
					
						
							|  |  |  |  * 	sr0..sr7 | 
					
						
							|  |  |  |  * 	iaoq0..iaoq1 | 
					
						
							|  |  |  |  * 	iasq0..iasq1 | 
					
						
							|  |  |  |  * 	cr11 (sar) | 
					
						
							|  |  |  |  * 	cr19 (iir) | 
					
						
							|  |  |  |  * 	cr20 (isr) | 
					
						
							|  |  |  |  * 	cr21 (ior) | 
					
						
							|  |  |  |  *  #	cr22 (ipsw) | 
					
						
							|  |  |  |  *  #	cr0 (recovery counter) | 
					
						
							|  |  |  |  *  #	cr24..cr31 (temporary registers) | 
					
						
							|  |  |  |  *  #	cr8,9,12,13 (protection IDs) | 
					
						
							|  |  |  |  *  #	cr10 (scr/ccr) | 
					
						
							|  |  |  |  *  #	cr15 (ext int enable mask) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ELF_CORE_COPY_REGS(dst, pt)	\
 | 
					
						
							|  |  |  | 	memset(dst, 0, sizeof(dst));	/* don't leak any "random" bits */ \ | 
					
						
							|  |  |  | 	memcpy(dst + 0, pt->gr, 32 * sizeof(elf_greg_t)); \ | 
					
						
							|  |  |  | 	memcpy(dst + 32, pt->sr, 8 * sizeof(elf_greg_t)); \ | 
					
						
							|  |  |  | 	memcpy(dst + 40, pt->iaoq, 2 * sizeof(elf_greg_t)); \ | 
					
						
							|  |  |  | 	memcpy(dst + 42, pt->iasq, 2 * sizeof(elf_greg_t)); \ | 
					
						
							|  |  |  | 	dst[44] = pt->sar;   dst[45] = pt->iir; \ | 
					
						
							|  |  |  | 	dst[46] = pt->isr;   dst[47] = pt->ior; \ | 
					
						
							|  |  |  | 	dst[48] = mfctl(22); dst[49] = mfctl(0); \ | 
					
						
							|  |  |  | 	dst[50] = mfctl(24); dst[51] = mfctl(25); \ | 
					
						
							|  |  |  | 	dst[52] = mfctl(26); dst[53] = mfctl(27); \ | 
					
						
							|  |  |  | 	dst[54] = mfctl(28); dst[55] = mfctl(29); \ | 
					
						
							|  |  |  | 	dst[56] = mfctl(30); dst[57] = mfctl(31); \ | 
					
						
							|  |  |  | 	dst[58] = mfctl( 8); dst[59] = mfctl( 9); \ | 
					
						
							|  |  |  | 	dst[60] = mfctl(12); dst[61] = mfctl(13); \ | 
					
						
							|  |  |  | 	dst[62] = mfctl(10); dst[63] = mfctl(15); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* ! ELF_CLASS */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ELF_NGREG 80	/* We only need 64 at present, but leave space
 | 
					
						
							|  |  |  | 			   for expansion. */ | 
					
						
							|  |  |  | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ELF_NFPREG 32
 | 
					
						
							|  |  |  | typedef double elf_fpreg_t; | 
					
						
							|  |  |  | typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct task_struct; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *); | 
					
						
							|  |  |  | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct pt_regs;	/* forward declaration... */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define elf_check_arch(x) ((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELF_CLASS)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * These are used to set parameters in the core dumps. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define ELF_DATA	ELFDATA2MSB
 | 
					
						
							|  |  |  | #define ELF_ARCH	EM_PARISC
 | 
					
						
							|  |  |  | #define ELF_OSABI 	ELFOSABI_LINUX
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* %r23 is set by ld.so to a pointer to a function which might be 
 | 
					
						
							| 
									
										
										
										
											2008-02-24 10:44:21 -08:00
										 |  |  |    registered using atexit.  This provides a means for the dynamic | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  |    linker to call DT_FINI functions for shared libraries that have | 
					
						
							|  |  |  |    been loaded before the code runs. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    So that we can use the same startup file with static executables, | 
					
						
							|  |  |  |    we start programs with a value of 0 to indicate that there is no | 
					
						
							|  |  |  |    such function.  */ | 
					
						
							|  |  |  | #define ELF_PLAT_INIT(_r, load_addr)       _r->gr[23] = 0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    (2 * TASK_SIZE / 3) turns into something undefined when run through a | 
					
						
							|  |  |  |    32 bit preprocessor and in some cases results in the kernel trying to map | 
					
						
							|  |  |  |    ld.so to the kernel virtual base. Use a sane value instead. /Jes  | 
					
						
							|  |  |  |   */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ELF_ET_DYN_BASE         (TASK_UNMAPPED_BASE + 0x01000000)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* This yields a mask that user programs can use to figure out what
 | 
					
						
							|  |  |  |    instruction set this CPU supports.  This could be done in user space, | 
					
						
							|  |  |  |    but it's not easy, and we've already done it here.  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ELF_HWCAP	0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |