Skip to content

Commit

Permalink
Always pass -fno-strict-aliasing during compilation (#714)
Browse files Browse the repository at this point in the history
The ksh93 codebase is incompatible with strict aliasing, yet
currently the default flags enable -fstrict-aliasing via the -Os
optimization flag. Additionally, manually passing a higher level
optimization flag via CCFLAGS (e.g. -O3) will result in strict
aliasing becoming inadvertently enabled unless -fno-strict-aliasing
is explicitly passed to disable it (cf. the Fedora and OpenSUSE
build scripts for ksh[*]).

This commit implements a probe that will detect the existence of
-fno-strict-aliasing and use it via ${mam_cc_FLAGS}, bypassing
CCFLAGS.

[*]: https://src.fedoraproject.org/rpms/ksh/blob/rawhide/f/ksh.spec#_49
     https://build.opensuse.org/package/view_file/shells/ksh/ksh.spec?expand=1
  • Loading branch information
JohnoKing authored and McDutchie committed Mar 23, 2024
1 parent 5e3a169 commit 27ece9f
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 7 deletions.
19 changes: 18 additions & 1 deletion src/cmd/INIT/make.probe
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Glenn Fowler
# AT&T Research
#
# @(#)make.probe (ksh 93u+m) 2024-03-20
# @(#)make.probe (ksh 93u+m) 2024-03-23
#
# C probe for make
#
Expand Down Expand Up @@ -37,6 +37,7 @@ probe_nmflags="'' -p -B"
probe_optimize="-Os -O"
probe_pic="-Kpic -KPIC -fpic -fPIC -pic -PIC +z +Z"
probe_no_protect="'-fno-stack-protector -fno-stack-protector-all' -GS-"
probe_no_strict_aliasing="-fno-strict-aliasing"
probe_readonly="-R -Krodata -xMerge -Wa,-r"
probe_shared="'' -G -b -c -shared -Wl,dll"
probe_shared_name="-Wl,-soname= -h"
Expand Down Expand Up @@ -149,6 +150,7 @@ makeoptions=
nmedit=
nmflags=
no_protect=
no_strict_aliasing=
optimize=
prefix_archive=lib
prefix_dynamic=
Expand Down Expand Up @@ -1455,6 +1457,19 @@ then e=`wc -c < e`
esac
done

eval set x $probe_no_strict_aliasing
while :
do shift
case $# in
0) break ;;
esac
rm -f warn.$obj
$cc $1 -c warn.$src 2>e && test -f warn.$obj || continue
case $(wc -c < e) in
$e) no_strict_aliasing=$1; break ;;
esac
done

case $version_string in
$probe_gcc_version) probe_optimize="$probe_gcc_optimize $probe_optimize" ;;
esac
Expand Down Expand Up @@ -1979,6 +1994,7 @@ CC_NM=$nm
CC_NMEDIT=$nmedit
CC_NMFLAGS=$nmflags
CC_NOPROTECT=$no_protect
CC_NOSTRICTALIASING=$no_strict_aliasing
CC_OPTIMIZE=$optimize
CC_READONLY=$readonly
CC_REPOSITORY=$repository
Expand Down Expand Up @@ -2086,6 +2102,7 @@ esac
echo CC.NMEDIT ="$CC_NMEDIT"
echo CC.NMFLAGS = $CC_NMFLAGS
echo CC.NOPROTECT = $CC_NOPROTECT
echo CC.NOSTRICTALIASING = $CC_NOSTRICTALIASING
echo CC.OPTIMIZE = $CC_OPTIMIZE
echo CC.PICBIG = $CC_PICBIG
echo CC.PICSMALL = $CC_PICSMALL
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/builtin/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ setv MAMAKE_STRICT 3
setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv CC cc
setv mam_cc_FLAGS ${mam_cc_TARGET} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} ${mam_cc_NOSTRICTALIASING}
setv CCFLAGS
setv CCLDFLAGS ${-strip-symbols?1?${mam_cc_LD_STRIP}??}
setv IFFEFLAGS
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/ksh93/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv CC cc
setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} ${mam_cc_NOSTRICTALIASING}
setv CCFLAGS
setv CCLDFLAGS ${-strip-symbols?1?${mam_cc_LD_STRIP}??}
setv IFFEFLAGS
Expand Down
2 changes: 1 addition & 1 deletion src/lib/libast/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ setv INSTALLROOT ../../..
setv PACKAGEROOT ../../../../..
setv CC cc
setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_DLL} -D_BLD_ast ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_DLL} -D_BLD_ast ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} ${mam_cc_NOSTRICTALIASING}
setv CCFLAGS
setv CCLDFLAGS ${-strip-symbols?1?${mam_cc_LD_STRIP}??}
setv IFFEFLAGS
Expand Down
2 changes: 1 addition & 1 deletion src/lib/libcmd/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv CC cc
setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_DLL} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} -DERROR_CATALOG=\""libcmd"\" -DHOSTTYPE=\""${mam_cc_HOSTTYPE}"\" -D_BLD_cmd
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_DLL} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} ${mam_cc_NOSTRICTALIASING} -DERROR_CATALOG=\""libcmd"\" -DHOSTTYPE=\""${mam_cc_HOSTTYPE}"\" -D_BLD_cmd
setv CCFLAGS
setv IFFEFLAGS
setv LDFLAGS
Expand Down
2 changes: 1 addition & 1 deletion src/lib/libdll/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv CC cc
setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_DLL} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_DLL} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} ${mam_cc_NOSTRICTALIASING}
setv CCFLAGS
setv IFFEFLAGS
setv LDFLAGS
Expand Down
2 changes: 1 addition & 1 deletion src/lib/libsum/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ setv INSTALLROOT ../../..
setv PACKAGE_ast_INCLUDE ${INSTALLROOT}/include/ast
setv CC cc
setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_PIC} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?}
setv mam_cc_FLAGS ${mam_cc_TARGET} ${mam_cc_PIC} ${-debug-symbols?1?${mam_cc_DEBUG} -D_BLD_DEBUG?${mam_cc_OPTIMIZE}?} ${mam_cc_NOSTRICTALIASING}
setv CCFLAGS
setv IFFEFLAGS
setv LDFLAGS
Expand Down

0 comments on commit 27ece9f

Please sign in to comment.