[Suggestion] powerpc: xmon: about 'longjmp' related warning.
Chen Gang
gang.chen at asianux.com
Fri Jul 26 14:11:15 EST 2013
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
More information about the Linuxppc-dev
mailing list