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
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to