On Fri, 9 Oct 2009, Manish Katiyar wrote:
On Fri, Oct 9, 2009 at 5:39 PM, Holger Kiehl <Holger.Kiehl@xxxxxx> wrote:
Hello Manish
First, sorry for the late responce!
On Wed, 7 Oct 2009, Manish Katiyar wrote:
On Wed, Oct 7, 2009 at 7:51 PM, Holger Kiehl <Holger.Kiehl@xxxxxx> wrote:
Hello Manish
On Wed, 7 Oct 2009, Manish Katiyar wrote:
Hi Holger,
I don't have the source code, so a bit hard to guess. But you can try
to find out which member of your fsa structure is at offset 236 (0xec)
and look around those lines in the function where you are accessing
that member.
I am trying to download the AFD source code, which looks like it will
take ages on my slow broadband. Hopefully I can help after that.
If you download, please take afd-1.4.0-0.20.beta.tar.bz2 because that
is the one that caused the error. You can get it from:
ftp://ftp.dwd.de/pub/afd/development/afd-1.4.0-0.20.beta.tar.bz2
You will find the relevant code in src/fd.c.
Hi Holger,
(gdb) set $offset = (int)(&((struct filetransfer_status *)0)->host_status)
(gdb) p $offset
$5 = 236
(gdb) p/x 236
$6 = 0xec
host_status is at offset 236. In the function start_process I can see
that this is used at places by dereferencing below
"fsa[fsa_pos].host_status ".
At this point my guess would be that you are getting fsa_pos as
something illegal ie.. probably you are trying to access beyond the
array. Since this is an input to the function, you can just check its
value at the start and assert if that is ok and within reasonable
range.
HTH
Many thanks for finding this out! I think I now, with your help, have a
clue where the error could be. Is there a way to find out what value
fsa_pos had at that time?
Since it is a runtime variable, probably we can get something by
looking at the output of "info registers". But you can try putting
How can I find which register is fsa_pos?
(gdb) info registers
rax 0x7fb48a2c8718 140413389014808
rbx 0x4acb3bcd 1254833101
rcx 0x0 0
rdx 0x7fb48a2c9010 140413389017104
rsi 0x68 104
rdi 0x7fb48a3795d8 140413389739480
rbp 0x0 0x0
rsp 0x7fffe4906840 0x7fffe4906840
r8 0x7fb48a346018 140413389529112
r9 0x0 0
r10 0x3f 63
r11 0x25c8 9672
r12 0x5d 93
r13 0xbbfe88b9 3154020537
r14 0xfffffffffffff708 -2296
r15 0x1 1
rip 0x404b5f 0x404b5f <start_process+143>
eflags 0x10207 [ CF PF IF RF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
fctrl 0x0 0
fstat 0x0 0
ftag 0x0 0
fiseg 0x0 0
fioff 0x0 0
foseg 0x0 0
fooff 0x0 0
fop 0x0 0
mxcsr 0x0 [ ]
if (fsa_pos <0 ) {
printf("going to die ... \n");
return
}
in the start of the function itself and try.
Yes, I have already added that. Thanks!
Holger