All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chen Gang <gang.chen@asianux.com>
To: Michael Ellerman <michael@ellerman.id.au>
Cc: Michael Neuling <mikey@neuling.org>,
	"paulus@samba.org" <paulus@samba.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
	jovi.zhangwei@huawei.com
Subject: Re: [Suggestion] powerpc: xmon: about 'longjmp' related warning.
Date: Fri, 26 Jul 2013 12:11:15 +0800	[thread overview]
Message-ID: <51F1F6E3.7040502@asianux.com> (raw)
In-Reply-To: <51EF21FD.9020509@asianux.com>

On 07/24/2013 08:38 AM, Chen Gang wrote:
> On 07/23/2013 09:58 PM, Michael Ellerman wrote:
>> On Mon, Jul 22, 2013 at 03:02:53PM +0800, Chen Gang wrote:
>>> Hello Maintainers:
>>>
>>> With allmodconfig and EXTRA_CFLAGS=-W", it reports warnings below:
>>
>>>
>>> arch/powerpc/xmon/xmon.c:3027:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>> arch/powerpc/xmon/xmon.c:3068:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>
>> In both these cases we are inside the body of a for loop and we do a
>> if (setjmp) / else block. Although looking at the source the value of i
>> is not modified by the setjmp, I guess it's possible that the compiler
>> might reorder the increment of i inside the setjmp and loose the value
>> when we longjmp.
>>
> 
> I should continue to confirm the details based on your valuable
> information, thanks.
> 
> 


For stop_spus() and restart_spus(), at least now, the related warnings
are not issue: the variable 'i' is stored in stack "120(r1)".

The related warning:

  arch/powerpc/xmon/xmon.c:3027:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
  arch/powerpc/xmon/xmon.c:3068:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]

The related source code:

3024 static void stop_spus(void)
3025 {
3026         struct spu *spu;
3027         int i;
3028         u64 tmp;
3029 
3030         for (i = 0; i < XMON_NUM_SPUS; i++) { /* XMON_NUM_SPUS == 16 */
3031                 if (!spu_info[i].spu)
3032                         continue;
3033 
3034                 if (setjmp(bus_error_jmp) == 0) {
3035                         catch_memory_errors = 1;
3036                         sync();
3037 
3038                         spu = spu_info[i].spu;
3039 
3040                         spu_info[i].saved_spu_runcntl_RW =
3041                                 in_be32(&spu->problem->spu_runcntl_RW);
3042 
3043                         tmp = spu_mfc_sr1_get(spu);
3044                         spu_info[i].saved_mfc_sr1_RW = tmp;
3045 
3046                         tmp &= ~MFC_STATE1_MASTER_RUN_CONTROL_MASK;
3047                         spu_mfc_sr1_set(spu, tmp);
3048 
3049                         sync();
3050                         __delay(200);
3051 
3052                         spu_info[i].stopped_ok = 1;
3053 
3054                         printf("Stopped spu %.2d (was %s)\n", i,
3055                                         spu_info[i].saved_spu_runcntl_RW ?
3056                                         "running" : "stopped");
3057                 } else {
3058                         catch_memory_errors = 0;
3059                         printf("*** Error stopping spu %.2d\n", i);
3060                 }
3061                 catch_memory_errors = 0;
3062         }
3063 }
3064 



The related disassembly code:

  "make ARCH=powerpc EXTRA_CFLAGS=-W"
  "powerpc64-linux-gnu-objdump -d vmlinux.o > vmlinux.S"
  "gcc version 4.7.1 20120606 (Red Hat 4.7.1-0.1.20120606) (GCC)"
  "GNU objdump version 2.23.51.0.3-1.fc16 20120918"

