Re: gcc on mipsel: -O2 leads to SEGFAULT on very large function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

>> to trigger the bug.
>>
>> Is this a gcc bug?
> 
> Maybe, maybe not.
> 
> Do you get any compiler warnings, with full warnings enabled?

-Wall doesn't show anything, only -pendantic reports some
standard-related issues.

> 
> What is the code that faults?

The fault occurs at the last few steps in the long parser_parse
function. At least in the original version of the parser, the problem
was that the return address was wrong (or it was taken from the wrong
position in memory).

The disasemble command of gdb showed me this as code before the Bus
error occured:

0x2b592864 <parser_parse+153848>:       lw      t9,8044(sp)
0x2b592868 <parser_parse+153852>:       move    at,at
0x2b59286c <parser_parse+153856>:       lw      v0,-4(t9)
0x2b592870 <parser_parse+153860>:       lw      at,-32732(gp)
0x2b592874 <parser_parse+153864>:       move    at,at
0x2b592878 <parser_parse+153868>:       addiu   at,at,19484
0x2b59287c <parser_parse+153872>:       jr      at
0x2b592880 <parser_parse+153876>:       move    at,at

After the addiu, the at register contained the address 0x2ad42940 (which
is in a segment that is not marked as executable) that then caused the
bus error.

The strange thing is that my removal of code does not change the
execution path, except that it doesn't need to check in certain cases
whether self->verbose is true (which is always false in my test case)
and it of course reduces the number of string constants.

Willi


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux