Subject: Patch to libtool for solaris 11.4 link-editor which rejects -pthread option

From: "Stacey Marshall" <[email-masked]>
Date: Mon, 14 Jan 2019 14:35:44 +0000

Solaris 11.4 link-editor, ld(1), has been updated to reject options 
'-thread' and '-pthread'.

Details from Oracle Bug 22985199

> The GNU configuration process has been known to pass the
> options -thread and -pthread to ld(1), or to the compiler
> driver which will try and pass them to ld(1).
>
> ld(1) uses getopt(3c) processing.  The compilers take the
> options they know about and pass the others to ld(1).
>
> These options, which are specific to gcc, can result in
> silent errors:
>
> % ld -o null.so -G -thread null.o
> % elfdump -d null.so | fgrep SONAME
>     [0]  SONAME          0x5c    read
>
> The -t option is peeled off, being a valid ld(1) option,
> and the rest, '-h read' gets interpreted as an SONAME, which
> is probably not what the user expected.  If you tried to
> create an executable, you'd get an error, but it's not
> immediately obvious where the -h came from:
>
> % ld -o main -thread null.o
> ld: fatal: option '-h read' is incompatible with building \\
>     a dynamic executable
>
> With -pthread we get the same result when building a shared
> object or an executable:
>
> % ld -o null.so -G -pthread null.o
> % elfdump -d null.so | fgrep AUDIT
>      [0]  AUDIT           0x5c    thread
>
> The -p is peeled off, and its optarg used to define an auditor.
> Again, probably not what the user wanted.
>
> The Studio compilers can behave slightly differently in that
> they can affect the options passed to ld(1):  For example
>
> % cc -o null.so -G -thread null.o
>
> results in ld(1) seeing distinct options '-t -hread'.
>
> Given these are "bad" options to ld(1), it would be helpful
> to our Userland developers if ld(1) could recognize them
> rather than falling through to getopt() processing, where the
> options are mis-interpreted and "might" result in an error
> depending on the output file being produced.

Following patch prevents '-pthread' from being passed to ld on solaris2 
hosts.

     libtool should not pass option '-pthread' to Solaris link-editor.
     diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
     index 0f0a2da3f9..7c8bcfd9d2 100644
     --- a/build-aux/ltmain.sh
     +++ b/build-aux/ltmain.sh
     @@ -7070,7 +7070,21 @@ func_mode_link ()
     	continue
     	;;

     -      
-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
     +      # Solaris ld rejects as of 11.4.  Refer to Oracle bug 
22985199.
     +      -pthread)
     +	  case $host in
     +              *solaris2*) ;;
     +              *)
     +		  case "$new_inherited_linker_flags " in
     +                      *" $arg "*) ;;
     +                      * ) func_append new_inherited_linker_flags " 
$arg" ;;
     +		  esac
     + 		  ;;
     +	  esac
     + 	  continue
     +	  ;;
     +
     +      -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
            |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
     	func_append compiler_flags " $arg"
     	func_append compile_command " $arg"

Mr. Stacey Marshall - Principal Software Engineer - Oracle UK
Oracle Systems, SPARC & Solaris System Software Engineering.
[email-masked]