c00000000007cfd0 <.stop_spus>:
/* { */
c00000000007cfd0:	7c 08 02 a6 	mflr    r0
c00000000007cfd4:	fb c1 ff f0 	std     r30,-16(r1)
c00000000007cfd8:	fb e1 ff f8 	std     r31,-8(r1)
c00000000007cfdc:	3d 22 00 0f 	addis   r9,r2,15
c00000000007cfe0:	39 29 3e 10 	addi    r9,r9,15888
c00000000007cfe4:	3d 02 ff d4 	addis   r8,r2,-44
c00000000007cfe8:	39 29 21 50 	addi    r9,r9,8528
c00000000007cfec:	3d 42 ff d4 	addis   r10,r2,-44
c00000000007cff0:	39 08 83 f8 	addi    r8,r8,-31752
c00000000007cff4:	39 4a 83 d8 	addi    r10,r10,-31784
c00000000007cff8:	f8 01 00 10 	std     r0,16(r1)
c00000000007cffc:	f8 21 ff 51 	stdu    r1,-176(r1)
c00000000007d000:	f9 21 00 70 	std     r9,112(r1)
c00000000007d004:	39 20 00 00 	li      r9,0
c00000000007d008:	f9 21 00 78 	std     r9,120(r1)	; i = 0;
c00000000007d00c:	f9 01 00 88 	std     r8,136(r1)
c00000000007d010:	f9 41 00 90 	std     r10,144(r1)
c00000000007d014:	48 00 01 28 	b       c00000000007d13c <.stop_spus+0x16c>
c00000000007d018:	60 00 00 00 	nop
c00000000007d01c:	60 00 00 00 	nop


/*	 	if (setjmp(bus_error_jmp) == 0) { */
c00000000007d020:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d024:	39 40 00 01 	li      r10,1
c00000000007d028:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d02c:	91 49 20 c0 	stw     r10,8384(r9)
c00000000007d030:	7c 00 04 ac 	sync    
c00000000007d034:	4c 00 01 2c 	isync
c00000000007d038:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d03c:	eb e8 00 00 	ld      r31,0(r8)
c00000000007d040:	e9 3f 00 20 	ld      r9,32(r31)
c00000000007d044:	7c 00 04 ac 	sync    
c00000000007d048:	81 29 40 1c 	lwz     r9,16412(r9)
c00000000007d04c:	0c 09 00 00 	twi     0,r9,0
c00000000007d050:	4c 00 01 2c 	isync
c00000000007d054:	91 28 00 10 	stw     r9,16(r8)
c00000000007d058:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d05c:	3b c9 f5 e8 	addi    r30,r9,-2584
c00000000007d060:	7f e3 fb 78 	mr      r3,r31
c00000000007d064:	e9 3e 00 00 	ld      r9,0(r30)
c00000000007d068:	e9 29 00 60 	ld      r9,96(r9)
c00000000007d06c:	e9 49 00 00 	ld      r10,0(r9)
c00000000007d070:	f8 41 00 28 	std     r2,40(r1)
c00000000007d074:	7d 49 03 a6 	mtctr   r10
c00000000007d078:	e8 49 00 08 	ld      r2,8(r9)
c00000000007d07c:	4e 80 04 21 	bctrl
c00000000007d080:	e8 41 00 28 	ld      r2,40(r1)
c00000000007d084:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d088:	e9 3e 00 00 	ld      r9,0(r30)
c00000000007d08c:	f8 68 00 08 	std     r3,8(r8)
c00000000007d090:	7c 64 1b 78 	mr      r4,r3
c00000000007d094:	78 84 d0 42 	rldicl  r4,r4,58,1
c00000000007d098:	7f e3 fb 78 	mr      r3,r31
c00000000007d09c:	78 84 30 00 	rotldi  r4,r4,6
c00000000007d0a0:	e9 29 00 58 	ld      r9,88(r9)
c00000000007d0a4:	e9 49 00 00 	ld      r10,0(r9)
c00000000007d0a8:	f8 41 00 28 	std     r2,40(r1)
c00000000007d0ac:	7d 49 03 a6 	mtctr   r10
c00000000007d0b0:	e8 49 00 08 	ld      r2,8(r9)
c00000000007d0b4:	4e 80 04 21 	bctrl
c00000000007d0b8:	e8 41 00 28 	ld      r2,40(r1)
c00000000007d0bc:	7c 00 04 ac 	sync    
c00000000007d0c0:	4c 00 01 2c 	isync
c00000000007d0c4:	38 60 00 c8 	li      r3,200
c00000000007d0c8:	4b fa 01 e9 	bl      c00000000001d2b0 <.__delay>	; __delay(200)
c00000000007d0cc:	60 00 00 00 	nop
c00000000007d0d0:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d0d4:	39 40 00 01 	li      r10,1
c00000000007d0d8:	81 28 00 10 	lwz     r9,16(r8)
c00000000007d0dc:	99 48 00 20 	stb     r10,32(r8)
c00000000007d0e0:	3d 02 ff d4 	addis   r8,r2,-44
c00000000007d0e4:	38 a8 83 c8 	addi    r5,r8,-31800
c00000000007d0e8:	2f 89 00 00 	cmpwi   cr7,r9,0
c00000000007d0ec:	40 9e 00 0c 	bne-    cr7,c00000000007d0f8 <.stop_spus+0x128>
c00000000007d0f0:	3d 22 ff d4 	addis   r9,r2,-44
c00000000007d0f4:	38 a9 83 d0 	addi    r5,r9,-31792
c00000000007d0f8:	e8 61 00 90 	ld      r3,144(r1)
c00000000007d0fc:	e8 81 00 78 	ld      r4,120(r1)		; 120(r1) = i
c00000000007d100:	48 00 67 41 	bl      c000000000083840 <.xmon_printf>
c00000000007d104:	60 00 00 00 	nop


