Hi, is the bug #355721 a compiler bug? I've inspected the program with valgrind, but couldn't find any clue of a bug in the code.
I've took a look on it with gdb and this is the code after the return: here the return value 0 gets loaded: <crm_expr_markov_classify+10748>: li r9,0 <crm_expr_markov_classify+10752>: addis r7,r31,5 <crm_expr_markov_classify+10756>: stw r9,-10184(r7) <crm_expr_markov_classify+10760>: addis r7,r31,5 <crm_expr_markov_classify+10764>: lwz r0,-10184(r7) <crm_expr_markov_classify+10768>: mr r3,r0 <crm_expr_markov_classify+10772>: lwz r11,0(r1) <crm_expr_markov_classify+10776>: lwz r0,4(r11) here the return address register gets overwritten: <crm_expr_markov_classify+10780>: mtlr r0 <crm_expr_markov_classify+10784>: lwz r27,-36(r11) <crm_expr_markov_classify+10788>: lwz r28,-32(r11) <crm_expr_markov_classify+10792>: lwz r29,-28(r11) <crm_expr_markov_classify+10796>: lwz r31,-20(r11) <crm_expr_markov_classify+10800>: lfd f30,-16(r11) <crm_expr_markov_classify+10804>: lfd f31,-8(r11) <crm_expr_markov_classify+10808>: mr r1,r11 and here the SIGSEG raises: <crm_expr_markov_classify+10812>: blr The sigseg raises at the end of a really big function (~1500 line of code) which alloces heavily locale variables. Is it possible gcc overwrites neccessary data within the function while calling a subfunction? The sigseg does not occur (with the message used in the bug report, but with another mail) when I remove the last parameter of the sprintf call in crm_markovian.c:2078 sprintf (buf, "#%ld (%s):"\ " features: %ld, hits: %ld, prob: %3.2e,\n", k, hashname[k], fcounts[k], totalhits[k], ptc[k] ); I find this really, really confusing. What can I do to catch this bug? Kind regards, Jörg. -- Wer eher stirbt ist länger tot. (Un B. Kant)
pgp6v5sr987p9.pgp
Description: PGP signature