Thread: Re: [BUGS] solaris non gcc compiler debug options

Re: [BUGS] solaris non gcc compiler debug options

From
Bruce Momjian
Date:
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.*


Re: [BUGS] solaris non gcc compiler debug options

From
Kris Jurka
Date:

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


Re: [BUGS] solaris non gcc compiler debug options

From
Bruce Momjian
Date:
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.*