/* 		catch_memory_errors = 0; */
c00000000007d108:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d10c:	39 40 00 00 	li      r10,0
c00000000007d110:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d114:	91 49 20 c0 	stw     r10,8384(r9)


/* 	for (i = 0; i < XMON_NUM_SPUS; i++) { */
c00000000007d118:	e9 01 00 78 	ld      r8,120(r1)		; 120(r1) = i;
c00000000007d11c:	39 28 00 01 	addi    r9,r8,1			; i++
c00000000007d120:	2f 89 00 10 	cmpwi   cr7,r9,16		; i < XMON_NUM_SPUS
c00000000007d124:	7d 29 07 b4 	extsw   r9,r9
c00000000007d128:	f9 21 00 78 	std     r9,120(r1)		; 120(r1) = i;
c00000000007d12c:	e9 21 00 70 	ld      r9,112(r1)		;
c00000000007d130:	39 29 00 28 	addi    r9,r9,40		; 112(r1) =  [i] for spu_info;
c00000000007d134:	f9 21 00 70 	std     r9,112(r1)		;
c00000000007d138:	41 9e 00 58 	beq-    cr7,c00000000007d190 <.stop_spus+0x1c0>

/* 		if (!spu_info[i].spu) */
/*			continue; */
c00000000007d13c:	e9 01 00 70 	ld      r8,112(r1)
c00000000007d140:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d144:	38 6a 5e 18 	addi    r3,r10,24088
c00000000007d148:	e9 28 00 00 	ld      r9,0(r8)
c00000000007d14c:	f9 01 00 80 	std     r8,128(r1)
c00000000007d150:	2f a9 00 00 	cmpdi   cr7,r9,0				
c00000000007d154:	41 9e ff c4 	beq+    cr7,c00000000007d118 <.stop_spus+0x148>

/* 		if (setjmp(bus_error_jmp) == 0) { */
c00000000007d158:	4b fa 44 99 	bl      c0000000000215f0 <.setjmp>
c00000000007d15c:	60 00 00 00 	nop
c00000000007d160:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000007d164:	e8 81 00 78 	ld      r4,120(r1)	; 120(r1) = i for 2nd param of printf in exception processing after setjmp.
c00000000007d168:	e8 61 00 88 	ld      r3,136(r1)
c00000000007d16c:	41 9e fe b4 	beq+    cr7,c00000000007d020 <.stop_spus+0x50>

