Fix off-by-one unwinding error.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4570 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									8bba5c81b1
								
							
						
					
					
						commit
						9b7b85d260
					
				| @ -287,4 +287,16 @@ extern int __op_jmp0, __op_jmp1, __op_jmp2, __op_jmp3; | ||||
| #error unsupported CPU | ||||
| #endif | ||||
| 
 | ||||
| /* The return address may point to the start of the next instruction.
 | ||||
|    Subtracting one gets us the call instruction itself.  */ | ||||
| #if defined(__s390__) | ||||
| # define GETPC() ((void*)(((unsigned long)__builtin_return_address(0) & 0x7fffffffUL) - 1)) | ||||
| #elif defined(__arm__) | ||||
| /* Thumb return addresses have the low bit set, so we need to subtract two.
 | ||||
|    This is still safe in ARM mode because instructions are 4 bytes.  */ | ||||
| # define GETPC() ((void *)((unsigned long)__builtin_return_address(0) - 2)) | ||||
| #else | ||||
| # define GETPC() ((void *)((unsigned long)__builtin_return_address(0) - 1)) | ||||
| #endif | ||||
| 
 | ||||
| #endif /* !defined(__DYNGEN_EXEC_H__) */ | ||||
|  | ||||
| @ -1093,12 +1093,6 @@ void helper_reset_FT2 (void) | ||||
| /* Softmmu support */ | ||||
| #if !defined (CONFIG_USER_ONLY) | ||||
| 
 | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| /* XXX: the two following helpers are pure hacks.
 | ||||
|  *      Hopefully, we emulate the PALcode, then we should never see | ||||
|  *      HW_LD / HW_ST instructions. | ||||
|  | ||||
| @ -68,11 +68,6 @@ uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, | ||||
| #if !defined(CONFIG_USER_ONLY) | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "softmmu_template.h" | ||||
|  | ||||
| @ -24,11 +24,6 @@ | ||||
| #include "mmu.h" | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "softmmu_template.h" | ||||
|  | ||||
| @ -4663,11 +4663,6 @@ static float approx_rcp(float a) | ||||
| #if !defined(CONFIG_USER_ONLY) | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "softmmu_template.h" | ||||
|  | ||||
| @ -32,11 +32,6 @@ void do_interrupt(int is_hw) | ||||
| extern int semihosting_enabled; | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "softmmu_template.h" | ||||
|  | ||||
| @ -22,12 +22,6 @@ | ||||
| 
 | ||||
| #include "host-utils.h" | ||||
| 
 | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| /*****************************************************************************/ | ||||
| /* Exceptions processing helpers */ | ||||
| 
 | ||||
|  | ||||
| @ -2612,11 +2612,6 @@ DO_SPE_OP1(fsctuf); | ||||
| #if !defined (CONFIG_USER_ONLY) | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "softmmu_template.h" | ||||
|  | ||||
| @ -28,11 +28,6 @@ void do_raise_exception(void) | ||||
| #ifndef CONFIG_USER_ONLY | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "softmmu_template.h" | ||||
|  | ||||
| @ -2871,12 +2871,6 @@ static void do_unaligned_access(target_ulong addr, int is_write, int is_user, | ||||
| 
 | ||||
| #define MMUSUFFIX _mmu | ||||
| #define ALIGNED_ONLY | ||||
| #ifdef __s390__ | ||||
| # define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & \ | ||||
|                           0x7fffffffUL)) | ||||
| #else | ||||
| # define GETPC() (__builtin_return_address(0)) | ||||
| #endif | ||||
| 
 | ||||
| #define SHIFT 0 | ||||
| #include "softmmu_template.h" | ||||
|  | ||||
| @ -1180,7 +1180,6 @@ static inline void tcg_out_qemu_st(TCGContext *s, int cond, | ||||
| 
 | ||||
|     tcg_out_bl(s, cond, (tcg_target_long) qemu_st_helpers[s_bits] - | ||||
|                     (tcg_target_long) s->code_ptr); | ||||
| 
 | ||||
| # if TARGET_LONG_BITS == 64 | ||||
|     if (opc == 3) | ||||
|         tcg_out_dat_imm(s, cond, ARITH_ADD, 13, 13, 0x10); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 pbrook
						pbrook