On Sat, Feb 22 2020, Charlene Wendling <[email protected]> wrote:
> On Sun, 16 Feb 2020 08:04:12 +0100
> Jeremie Courreges-Anglas wrote:
>
>> On Sat, Feb 15 2020, Kurt Mosiejczuk <[email protected]> wrote:
>> > http://build-failures.rhaalovely.net/sparc64/2020-02-11/geo/spatialite/gis.log
>> > http://build-failures.rhaalovely.net/powerpc/2020-01-27/geo/spatialite/gis.log
>> >
>> > ok to mark this BROKEN-sparc64/BROKEN-powerpc ?
>> 
>> libtool strips -lrasterlite from the command line arguments, this
>> looks wrong.
>> 
>> Also "-lstdc++ -lestdc++", boo.
>
> So i studied the issue and found it, the applied code is not what
> libtool's debug message and manpage say it is.
>
> The second splice() tries to substitute stdc++ with estdc++, it is
> not needed, because anyway orderedlibs seems always unique (i tried
> by building stuff and using Data::Dumper).
>
> As such, the conditional can be removed entirely, since we just want
> to strip stdc++ from orderedlibs when estdc++ is present.
>
> This fixes geo/spatialite/gis on macppc and sparc64.
>
> The below diff against libtool survived a sparc64 bulk. I've built
> cad/magic and devel/openmpi among other ports using ports-gcc as
> COMPILER, without issues on amd64.
>
> Comments/feedback are welcome,

We should put -lestdc++ in the latest location of -lestdc++
and -lstdc++.  The order of libraries matters at least for static
linking, and I believe the intent of the code is correct.  Please see
below,

> Charlène.
>
>
> Index: Link.pm
> ===================================================================
> RCS file: /cvs/src/usr.bin/libtool/LT/Mode/Link.pm,v
> retrieving revision 1.36
> diff -u -p -r1.36 Link.pm
> --- Link.pm   23 Jul 2017 09:48:53 -0000      1.36
> +++ Link.pm   22 Feb 2020 14:34:51 -0000
> @@ -832,14 +832,7 @@ sub common1
>       my $is = $tiedlibs->indexof("stdc++");
>       if (defined($ie) and defined($is)) {
>               tsay {"stripping stdc++ from orderedlibs due to having estdc++ 
> already; ie=$ie, is=$is"};
> -             # check what library comes later
> -             if ($ie < $is) {
> -                     splice(@$orderedlibs, $ie, 1);

After this, estdc++ has been removed and $is is now off by one

> -                     splice(@$orderedlibs, $is, 1, "estdc++");

So here we fail to replace "stdc++" with "estdc++", instead we overwrite
the next value with "estdc++".

This is consistent with "-lstdc++ -lestdc++" appearing in

  http://build-failures.rhaalovely.net/sparc64/2020-02-11/geo/spatialite/gis.log

and -lrasterlite being absent from the linking command line.  Diff below.

> -                     $ie = $is;
> -             } else {
> -                     splice(@$orderedlibs, $is, 1);
> -             }
> +             splice(@$orderedlibs, $is, 1);
>       }
>       tsay {"staticlibs = \n", join("\n", @$staticlibs)};
>       tsay {"orderedlibs = @$orderedlibs"};


First clobber "stdc++" with "estdc++" then remove the original
"estdc++", this way the indexes stay consistent.  This fixes
geo/spatialite/gis on sparc64.

Do you want to put this in another bulk?  ok?


Index: LT/Mode/Link.pm
===================================================================
RCS file: /d/cvs/src/usr.bin/libtool/LT/Mode/Link.pm,v
retrieving revision 1.36
diff -u -p -r1.36 Link.pm
--- LT/Mode/Link.pm     23 Jul 2017 09:48:53 -0000      1.36
+++ LT/Mode/Link.pm     23 Feb 2020 07:08:59 -0000
@@ -834,8 +834,8 @@ sub common1
                tsay {"stripping stdc++ from orderedlibs due to having estdc++ 
already; ie=$ie, is=$is"};
                # check what library comes later
                if ($ie < $is) {
-                       splice(@$orderedlibs, $ie, 1);
                        splice(@$orderedlibs, $is, 1, "estdc++");
+                       splice(@$orderedlibs, $ie, 1);
                        $ie = $is;
                } else {
                        splice(@$orderedlibs, $is, 1);


-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to