/* 		} else { */
c00000000007d170:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d174:	39 00 00 00 	li      r8,0
c00000000007d178:	39 4a 3e 10 	addi    r10,r10,15888
c00000000007d17c:	91 0a 20 c0 	stw     r8,8384(r10)				/* catch_memory_errors = 0; */
c00000000007d180:	48 00 66 c1 	bl      c000000000083840 <.xmon_printf>		/* called with correct i */
c00000000007d184:	60 00 00 00 	nop
c00000000007d188:	4b ff ff 80 	b       c00000000007d108 <.stop_spus+0x138>
c00000000007d18c:	60 00 00 00 	nop
/*	 } */

c00000000007d190:	38 21 00 b0 	addi    r1,r1,176
c00000000007d194:	e8 01 00 10 	ld      r0,16(r1)
c00000000007d198:	eb c1 ff f0 	ld      r30,-16(r1)
c00000000007d19c:	eb e1 ff f8 	ld      r31,-8(r1)
c00000000007d1a0:	7c 08 03 a6 	mtlr    r0
c00000000007d1a4:	4e 80 00 20 	blr
c00000000007d1a8:	60 00 00 00 	nop
c00000000007d1ac:	60 00 00 00 	nop
/* } */


The related assembly code (they really save and restore 'r1'):

_GLOBAL(setjmp)
        mflr    r0
        PPC_STL r0,0(r3)
        PPC_STL r1,SZL(r3)
        PPC_STL r2,2*SZL(r3)
        mfcr    r0
        PPC_STL r0,3*SZL(r3)
        PPC_STL r13,4*SZL(r3)
        PPC_STL r14,5*SZL(r3)
        PPC_STL r15,6*SZL(r3)
        PPC_STL r16,7*SZL(r3)
        PPC_STL r17,8*SZL(r3)
        PPC_STL r18,9*SZL(r3)
        PPC_STL r19,10*SZL(r3)
        PPC_STL r20,11*SZL(r3)
        PPC_STL r21,12*SZL(r3)
        PPC_STL r22,13*SZL(r3)
        PPC_STL r23,14*SZL(r3)
        PPC_STL r24,15*SZL(r3)
        PPC_STL r25,16*SZL(r3)
        PPC_STL r26,17*SZL(r3)
        PPC_STL r27,18*SZL(r3)
        PPC_STL r28,19*SZL(r3)
        PPC_STL r29,20*SZL(r3)
        PPC_STL r30,21*SZL(r3)
        PPC_STL r31,22*SZL(r3)
        li      r3,0
        blr

_GLOBAL(longjmp)
        PPC_LCMPI r4,0
        bne     1f
        li      r4,1
1:      PPC_LL  r13,4*SZL(r3)
        PPC_LL  r14,5*SZL(r3)
        PPC_LL  r15,6*SZL(r3)
        PPC_LL  r16,7*SZL(r3)
        PPC_LL  r17,8*SZL(r3)
        PPC_LL  r18,9*SZL(r3)
        PPC_LL  r19,10*SZL(r3)
        PPC_LL  r20,11*SZL(r3)
        PPC_LL  r21,12*SZL(r3)
        PPC_LL  r22,13*SZL(r3)
        PPC_LL  r23,14*SZL(r3)
        PPC_LL  r24,15*SZL(r3)
        PPC_LL  r25,16*SZL(r3)
        PPC_LL  r26,17*SZL(r3)
        PPC_LL  r27,18*SZL(r3)
        PPC_LL  r28,19*SZL(r3)
        PPC_LL  r29,20*SZL(r3)
        PPC_LL  r30,21*SZL(r3)
        PPC_LL  r31,22*SZL(r3)
        PPC_LL  r0,3*SZL(r3)
        mtcrf   0x38,r0
        PPC_LL  r0,0(r3)
        PPC_LL  r1,SZL(r3)
        PPC_LL  r2,2*SZL(r3)
        mtlr    r0
        mr      r3,r4
        blr




The same to resetart_spus()


