PSP: fix BS2 crash by disabling strict aliasing

The problem that caused the crash in BS2 had to do with GCC making improper assumptions about our code. Specifically, the alignment trick we use for READ_UINT32/16 allows some targets(e.g. MIPS) to generate better code, but it also goes against ANSI C aliasing rules, which prohibit the sharing of addresses between a struct and another variable value. Using -fno-strict-aliasing tells GCC not to assume strict ANSI C aliasing and also unfortunately prevents it from making some good optimizations.

This change is probably needed for other platforms as well -- the crash on the PSP was simply a very rare coincidence.

svn-id: r52473
This commit is contained in:
Yotam Barnoy 2010-08-31 15:24:08 +00:00
parent c0b119feda
commit b5a17ca628
2 changed files with 2 additions and 2 deletions

View File

@ -66,7 +66,7 @@ endif
# Variables for common Scummvm makefile
CXX = psp-g++
CXXFLAGS = -O3 -Wall -Wno-multichar -fno-exceptions -fno-rtti
CXXFLAGS = -O3 -Wall -Wno-multichar -fno-exceptions -fno-rtti -fno-strict-aliasing
DEFINES = -D__PSP__ -DNONSTANDARD_PORT -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE -DUSE_ZLIB -DDISABLE_DOSBOX_OPL -DUSE_RGB_COLOR
LDFLAGS :=

2
configure vendored
View File

@ -1485,7 +1485,7 @@ case $_host_os in
DEFINES="$DEFINES -D_EE -D__PLAYSTATION2__"
;;
psp)
CXXFLAGS="$CXXFLAGS -O3 -I$PSPSDK/include -D_PSP_FW_VERSION=150"
CXXFLAGS="$CXXFLAGS -O3 -I$PSPSDK/include -D_PSP_FW_VERSION=150 -fno-strict-aliasing"
;;
solaris*)
DEFINES="$DEFINES -DSOLARIS -DSYSTEM_NOT_SUPPORTING_D_TYPE"