| The Android Open Source Project | a27d2ba | 2008-10-21 07:00:00 -0700 | [diff] [blame^] | 1 | /*	$OpenBSD: setjmp.h,v 1.1 2004/02/01 05:09:49 drahn Exp $	*/ | 
 | 2 | /*	$NetBSD: setjmp.h,v 1.2 2001/08/25 14:45:59 bjh21 Exp $	*/ | 
 | 3 |  | 
 | 4 | /* | 
 | 5 |  * machine/setjmp.h: machine dependent setjmp-related information. | 
 | 6 |  */ | 
 | 7 |  | 
 | 8 | #ifdef __ELF__ | 
 | 9 | #define	_JBLEN	64		/* size, in longs, of a jmp_buf */ | 
 | 10 | #else | 
 | 11 | #define	_JBLEN	29		/* size, in longs, of a jmp_buf */ | 
 | 12 | #endif | 
 | 13 |  | 
 | 14 | /* | 
 | 15 |  * NOTE: The internal structure of a jmp_buf is *PRIVATE* | 
 | 16 |  *       This information is provided as there is software | 
 | 17 |  *       that fiddles with this with obtain the stack pointer | 
 | 18 |  *	 (yes really ! and its commercial !). | 
 | 19 |  * | 
 | 20 |  * Description of the setjmp buffer | 
 | 21 |  * | 
 | 22 |  * word  0	magic number	(dependant on creator) | 
 | 23 |  *       1 -  3	f4		fp register 4 | 
 | 24 |  *	 4 -  6	f5		fp register 5 | 
 | 25 |  *	 7 -  9 f6		fp register 6 | 
 | 26 |  *	10 - 12	f7		fp register 7 | 
 | 27 |  *	13	fpsr		fp status register | 
 | 28 |  *	14	r4		register 4 | 
 | 29 |  *	15	r5		register 5 | 
 | 30 |  *	16	r6		register 6 | 
 | 31 |  *	17	r7		register 7 | 
 | 32 |  *	18	r8		register 8 | 
 | 33 |  *	19	r9		register 9 | 
 | 34 |  *	20	r10		register 10 (sl) | 
 | 35 |  *	21	r11		register 11 (fp) | 
 | 36 |  *	22	r12		register 12 (ip) | 
 | 37 |  *	23	r13		register 13 (sp) | 
 | 38 |  *	24	r14		register 14 (lr) | 
 | 39 |  *	25	signal mask	(dependant on magic) | 
 | 40 |  *	26	(con't) | 
 | 41 |  *	27	(con't) | 
 | 42 |  *	28	(con't) | 
 | 43 |  * | 
 | 44 |  * The magic number number identifies the jmp_buf and | 
 | 45 |  * how the buffer was created as well as providing | 
 | 46 |  * a sanity check | 
 | 47 |  * | 
 | 48 |  * A side note I should mention - Please do not tamper | 
 | 49 |  * with the floating point fields. While they are | 
 | 50 |  * always saved and restored at the moment this cannot | 
 | 51 |  * be garenteed especially if the compiler happens | 
 | 52 |  * to be generating soft-float code so no fp | 
 | 53 |  * registers will be used. | 
 | 54 |  * | 
 | 55 |  * Whilst this can be seen an encouraging people to | 
 | 56 |  * use the setjmp buffer in this way I think that it | 
 | 57 |  * is for the best then if changes occur compiles will | 
 | 58 |  * break rather than just having new builds falling over | 
 | 59 |  * mysteriously. | 
 | 60 |  */ | 
 | 61 |  | 
 | 62 | #define _JB_MAGIC__SETJMP	0x4278f500 | 
 | 63 | #define _JB_MAGIC_SETJMP	0x4278f501 | 
 | 64 |  | 
 | 65 | /* Valid for all jmp_buf's */ | 
 | 66 |  | 
 | 67 | #define _JB_MAGIC		 0 | 
 | 68 | #define _JB_REG_F4		 1 | 
 | 69 | #define _JB_REG_F5		 4 | 
 | 70 | #define _JB_REG_F6		 7 | 
 | 71 | #define _JB_REG_F7		10 | 
 | 72 | #define _JB_REG_FPSR		13 | 
 | 73 | #define _JB_REG_R4		14 | 
 | 74 | #define _JB_REG_R5		15 | 
 | 75 | #define _JB_REG_R6		16 | 
 | 76 | #define _JB_REG_R7		17 | 
 | 77 | #define _JB_REG_R8		18 | 
 | 78 | #define _JB_REG_R9		19 | 
 | 79 | #define _JB_REG_R10		20 | 
 | 80 | #define _JB_REG_R11		21 | 
 | 81 | #define _JB_REG_R12		22 | 
 | 82 | #define _JB_REG_R13		23 | 
 | 83 | #define _JB_REG_R14		24 | 
 | 84 |  | 
 | 85 | /* Only valid with the _JB_MAGIC_SETJMP magic */ | 
 | 86 |  | 
 | 87 | #define _JB_SIGMASK		25 |