3065 static void restart_spus(void)
3066 {
3067         struct spu *spu;
3068         int i;
3069 
3070         for (i = 0; i < XMON_NUM_SPUS; i++) {
3071                 if (!spu_info[i].spu)
3072                         continue;
3073 
3074                 if (!spu_info[i].stopped_ok) {
3075                         printf("*** Error, spu %d was not successfully stopped"
3076                                         ", not restarting\n", i);
3077                         continue;
3078                 }
3079 
3080                 if (setjmp(bus_error_jmp) == 0) {
3081                         catch_memory_errors = 1;
3082                         sync();
3083 
3084                         spu = spu_info[i].spu;
3085                         spu_mfc_sr1_set(spu, spu_info[i].saved_mfc_sr1_RW);
3086                         out_be32(&spu->problem->spu_runcntl_RW,
3087                                         spu_info[i].saved_spu_runcntl_RW);
3088 
3089                         sync();
3090                         __delay(200);
3091 
3092                         printf("Restarted spu %.2d\n", i);
3093                 } else {
3094                         catch_memory_errors = 0;
3095                         printf("*** Error restarting spu %.2d\n", i);
3096                 }
3097                 catch_memory_errors = 0;
3098         }
3099 }
3100 

c00000000007d1b0 <.restart_spus>:
/* { */
c00000000007d1b0:	7c 08 02 a6 	mflr    r0
c00000000007d1b4:	fb e1 ff f8 	std     r31,-8(r1)
c00000000007d1b8:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d1bc:	3c e2 ff d4 	addis   r7,r2,-44
c00000000007d1c0:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d1c4:	3d 02 ff d4 	addis   r8,r2,-44
c00000000007d1c8:	39 29 21 50 	addi    r9,r9,8528
c00000000007d1cc:	3d 42 ff d4 	addis   r10,r2,-44
c00000000007d1d0:	38 e7 84 70 	addi    r7,r7,-31632
c00000000007d1d4:	39 08 84 58 	addi    r8,r8,-31656
c00000000007d1d8:	f8 01 00 10 	std     r0,16(r1)
c00000000007d1dc:	39 4a 84 18 	addi    r10,r10,-31720
c00000000007d1e0:	f8 21 ff 51 	stdu    r1,-176(r1)
c00000000007d1e4:	f9 21 00 70 	std     r9,112(r1)
c00000000007d1e8:	39 20 00 00 	li      r9,0
c00000000007d1ec:	f9 21 00 78 	std     r9,120(r1)		; i = 0;
c00000000007d1f0:	f8 e1 00 88 	std     r7,136(r1)
c00000000007d1f4:	f9 01 00 98 	std     r8,152(r1)
c00000000007d1f8:	f9 41 00 90 	std     r10,144(r1)
c00000000007d1fc:	48 00 00 34 	b       c00000000007d230 <.restart_spus+0x80>

/*		if (!spu_info[i].stopped_ok) { */
/*			printf(....); */
/*			continue; */
c00000000007d200:	e8 61 00 90 	ld      r3,144(r1)
c00000000007d204:	48 00 66 3d 	bl      c000000000083840 <.xmon_printf>
c00000000007d208:	60 00 00 00 	nop

/*	for (i = 0; i < XMON_NUM_SPUS; i++) { */
c00000000007d20c:	e9 01 00 78 	ld      r8,120(r1)
c00000000007d210:	39 28 00 01 	addi    r9,r8,1		; i++
c00000000007d214:	2f 89 00 10 	cmpwi   cr7,r9,16	; i < XMON_NUM_SPUS
c00000000007d218:	7d 29 07 b4 	extsw   r9,r9
c00000000007d21c:	f9 21 00 78 	std     r9,120(r1)
c00000000007d220:	e9 21 00 70 	ld      r9,112(r1)
c00000000007d224:	39 29 00 28 	addi    r9,r9,40
c00000000007d228:	f9 21 00 70 	std     r9,112(r1)
c00000000007d22c:	41 9e 01 0c 	beq-    cr7,c00000000007d338 <.restart_spus+0x188>

