[PATCH] processes stuck forever in __do_get_xsec
Olaf Hering
olh at suse.de
Sat Feb 25 21:27:31 EST 2006
64bit processes loop forever in __do_get_xsec, r8 is loaded, but r4 is compared.
Also, gdb doesnt understand __do_get_xsec and __get_datapage.
No idea if my change is correct.
(gdb) info registers
r0 0x1 1
r1 0xfffff8587c0 17592178018240
r2 0x40000661448 4398053200968
r3 0x102000 1056768
r4 0x4400116315df5 1196273318321653
r5 0x14cb69f61f48246 93650487927407174
r6 0x4400116315df2 1196273318321650
r7 0x3 3
r8 0x3644 13892
r9 0x4ae52fab6fd92 1317571323690386
r10 0x0 0
r11 0xfffff8588b0 17592178018480
r12 0x40000599648 4398052382280
r13 0x400000321c0 4398046716352
r14 0xfffff85c644 17592178034244
r15 0x400000c0de8 4398047301096
r16 0x67 103
r17 0x23 35
r18 0x338 824
r19 0x0 0
r20 0x4 4
r21 0x1017b350 269988688
r22 0x102604c0 270927040
r23 0xfffff858950 17592178018640
r24 0x101f35a0 270480800
r25 0x40000249598 4398048908696
r26 0xfffff85c5d0 17592178034128
r27 0x0 0
r28 0x40000223928 4398048753960
r29 0x35ac5 219845
r30 0x0 0
r31 0xfffff8588b0 17592178018480
pc 0x1005f4 1050100
cr 0x48022224 1208099364
lr 0x100464 1049700
ctr 0x100450 1049680
xer 0x0 0
(gdb) bt
#0 0x00000000001005f4 in __kernel_clock_getres ()
#1 0x0000000000100464 in __kernel_gettimeofday ()
#2 0x0000040000599648 in .__gettimeofday_internal () from /lib64/power5/libc.so.6
#3 0x00000400002acef4 in .rpmswNow () from /usr/lib64/librpmio-4.4.so
#4 0x00000400002acf74 in .rpmswExit () from /usr/lib64/librpmio-4.4.so
#5 0x000004000014f244 in .rpmdbAdd () from /usr/lib64/librpmdb-4.4.so
#6 0x0000040000072f80 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so
#7 0x0000040000074254 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so
#8 0x00000400000739ec in .rpmpsmStage () from /usr/lib64/librpm-4.4.so
#9 0x0000040000074254 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so
#10 0x00000400000732d8 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so
#11 0x000004000009fed4 in .rpmtsRun () from /usr/lib64/librpm-4.4.so
#12 0x0000040000089208 in .rpmInstall () from /usr/lib64/librpm-4.4.so
#13 0x0000000010004f30 in ?? ()
#14 0x220004224d502053 in ?? ()
#15 0x000004000003d010 in ?? () from /usr/lib64/librpm-4.4.so
#16 0x0000000000000000 in ?? ()
(gdb) disassemble __kernel_gettimeofday
Dump of assembler code for function __kernel_gettimeofday:
0x0000000000100450 <__kernel_gettimeofday+0>: mflr r12
0x0000000000100454 <__kernel_gettimeofday+4>: mr r11,r3
0x0000000000100458 <__kernel_gettimeofday+8>: mr r10,r4
0x000000000010045c <__kernel_gettimeofday+12>: bl 0x10063c <__kernel_clock_getres+136>
0x0000000000100460 <__kernel_gettimeofday+16>: bl 0x1005f4 <__kernel_clock_getres+64>
0x0000000000100464 <__kernel_gettimeofday+20>: lis r7,15
0x0000000000100468 <__kernel_gettimeofday+24>: ori r7,r7,16960
0x000000000010046c <__kernel_gettimeofday+28>: rldicl r5,r4,44,20
0x0000000000100470 <__kernel_gettimeofday+32>: rldicr r6,r5,20,43
0x0000000000100474 <__kernel_gettimeofday+36>: std r5,0(r11)
0x0000000000100478 <__kernel_gettimeofday+40>: subf r0,r6,r4
0x000000000010047c <__kernel_gettimeofday+44>: mulld r0,r0,r7
0x0000000000100480 <__kernel_gettimeofday+48>: rldicl r0,r0,44,20
0x0000000000100484 <__kernel_gettimeofday+52>: cmpldi r10,0
0x0000000000100488 <__kernel_gettimeofday+56>: std r0,8(r11)
0x000000000010048c <__kernel_gettimeofday+60>: beq- 0x1004a0 <__kernel_gettimeofday+80>
0x0000000000100490 <__kernel_gettimeofday+64>: lwz r4,88(r3)
0x0000000000100494 <__kernel_gettimeofday+68>: lwz r5,92(r3)
0x0000000000100498 <__kernel_gettimeofday+72>: stw r4,0(r10)
0x000000000010049c <__kernel_gettimeofday+76>: stw r5,4(r10)
0x00000000001004a0 <__kernel_gettimeofday+80>: mtlr r12
0x00000000001004a4 <__kernel_gettimeofday+84>: crclr so
0x00000000001004a8 <__kernel_gettimeofday+88>: li r3,0
0x00000000001004ac <__kernel_gettimeofday+92>: blr
(gdb) disassemble __kernel_clock_getres
Dump of assembler code for function __kernel_clock_getres:
0x00000000001005b4 <__kernel_clock_getres+0>: cmpwi r3,0
0x00000000001005b8 <__kernel_clock_getres+4>: cmpwi cr1,r3,1
0x00000000001005bc <__kernel_clock_getres+8>: cror eq,eq,4*cr1+eq
0x00000000001005c0 <__kernel_clock_getres+12>: bne- 0x1005e8 <__kernel_clock_getres+52>
0x00000000001005c4 <__kernel_clock_getres+16>: li r3,0
0x00000000001005c8 <__kernel_clock_getres+20>: cmplwi r4,0
0x00000000001005cc <__kernel_clock_getres+24>: crclr so
0x00000000001005d0 <__kernel_clock_getres+28>: beqlr
0x00000000001005d4 <__kernel_clock_getres+32>: lis r5,152
0x00000000001005d8 <__kernel_clock_getres+36>: ori r5,r5,38528
0x00000000001005dc <__kernel_clock_getres+40>: std r3,0(r4)
0x00000000001005e0 <__kernel_clock_getres+44>: std r5,8(r4)
0x00000000001005e4 <__kernel_clock_getres+48>: blr
0x00000000001005e8 <__kernel_clock_getres+52>: li r0,247
0x00000000001005ec <__kernel_clock_getres+56>: sc
0x00000000001005f0 <__kernel_clock_getres+60>: blr
0x00000000001005f4 <__kernel_clock_getres+64>: ld r8,80(r3)
0x00000000001005f8 <__kernel_clock_getres+68>: andi. r0,r4,1
0x00000000001005fc <__kernel_clock_getres+72>: bne- 0x1005f4 <__kernel_clock_getres+64>
0x0000000000100600 <__kernel_clock_getres+76>: xor r0,r4,r4
0x0000000000100604 <__kernel_clock_getres+80>: add r3,r3,r0
0x0000000000100608 <__kernel_clock_getres+84>: mftb r7
0x000000000010060c <__kernel_clock_getres+88>: ld r9,48(r3)
0x0000000000100610 <__kernel_clock_getres+92>: subf r7,r9,r7
0x0000000000100614 <__kernel_clock_getres+96>: ld r5,64(r3)
0x0000000000100618 <__kernel_clock_getres+100>: mulhdu r7,r7,r5
0x000000000010061c <__kernel_clock_getres+104>: ld r6,72(r3)
0x0000000000100620 <__kernel_clock_getres+108>: add r4,r6,r7
0x0000000000100624 <__kernel_clock_getres+112>: xor r0,r4,r4
0x0000000000100628 <__kernel_clock_getres+116>: add r3,r3,r0
0x000000000010062c <__kernel_clock_getres+120>: ld r0,80(r3)
0x0000000000100630 <__kernel_clock_getres+124>: cmpld r0,r8
0x0000000000100634 <__kernel_clock_getres+128>: bne- 0x1005f4 <__kernel_clock_getres+64>
0x0000000000100638 <__kernel_clock_getres+132>: blr
0x000000000010063c <__kernel_clock_getres+136>: mflr r0
0x0000000000100640 <__kernel_clock_getres+140>: bcl- 20,4*cr7+so,0x100648 <__kernel_datapage_offset+4>
Signed-off-by: Olaf Hering <olh at suse.de>
arch/powerpc/kernel/vdso64/gettimeofday.S | 1 +
1 files changed, 1 insertion(+)
Index: linux-2.6.16-rc4-olh/arch/powerpc/kernel/vdso64/gettimeofday.S
===================================================================
--- linux-2.6.16-rc4-olh.orig/arch/powerpc/kernel/vdso64/gettimeofday.S
+++ linux-2.6.16-rc4-olh/arch/powerpc/kernel/vdso64/gettimeofday.S
@@ -225,6 +225,7 @@ V_FUNCTION_BEGIN(__do_get_xsec)
.cfi_startproc
/* check for update count & load values */
1: ld r8,CFG_TB_UPDATE_COUNT(r3)
+ mr r4,r8
andi. r0,r4,1 /* pending update ? loop */
bne- 1b
xor r0,r4,r4 /* create dependency */
More information about the Linuxppc-dev
mailing list