Program that segfaults with -Ofast
Mason
slash.tmp@free.fr
Fri Jan 5 10:57:00 GMT 2018
On 04/01/2018 17:51, Christer Solskogen wrote:
> Probably because it's about amiberry, which is a uae4arm-rpi fork.
> And because O3/Ofast probably does some magic.
(IMO, -Ofast is an "unsafe" optimization level: "It enables optimizations
that are not valid for all standard-compliant programs.")
Could you run the crashing binary under valgrind?
Do you get interesting results?
I cloned the repo, and looked at src/memory.cpp
read_kickstart() is static, and is never called through a function pointer.
$ git grep -n read_kickstart
src/memory.cpp:424:static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksum, int noalias)
src/memory.cpp:540: read_kickstart (f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated, 0, 1);
src/memory.cpp:613: read_kickstart (f, extendedkickmem_bank.baseaddr, ROM_SIZE_512, 0, 1);
src/memory.cpp:617: read_kickstart (f, kickmem_bank.baseaddr, ROM_SIZE_512, 1, 0);
src/memory.cpp:679: size = read_kickstart (f, kickmem_bank.baseaddr, maxsize, 1, 0);
src/memory.cpp:690: read_kickstart (f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated, 0, 1);
src/memory.cpp:697: read_kickstart (f, extendedkickmem2_bank.baseaddr, ROM_SIZE_512, 0, 1);
src/memory.cpp:699: read_kickstart (f, extendedkickmem2_bank.baseaddr + ROM_SIZE_512, ROM_SIZE_512, 0, 1);
What is weird is that every call to read_kickstart() has the 'size' argument
either ROM_SIZE_512, or ROM_SIZE_256, or ROM_SIZE_512 * 2. It's never 32 like
in the sanitizer's stack dump...
Regards.
More information about the Gcc-help
mailing list