/*		if (!spu_info[i].spu) */
/*			continue; */
c00000000007d230:	e9 01 00 70 	ld      r8,112(r1)
c00000000007d234:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d238:	e8 81 00 78 	ld      r4,120(r1) 	; i as 2nd parameter for xmon_printf().
c00000000007d23c:	38 6a 5e 18 	addi    r3,r10,24088
c00000000007d240:	e9 28 00 00 	ld      r9,0(r8)
c00000000007d244:	f9 01 00 80 	std     r8,128(r1)
c00000000007d248:	2f a9 00 00 	cmpdi   cr7,r9,0
c00000000007d24c:	41 9e ff c0 	beq+    cr7,c00000000007d20c <.restart_spus+0x5c>

/*		if (!spu_info[i].stopped_ok) { */
c00000000007d250:	89 28 00 20 	lbz     r9,32(r8)
c00000000007d254:	2f 89 00 00 	cmpwi   cr7,r9,0
c00000000007d258:	41 9e ff a8 	beq+    cr7,c00000000007d200 <.restart_spus+0x50>
/*		} */

/*		if (setjmp(bus_error_jmp) == 0) { */
c00000000007d25c:	4b fa 43 95 	bl      c0000000000215f0 <.setjmp>
c00000000007d260:	60 00 00 00 	nop
c00000000007d264:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000007d268:	e8 81 00 78 	ld      r4,120(r1)	; i as 2nd parameter for xmon_printf() after setjmp().
c00000000007d26c:	e8 61 00 88 	ld      r3,136(r1)
c00000000007d270:	40 9e 00 e0 	bne-    cr7,c00000000007d350 <.restart_spus+0x1a0>

c00000000007d274:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d278:	39 40 00 01 	li      r10,1
c00000000007d27c:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d280:	91 49 20 c0 	stw     r10,8384(r9)
c00000000007d284:	7c 00 04 ac 	sync    
c00000000007d288:	4c 00 01 2c 	isync
c00000000007d28c:	3d 02 00 0f 	addis   r8,r2,15
c00000000007d290:	e9 41 00 80 	ld      r10,128(r1)
c00000000007d294:	39 28 f5 e8 	addi    r9,r8,-2584
c00000000007d298:	eb ea 00 00 	ld      r31,0(r10)
c00000000007d29c:	e8 8a 00 08 	ld      r4,8(r10)
c00000000007d2a0:	e9 29 00 00 	ld      r9,0(r9)
c00000000007d2a4:	7f e3 fb 78 	mr      r3,r31
c00000000007d2a8:	e9 29 00 58 	ld      r9,88(r9)
c00000000007d2ac:	e9 49 00 00 	ld      r10,0(r9)
c00000000007d2b0:	f8 41 00 28 	std     r2,40(r1)
c00000000007d2b4:	7d 49 03 a6 	mtctr   r10
c00000000007d2b8:	e8 49 00 08 	ld      r2,8(r9)
c00000000007d2bc:	4e 80 04 21 	bctrl
c00000000007d2c0:	e8 41 00 28 	ld      r2,40(r1)
c00000000007d2c4:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d2c8:	e9 3f 00 20 	ld      r9,32(r31)
c00000000007d2cc:	81 48 00 10 	lwz     r10,16(r8)
c00000000007d2d0:	7c 00 04 ac 	sync    
c00000000007d2d4:	91 49 40 1c 	stw     r10,16412(r9)
c00000000007d2d8:	39 20 00 01 	li      r9,1
c00000000007d2dc:	99 2d 02 74 	stb     r9,628(r13)
c00000000007d2e0:	7c 00 04 ac 	sync    
c00000000007d2e4:	4c 00 01 2c 	isync
c00000000007d2e8:	38 60 00 c8 	li      r3,200
c00000000007d2ec:	4b f9 ff c5 	bl      c00000000001d2b0 <.__delay>
c00000000007d2f0:	60 00 00 00 	nop
c00000000007d2f4:	e8 61 00 98 	ld      r3,152(r1)
c00000000007d2f8:	e8 81 00 78 	ld      r4,120(r1)
c00000000007d2fc:	48 00 65 45 	bl      c000000000083840 <.xmon_printf>
c00000000007d300:	60 00 00 00 	nop
/*		} */

/*	for (i = 0; i < XMON_NUM_SPUS; i++) { */
c00000000007d304:	e9 01 00 78 	ld      r8,120(r1)
c00000000007d308:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d30c:	39 40 00 00 	li      r10,0
c00000000007d310:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d314:	91 49 20 c0 	stw     r10,8384(r9)		; catch_memory_errors = 0;
c00000000007d318:	39 28 00 01 	addi    r9,r8,1
c00000000007d31c:	2f 89 00 10 	cmpwi   cr7,r9,16		; i < XMON_NUM_SPUS
c00000000007d320:	7d 29 07 b4 	extsw   r9,r9
c00000000007d324:	f9 21 00 78 	std     r9,120(r1)		; i++;
c00000000007d328:	e9 21 00 70 	ld      r9,112(r1)
c00000000007d32c:	39 29 00 28 	addi    r9,r9,40		; [i] for spu_info
c00000000007d330:	f9 21 00 70 	std     r9,112(r1)
c00000000007d334:	40 9e fe fc 	bne+    cr7,c00000000007d230 <.restart_spus+0x80>

/* 	} */
c00000000007d338:	38 21 00 b0 	addi    r1,r1,176
c00000000007d33c:	e8 01 00 10 	ld      r0,16(r1)
c00000000007d340:	eb e1 ff f8 	ld      r31,-8(r1)
c00000000007d344:	7c 08 03 a6 	mtlr    r0
c00000000007d348:	4e 80 00 20 	blr
c00000000007d34c:	60 00 00 00 	nop
/* } */

/*		} else { */
c00000000007d350:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d354:	39 00 00 00 	li      r8,0
c00000000007d358:	39 4a 3e 10 	addi    r10,r10,15888
c00000000007d35c:	91 0a 20 c0 	stw     r8,8384(r10)		; catch_memory_errors = 0;
c00000000007d360:	48 00 64 e1 	bl      c000000000083840 <.xmon_printf>
c00000000007d364:	60 00 00 00 	nop
c00000000007d368:	4b ff ff 9c 	b       c00000000007d304 <.restart_spus+0x154>
c00000000007d36c:	60 00 00 00 	nop



>>> arch/powerpc/xmon/xmon.c:352:48: warning: argument ‘fromipi’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>
>> This one I can't see, but I assume it's a similar case.
>>
> 
> OK, I should continue for it.
> 
> 
>>> Excuse me, I am not quite sure about it whether can cause issue or not.
>>
>> I've never seen it get stuck in those loops or anything, but I guess
>> it's possible.
>>
> 
> OK, I should make the confirmation.
> 
>> The first thing to do would be to analyse the generated assembler code
>> to determine if there really is any possiblity of the value being
>> clobbered, or if it's just a theoretical bug.
>>
> 
> Thank you for your valuable information again.
> 
> Excuse me, I have to do another things within this month, so I should
> provide the confirmation within next month (2013-08-31), is it OK (no
> reply means OK).
> 
> Welcome any suggestions or completions.
> 
> 
> Thanks.
> 


-- 
Chen Gang

  reply	other threads:[~2013-07-26  4:12 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-22  7:02 [Suggestion] powerpc: xmon: about 'longjmp' related warning Chen Gang
2013-07-23 13:58 ` Michael Ellerman
2013-07-24  0:38   ` Chen Gang
2013-07-26  4:11     ` Chen Gang [this message]
2013-07-26 11:45       ` Chen Gang
2013-07-26 11:47         ` Chen Gang
2013-07-26 11:55         ` Chen Gang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51F1F6E3.7040502@asianux.com \
    --to=gang.chen@asianux.com \
    --cc=akpm@linux-foundation.org \
    --cc=jovi.zhangwei@huawei.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=michael@ellerman.id.au \
    --cc=mikey@neuling.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.