Thread: Re: [BUGS] solaris non gcc compiler debug options
Kris Jurka wrote: > > Compiling on solaris with a non gcc compiler does not correctly enable > debugging when --enable-debug is specified. src/template/solaris is > specifying CFLAGS="-O -v" and -O overrides the -g that --enable-debug > adds. Good point. Our template files should be _adding_ to CFLAGS and CPPFLAGS, not overriding them. Later optimization flags on the command line override earlier ones, so this patch should fix the problem, and it exists in a few platforms. Applied. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/template/aix =================================================================== RCS file: /cvsroot/pgsql/src/template/aix,v retrieving revision 1.15 diff -c -c -r1.15 aix *** src/template/aix 1 Nov 2003 20:45:30 -0000 1.15 --- src/template/aix 27 Nov 2004 05:01:00 -0000 *************** *** 1,10 **** if test "$GCC" != yes ; then case $host_os in aix3.2.5 | aix4.1*) ! CFLAGS="-O -qmaxmem=16384 -qsrcmsg" ;; *) ! CFLAGS="-O2 -qmaxmem=16384 -qsrcmsg -qlonglong" ;; esac fi --- 1,10 ---- if test "$GCC" != yes ; then case $host_os in aix3.2.5 | aix4.1*) ! CFLAGS="$CFLAGS -O -qmaxmem=16384 -qsrcmsg" ;; *) ! CFLAGS="$CFLAGS -O2 -qmaxmem=16384 -qsrcmsg -qlonglong" ;; esac fi Index: src/template/freebsd =================================================================== RCS file: /cvsroot/pgsql/src/template/freebsd,v retrieving revision 1.32 diff -c -c -r1.32 freebsd *** src/template/freebsd 26 Apr 2004 04:04:42 -0000 1.32 --- src/template/freebsd 27 Nov 2004 05:01:00 -0000 *************** *** 1,3 **** case $host_cpu in ! alpha*) CFLAGS="-O";; # alpha has problems with -O2 esac --- 1,3 ---- case $host_cpu in ! alpha*) CFLAGS="$CFLAGS -O";; # alpha has problems with -O2 esac Index: src/template/hpux =================================================================== RCS file: /cvsroot/pgsql/src/template/hpux,v retrieving revision 1.12 diff -c -c -r1.12 hpux *** src/template/hpux 23 Dec 2003 22:15:07 -0000 1.12 --- src/template/hpux 27 Nov 2004 05:01:00 -0000 *************** *** 1,8 **** ! CPPFLAGS="-D_XOPEN_SOURCE_EXTENDED" if test "$GCC" != yes ; then CC="$CC -Ae" ! CFLAGS="+O2" fi # Pick right test-and-set (TAS) code. We need out-of-line assembler --- 1,8 ---- ! CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" if test "$GCC" != yes ; then CC="$CC -Ae" ! CFLAGS="$CFLAGS +O2" fi # Pick right test-and-set (TAS) code. We need out-of-line assembler Index: src/template/linux =================================================================== RCS file: /cvsroot/pgsql/src/template/linux,v retrieving revision 1.25 diff -c -c -r1.25 linux *** src/template/linux 26 Apr 2004 04:04:42 -0000 1.25 --- src/template/linux 27 Nov 2004 05:01:00 -0000 *************** *** 1,2 **** # Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise ! CPPFLAGS="-D_GNU_SOURCE" --- 1,2 ---- # Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise ! CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" Index: src/template/osf =================================================================== RCS file: /cvsroot/pgsql/src/template/osf,v retrieving revision 1.17 diff -c -c -r1.17 osf *** src/template/osf 23 Apr 2004 18:15:55 -0000 1.17 --- src/template/osf 27 Nov 2004 05:01:00 -0000 *************** *** 1,4 **** if test "$GCC" != yes ; then CC="$CC -std" ! CFLAGS="-O -ieee" fi --- 1,4 ---- if test "$GCC" != yes ; then CC="$CC -std" ! CFLAGS="$CFLAGS -O -ieee" fi Index: src/template/solaris =================================================================== RCS file: /cvsroot/pgsql/src/template/solaris,v retrieving revision 1.20 diff -c -c -r1.20 solaris *** src/template/solaris 24 Sep 2004 00:21:32 -0000 1.20 --- src/template/solaris 27 Nov 2004 05:01:00 -0000 *************** *** 1,6 **** if test "$GCC" != yes ; then CC="$CC -Xa" # relaxed ISO C mode ! CFLAGS="-O -v" # -v is like gcc -Wall fi # Pick right test-and-set (TAS) code. We need out-of-line assembler --- 1,6 ---- if test "$GCC" != yes ; then CC="$CC -Xa" # relaxed ISO C mode ! CFLAGS="$CFLAGS -O -v" # -v is like gcc -Wall fi # Pick right test-and-set (TAS) code. We need out-of-line assembler Index: src/template/univel =================================================================== RCS file: /cvsroot/pgsql/src/template/univel,v retrieving revision 1.16 diff -c -c -r1.16 univel *** src/template/univel 25 Oct 2003 15:32:11 -0000 1.16 --- src/template/univel 27 Nov 2004 05:01:00 -0000 *************** *** 1,2 **** ! CFLAGS="-v -O -K i486,host,inline,loop_unroll -Dsvr4" LIBS="-lc89" --- 1,2 ---- ! CFLAGS="$CFLAGS -v -O -K i486,host,inline,loop_unroll -Dsvr4" LIBS="-lc89" Index: src/template/unixware =================================================================== RCS file: /cvsroot/pgsql/src/template/unixware,v retrieving revision 1.37 diff -c -c -r1.37 unixware *** src/template/unixware 14 May 2004 16:29:12 -0000 1.37 --- src/template/unixware 27 Nov 2004 05:01:00 -0000 *************** *** 13,21 **** __EOF__ if $CC -c -O -Kinline conftest.c >conftest.err 2>&1; then ! CFLAGS="-O -Kinline" else ! CFLAGS="-O -Kinline,no_host" fi rm -f conftest.* --- 13,21 ---- __EOF__ if $CC -c -O -Kinline conftest.c >conftest.err 2>&1; then ! CFLAGS="$CFLAGS -O -Kinline" else ! CFLAGS="$CFLAGS -O -Kinline,no_host" fi rm -f conftest.*
On Sat, 27 Nov 2004, Bruce Momjian wrote: > Kris Jurka wrote: > > > > Compiling on solaris with a non gcc compiler does not correctly enable > > debugging when --enable-debug is specified. src/template/solaris is > > specifying CFLAGS="-O -v" and -O overrides the -g that --enable-debug > > adds. > > Good point. Our template files should be _adding_ to CFLAGS and > CPPFLAGS, not overriding them. Later optimization flags on the > command line override earlier ones, so this patch should fix the > problem, and it exists in a few platforms. Applied. > I don't believe you've fixed an actual problem. Manually set CFLAGS are already accounted for in configure.in (line 234) here: # CFLAGS are selected so: # If the user specifies something in the environment, that is used. # else: If the template file set something, that is used. # else: If the compiler is GCC, then we use -O2. # else: If the compiler is something else, then we use -0. if test "$ac_env_CFLAGS_set" = set; then CFLAGS=$ac_env_CFLAGS_value elif test "${CFLAGS+set}" = set; then : # (keep what template set) elif test "$GCC" = yes; then CFLAGS="-O2" else # if the user selected debug mode, don't use -O if test "$enable_debug" != yes; then CFLAGS="-O" fi fi It seems the test at the end of this (enable_debug != yes) needs to be added to the solaris template instead of unconditionally adding -O to CFLAGS. I was trying to debug a problem and --enable-debug wasn't really helping until I took -O out of this src/template/solaris line. The man page isn't particularly clear on what "best-effort" is, but it wasn't good enough for me. If you issue -g, and the optimization level is -x03 or lower, the compiler provides best-effort symbolic information with almost full optimization. Tail-call optimization and back-end inlining are disabled. Kris Jurka
OK, I see now. I backed out my previous patch and did one so Solaris has no optimization for debug. Patch attached. --------------------------------------------------------------------------- Kris Jurka wrote: > > > On Sat, 27 Nov 2004, Bruce Momjian wrote: > > > Kris Jurka wrote: > > > > > > Compiling on solaris with a non gcc compiler does not correctly enable > > > debugging when --enable-debug is specified. src/template/solaris is > > > specifying CFLAGS="-O -v" and -O overrides the -g that --enable-debug > > > adds. > > > > Good point. Our template files should be _adding_ to CFLAGS and > > CPPFLAGS, not overriding them. Later optimization flags on the > > command line override earlier ones, so this patch should fix the > > problem, and it exists in a few platforms. Applied. > > > > I don't believe you've fixed an actual problem. Manually set CFLAGS are > already accounted for in configure.in (line 234) here: > > # CFLAGS are selected so: > # If the user specifies something in the environment, that is used. > # else: If the template file set something, that is used. > # else: If the compiler is GCC, then we use -O2. > # else: If the compiler is something else, then we use -0. > > if test "$ac_env_CFLAGS_set" = set; then > CFLAGS=$ac_env_CFLAGS_value > elif test "${CFLAGS+set}" = set; then > : # (keep what template set) > elif test "$GCC" = yes; then > CFLAGS="-O2" > else > # if the user selected debug mode, don't use -O > if test "$enable_debug" != yes; then > CFLAGS="-O" > fi > fi > > It seems the test at the end of this (enable_debug != yes) needs to be > added to the solaris template instead of unconditionally adding -O to > CFLAGS. I was trying to debug a problem and --enable-debug wasn't really > helping until I took -O out of this src/template/solaris line. The man > page isn't particularly clear on what "best-effort" is, but it wasn't good > enough for me. > > If you issue -g, and the optimization level is -x03 or > lower, the compiler provides best-effort symbolic > information with almost full optimization. Tail-call > optimization and back-end inlining are disabled. > > Kris Jurka > > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/template/aix =================================================================== RCS file: /cvsroot/pgsql/src/template/aix,v retrieving revision 1.16 diff -c -c -r1.16 aix *** src/template/aix 27 Nov 2004 05:03:26 -0000 1.16 --- src/template/aix 2 Dec 2004 18:07:45 -0000 *************** *** 1,10 **** if test "$GCC" != yes ; then case $host_os in aix3.2.5 | aix4.1*) ! CFLAGS="$CFLAGS -O -qmaxmem=16384 -qsrcmsg" ;; *) ! CFLAGS="$CFLAGS -O2 -qmaxmem=16384 -qsrcmsg -qlonglong" ;; esac fi --- 1,10 ---- if test "$GCC" != yes ; then case $host_os in aix3.2.5 | aix4.1*) ! CFLAGS="-O -qmaxmem=16384 -qsrcmsg" ;; *) ! CFLAGS="-O2 -qmaxmem=16384 -qsrcmsg -qlonglong" ;; esac fi Index: src/template/freebsd =================================================================== RCS file: /cvsroot/pgsql/src/template/freebsd,v retrieving revision 1.33 diff -c -c -r1.33 freebsd *** src/template/freebsd 27 Nov 2004 05:03:26 -0000 1.33 --- src/template/freebsd 2 Dec 2004 18:07:45 -0000 *************** *** 1,3 **** case $host_cpu in ! alpha*) CFLAGS="$CFLAGS -O";; # alpha has problems with -O2 esac --- 1,3 ---- case $host_cpu in ! alpha*) CFLAGS="-O";; # alpha has problems with -O2 esac Index: src/template/hpux =================================================================== RCS file: /cvsroot/pgsql/src/template/hpux,v retrieving revision 1.13 diff -c -c -r1.13 hpux *** src/template/hpux 27 Nov 2004 05:03:26 -0000 1.13 --- src/template/hpux 2 Dec 2004 18:07:45 -0000 *************** *** 1,8 **** ! CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" if test "$GCC" != yes ; then CC="$CC -Ae" ! CFLAGS="$CFLAGS +O2" fi # Pick right test-and-set (TAS) code. We need out-of-line assembler --- 1,8 ---- ! CPPFLAGS="-D_XOPEN_SOURCE_EXTENDED" if test "$GCC" != yes ; then CC="$CC -Ae" ! CFLAGS="+O2" fi # Pick right test-and-set (TAS) code. We need out-of-line assembler Index: src/template/linux =================================================================== RCS file: /cvsroot/pgsql/src/template/linux,v retrieving revision 1.26 diff -c -c -r1.26 linux *** src/template/linux 27 Nov 2004 05:03:26 -0000 1.26 --- src/template/linux 2 Dec 2004 18:07:45 -0000 *************** *** 1,2 **** # Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise ! CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" --- 1,2 ---- # Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise ! CPPFLAGS="-D_GNU_SOURCE" Index: src/template/osf =================================================================== RCS file: /cvsroot/pgsql/src/template/osf,v retrieving revision 1.18 diff -c -c -r1.18 osf *** src/template/osf 27 Nov 2004 05:03:26 -0000 1.18 --- src/template/osf 2 Dec 2004 18:07:45 -0000 *************** *** 1,4 **** if test "$GCC" != yes ; then CC="$CC -std" ! CFLAGS="$CFLAGS -O -ieee" fi --- 1,4 ---- if test "$GCC" != yes ; then CC="$CC -std" ! CFLAGS="-O -ieee" fi Index: src/template/solaris =================================================================== RCS file: /cvsroot/pgsql/src/template/solaris,v retrieving revision 1.21 diff -c -c -r1.21 solaris *** src/template/solaris 27 Nov 2004 05:03:26 -0000 1.21 --- src/template/solaris 2 Dec 2004 18:07:45 -0000 *************** *** 1,6 **** if test "$GCC" != yes ; then CC="$CC -Xa" # relaxed ISO C mode ! CFLAGS="$CFLAGS -O -v" # -v is like gcc -Wall fi # Pick right test-and-set (TAS) code. We need out-of-line assembler --- 1,9 ---- if test "$GCC" != yes ; then CC="$CC -Xa" # relaxed ISO C mode ! CFLAGS="-v" # -v is like gcc -Wall ! if test "$enable_debug" != yes; then ! CFLAGS="$CFLAGS -O" # any optimization breaks debug ! fi fi # Pick right test-and-set (TAS) code. We need out-of-line assembler Index: src/template/univel =================================================================== RCS file: /cvsroot/pgsql/src/template/univel,v retrieving revision 1.17 diff -c -c -r1.17 univel *** src/template/univel 27 Nov 2004 05:03:26 -0000 1.17 --- src/template/univel 2 Dec 2004 18:07:45 -0000 *************** *** 1,2 **** ! CFLAGS="$CFLAGS -v -O -K i486,host,inline,loop_unroll -Dsvr4" LIBS="-lc89" --- 1,2 ---- ! CFLAGS="-v -O -K i486,host,inline,loop_unroll -Dsvr4" LIBS="-lc89" Index: src/template/unixware =================================================================== RCS file: /cvsroot/pgsql/src/template/unixware,v retrieving revision 1.38 diff -c -c -r1.38 unixware *** src/template/unixware 27 Nov 2004 05:03:26 -0000 1.38 --- src/template/unixware 2 Dec 2004 18:07:45 -0000 *************** *** 13,21 **** __EOF__ if $CC -c -O -Kinline conftest.c >conftest.err 2>&1; then ! CFLAGS="$CFLAGS -O -Kinline" else ! CFLAGS="$CFLAGS -O -Kinline,no_host" fi rm -f conftest.* --- 13,21 ---- __EOF__ if $CC -c -O -Kinline conftest.c >conftest.err 2>&1; then ! CFLAGS="-O -Kinline" else ! CFLAGS="-O -Kinline,no_host" fi rm -f conftest.*