php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #73062 Test for -fvisibility=hidden support fails with certain $CC
Submitted: 2016-09-10 14:57 UTC Modified: 2021-10-05 15:15 UTC
From: michael at orlitzky dot com Assigned: cmb (profile)
Status: Closed Package: *Compile Issues
PHP Version: 7.1Git-2016-09-10 (Git) OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: michael at orlitzky dot com
New email:
PHP Version: OS:

 

 [2016-09-10 14:57 UTC] michael at orlitzky dot com
Description:
------------
There is a check in configure.in that looks for -fvisibility=hidden support when the user is building with GCC:

  dnl activate some gcc specific optimizations for gcc >= 4
  if test "$GCC" = "yes"; then
    case $host_alias in
    *darwin*)
      GCC_MAJOR_VERSION=`$CC -dumpversion | /usr/bin/sed -nE '1s/([[0-9]]+)\.[[0-$
      ;;
    *)
      GCC_MAJOR_VERSION=`$CC --version | $SED -n '1s/[[^0-9]]*//;1s/\..*//;1p'`
      ;;
    esac
    if test $GCC_MAJOR_VERSION -ge 4; then
      CFLAGS="$CFLAGS -fvisibility=hidden"
    fi
  fi

The idea is to parse off the major version number from the end of the "gcc --version" output, and see if it's 4 or more. However, the regular expression in question doesn't work when $CC is a little weird. This is the expected result, with a vanilla GCC:

  $CC --version | sed -n '1s/[[^0-9]]*//;1s/\..*//;1p'
  4

But this is what happens when my CC is set:

  CC=x86_64-pc-linux-gnu-gcc
  $ $CC --version | sed -n '1s/[[^0-9]]*//;1s/\..*//;1p'
  x6_64-pc-linux-gnu-gcc (Gentoo Hardened 4



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-09-10 22:47 UTC] cmb@php.net
-Status: Open +Status: Verified
 [2016-09-10 22:47 UTC] cmb@php.net
Um, wouldn't it be better to check for -fvisibility=hidden
support instead of the GCC version, anyway?
 [2016-09-10 22:58 UTC] michael at orlitzky dot com
Good idea =)

https://github.com/php/php-src/pull/2124
 [2018-02-13 20:37 UTC] aixtools at felt dot demon dot nl
FYI.

The current test in php-7.2.2 gives a false pass (aka yes) when the compile is done with -c. Without -c the flag fails.

System AIX, complier xlc

root@x065:[/data/prj/php/php-7.2.2]xlc_r -c -I/opt/include -I/opt/include/mysql -qmaxmem=-1 -qarch=pwr5  -fvisibility=hidden -I/opt/include x.c
root@x065:[/data/prj/php/php-7.2.2]xlc_r -I/opt/include -I/opt/include/mysql -qmaxmem=-1 -qarch=pwr5  -fvisibility=hidden -I/opt/include x.c
ld: 0706-005 Cannot find or open file: visibility=hidden
        ld:fopen(): A file or directory in the path name does not exist.
 [2018-02-14 14:03 UTC] michael at orlitzky dot com
> The current test in php-7.2.2 gives a false pass (aka yes) when the compile is done with -c. Without -c the flag fails.

Is that causing a problem building PHP? I'm not familiar with xlc, but Google tells me that "-c" means "don't link," so the build should fail anyway with "-c" in your CFLAGS.

In any case, the macro is only supposed to check whether or not "-fvisibility=hidden" works with your current CC/CFLAGS. If you have CFLAGS="-c" and if the test (incorrectly) passes, that should still be ok since everything will be compiled with "-c -fvisibility=hidden". Unless it isn't; like I said I don't know anything about xlc =)
 [2021-10-05 14:25 UTC] cmb@php.net
-Status: Verified +Status: Feedback -Assigned To: +Assigned To: cmb
 [2021-10-05 14:25 UTC] cmb@php.net
Michael's PR had been merged, so I think this issue is resolved.
Or are there still issues with any of the actively supported PHP
versions[1]?

[1] <https://www.php.net/supported-versions.php>
 [2021-10-05 15:03 UTC] michael at orlitzky dot com
It's fixed. Thanks!
 [2021-10-05 15:15 UTC] cmb@php.net
-Status: Feedback +Status: Closed
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Tue Jul 01 19:01:37 2025 UTC