https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90337

            Bug ID: 90337
           Summary: sanitizer_linux.cc Fails to compile on Illumos-derived
                    Solaris
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gcc at sentfrom dot com
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at 
gcc dot gnu.org
  Target Milestone: ---

sanitizer_linux.cc fails to compile on SmartOS (based on the Illumos fork of
OpenSolaris), The reason is that O_DIRECTORY was added to Oracle Solaris 11
post-fork but is not present in Illumos distributions.

My workaround is:

--- sanitizer_linux.cc.dist     Fri May  3 13:25:45 2019
+++ sanitizer_linux.cc  Fri May  3 13:27:33 2019
@@ -929,6 +929,11 @@
   char task_directory_path[80];
   internal_snprintf(task_directory_path, sizeof(task_directory_path),
                     "/proc/%d/task/", pid);
+#if SANITIZER_SOLARIS
+#ifndef O_DIRECTORY
+#define O_DIRECTORY 0
+#endif
+#endif
   descriptor_ = internal_open(task_directory_path, O_RDONLY | O_DIRECTORY);
   if (internal_iserror(descriptor_)) {
     Report("Can't open /proc/%d/task for reading.\n", pid);

Here is the error:

mordac
~/build/gcc-9.1.0/obj/x86_64-pc-solaris2.11/libsanitizer/sanitizer_common>/bin/ksh
../libtool --tag=CXX --mode=compile /home/majid/build/gcc-9.1.0/obj/./gcc/xgcc
-shared-libgcc -B/home/majid/build/gcc-9.1.0/obj/./gcc -nostdinc++
-L/home/majid/build/gcc-9.1.0/obj/x86_64-pc-solaris2.11/libstdc++-v3/src
-L/home/majid/build/gcc-9.1.0/obj/x86_64-pc-solaris2.11/libstdc++-v3/src/.libs
-L/home/majid/build/gcc-9.1.0/obj/x86_64-pc-solaris2.11/libstdc++-v3/libsupc++/.libs
-B/usr/local/x86_64-pc-solaris2.11/bin/ -B/usr/local/x86_64-pc-solaris2.11/lib/
-isystem /usr/local/x86_64-pc-solaris2.11/include -isystem
/usr/local/x86_64-pc-solaris2.11/sys-include -fchecking=1 -D_GNU_SOURCE
-D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-DHAVE_RPC_XDR_H=1 -DHAVE_TIRPC_RPC_XDR_H=0 -I.
-I../../../../libsanitizer/sanitizer_common -I.. -I
../../../../libsanitizer/include -isystem
../../../../libsanitizer/include/system -Wall -W -Wno-unused-parameter
-Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions
-fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden
-Wno-variadic-macros -I../../libstdc++-v3/include
-I../../libstdc++-v3/include/x86_64-pc-solaris2.11
-I../../../../libsanitizer/../libstdc++-v3/libsupc++ -std=gnu++11
-DSANITIZER_LIBBACKTRACE -DSANITIZER_CP_DEMANGLE -I
../../../../libsanitizer/../libbacktrace -I ../libbacktrace -I
../../../../libsanitizer/../include -include
../../../../libsanitizer/libbacktrace/backtrace-rename.h -g -O2 -MT
sanitizer_linux.lo -MD -MP -MF .deps/sanitizer_linux.Tpo -c -o
sanitizer_linux.lo ../../../../libsanitizer/sanitizer_common/sanitizer_linux.cc
libtool: compile:  /home/majid/build/gcc-9.1.0/obj/./gcc/xgcc -shared-libgcc
-B/home/majid/build/gcc-9.1.0/obj/./gcc -nostdinc++
-L/home/majid/build/gcc-9.1.0/obj/x86_64-pc-solaris2.11/libstdc++-v3/src
-L/home/majid/build/gcc-9.1.0/obj/x86_64-pc-solaris2.11/libstdc++-v3/src/.libs
-L/home/majid/build/gcc-9.1.0/obj/x86_64-pc-solaris2.11/libstdc++-v3/libsupc++/.libs
-B/usr/local/x86_64-pc-solaris2.11/bin/ -B/usr/local/x86_64-pc-solaris2.11/lib/
-isystem /usr/local/x86_64-pc-solaris2.11/include -isystem
/usr/local/x86_64-pc-solaris2.11/sys-include -fchecking=1 -D_GNU_SOURCE
-D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-DHAVE_RPC_XDR_H=1 -DHAVE_TIRPC_RPC_XDR_H=0 -I.
-I../../../../libsanitizer/sanitizer_common -I.. -I
../../../../libsanitizer/include -isystem
../../../../libsanitizer/include/system -Wall -W -Wno-unused-parameter
-Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions
-fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden
-Wno-variadic-macros -I../../libstdc++-v3/include
-I../../libstdc++-v3/include/x86_64-pc-solaris2.11
-I../../../../libsanitizer/../libstdc++-v3/libsupc++ -std=gnu++11
-DSANITIZER_LIBBACKTRACE -DSANITIZER_CP_DEMANGLE -I
../../../../libsanitizer/../libbacktrace -I ../libbacktrace -I
../../../../libsanitizer/../include -include
../../../../libsanitizer/libbacktrace/backtrace-rename.h -g -O2 -MT
sanitizer_linux.lo -MD -MP -MF .deps/sanitizer_linux.Tpo -c
../../../../libsanitizer/sanitizer_common/sanitizer_linux.cc  -fPIC -DPIC -o
.libs/sanitizer_linux.o
../../../../libsanitizer/sanitizer_common/sanitizer_linux.cc: In constructor
'__sanitizer::ThreadLister::ThreadLister(__sanitizer::pid_t)':
../../../../libsanitizer/sanitizer_common/sanitizer_linux.cc:932:63: error:
'O_DIRECTORY' was not declared in this scope
  932 |   descriptor_ = internal_open(task_directory_path, O_RDONLY |
O_DIRECTORY);
      |                                                              
^~~~~~~~~~~
../../../../libsanitizer/sanitizer_common/sanitizer_linux.cc: In function
'void* __sanitizer::internal_start_thread(void (*)(void*), void*)':
../../../../libsanitizer/sanitizer_common/sanitizer_linux.cc:1735:58: warning:
cast between incompatible function types from 'void (*)(void*)' to 'void*
(*)(void*)' [-Wcast-function-type]
 1735 |   real_pthread_create(&th, nullptr, (void*(*)(void *arg))func, arg);
      |                                                          ^~~~

Reply via email to