[openssl] master update

Richard Levitte levitte at openssl.org
Fri Sep 25 08:09:29 UTC 2020


The branch master has been updated
       via  294e380220c5ab83c05f9c501120a6296f88abdc (commit)
       via  e07a7892ee1bb2a2b697d4ad636b02bdc742fa10 (commit)
      from  25b16562d386bfd30c7059366d09864260d9f271 (commit)


- Log -----------------------------------------------------------------
commit 294e380220c5ab83c05f9c501120a6296f88abdc
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Sep 23 17:59:39 2020 +0200

    Configuration: Don't have shared libraries depend on themselves
    
    The NonStop config attributes mean that there's no separate "simple"
    and "full" shared library name, they are the same.  Because we assumed
    that they would always differ, we ended up with this dependency:
    
        libcrypto.so: libcrypto.so
    
    A simple fix was all that was needed to clear that.
    
    Reviewed-by: Paul Dale <paul.dale at oracle.com>
    (Merged from https://github.com/openssl/openssl/pull/12960)

commit e07a7892ee1bb2a2b697d4ad636b02bdc742fa10
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Sep 23 12:54:56 2020 +0200

    Configuration: Make it possible to have an argument file
    
    Some compilers / linkers allow arguments to be given in a file instead
    of on the command line.  We make it possible to specify this by giving
    the compiler / linker flag for it, using the config attribute
    'shared_argfileflag'.
    
    This currently only impacts the build of shared libraries, as those
    are potentially made up of a massive amount of object files, which has
    been reported to overwhelm the command line on some platforms.
    
    Fixes #12797
    
    Reviewed-by: Paul Dale <paul.dale at oracle.com>
    (Merged from https://github.com/openssl/openssl/pull/12960)

-----------------------------------------------------------------------

Summary of changes:
 Configurations/50-nonstop.conf    |  6 +++++
 Configurations/shared-info.pl     |  1 +
 Configurations/unix-Makefile.tmpl | 56 ++++++++++++++++++++++++++++++---------
 3 files changed, 50 insertions(+), 13 deletions(-)

diff --git a/Configurations/50-nonstop.conf b/Configurations/50-nonstop.conf
index e11bc77083..64385a809a 100644
--- a/Configurations/50-nonstop.conf
+++ b/Configurations/50-nonstop.conf
@@ -51,6 +51,7 @@
         cflags           => '-Wtarget=tns/r -Wsystype=guardian',
         lflags           => '-Wld="-set systype guardian"',
         shared_ldflag    => '-Wshared -Wld="-export_all -soname $(@:lib%.so=%)"',
+        shared_argfileflag => '-Wld_obey=',
     },
 
     # Itanium + guardian:
@@ -60,6 +61,7 @@
         cflags           => '-Wtarget=tns/e -Wsystype=guardian',
         lflags           => '-Weld="-set systype guardian"',
         shared_ldflag    => '-Wshared -Weld="-export_all -soname $(@:lib%.so=%)"',
+        shared_argfileflag => '-Weld_obey=',
     },
 
     # x86 + guardian:
@@ -69,6 +71,7 @@
         cflags           => '-Wtarget=tns/x -Wsystype=guardian',
         lflags           => '-Wxld="-set systype guardian"',
         shared_ldflag    => '-Wshared -Wxld="-export_all -soname $(@:lib%.so=%)"',
+        shared_argfileflag => '-Wxld_obey=',
     },
 
     # MIPS + oss (unused but present for convenience):
@@ -77,6 +80,7 @@
         cflags           => '-Wtarget=tns/r -Wsystype=oss',
         lflags           => '-Wld="-set systype oss"',
         shared_ldflag    => '-Wshared -Wld="-export_all"',
+        shared_argfileflag => '-Wld_obey=',
     },
     # Itanium + oss:
     'nonstop-archenv-itanium-oss' => {
@@ -85,6 +89,7 @@
         cflags           => '-Wtarget=tns/e -Wsystype=oss',
         lflags           => '-Weld="-set systype oss"',
         shared_ldflag    => '-Wshared -Weld="-export_all"',
+        shared_argfileflag => '-Weld_obey=',
     },
     # x86_64 + oss:
     'nonstop-archenv-x86_64-oss' => {
@@ -93,6 +98,7 @@
         cflags           => '-Wtarget=tns/x -Wsystype=oss',
         lflags           => '-Wxld="-set systype oss"',
         shared_ldflag    => '-Wshared -Wxld="-export_all"',
+        shared_argfileflag => '-Wxld_obey=',
     },
 
     # Size variants
diff --git a/Configurations/shared-info.pl b/Configurations/shared-info.pl
index 82e828dc41..2b236b4b9b 100644
--- a/Configurations/shared-info.pl
+++ b/Configurations/shared-info.pl
@@ -55,6 +55,7 @@ my %shared_info;
             # def_flag made to empty string so it still generates
             # something
             shared_defflag    => '',
+            shared_argfileflag => '@',
         };
     },
     'alpha-osf1-shared' => sub {
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
index 44bf206d00..ac19141a95 100644
--- a/Configurations/unix-Makefile.tmpl
+++ b/Configurations/unix-Makefile.tmpl
@@ -1437,6 +1437,7 @@ EOF
 
       my $simple = platform->sharedlib_simple($args{lib});
       my $full = platform->sharedlib($args{lib});
+      my $argfile = defined $target{shared_argfileflag} ? $full.".args" : undef;
       my $shared_soname = "";
       $shared_soname .= ' '.$target{shared_sonameflag}.basename($full)
           if defined $target{shared_sonameflag};
@@ -1445,30 +1446,54 @@ EOF
           if defined $target{shared_impflag};
       my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
 
-      my $objs = join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));
-      my $deps = join(" \\\n" . ' ' x (length($full) + 2),
-                      fill_lines(' ', $COLUMNS - length($full) - 2,
-                                 @objs, @defs, @deps));
-
-      my $recipe = <<"EOF";
+      # There is at least one platform where the compiler-as-linker needs to
+      # have one object file directly on the command line.  That won't hurt
+      # any other platform, so we do that for everyone when there's an argfile
+      # to be had.  This depends heavily on splice, which removes elements from
+      # the given array, and returns them so they can be captured.
+      my @argfileobjs = $argfile
+          ? splice(@objs, 1)
+          : ();
+      my $argfilecmds = $argfile
+          ? join("\n\t", map { "echo $_ >> $argfile" } @argfileobjs)
+          : undef;
+      my $argfiledeps = $argfile
+          ? join(" \\\n" . ' ' x (length($argfile) + 2),
+                 fill_lines(' ', $COLUMNS - length($full) - 2, @argfileobjs))
+          : undef;
+      my @fulldeps = (@objs, ($argfile ? $argfile : ()), @defs, @deps);
+      my @fullobjs = (
+          @objs,
+          ($argfile ? $target{shared_argfileflag}.$argfile : ())
+      );
+      my $fulldeps =
+          join(" \\\n" . ' ' x (length($full) + 2),
+               fill_lines(' ', $COLUMNS - length($full) - 2, @fulldeps));
+      my $fullobjs =
+          join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @fullobjs));
+
+      my $recipe = '';
+
+      if ($simple ne $full) {
+          if (sharedaix()) {
+              $recipe .= <<"EOF";
 $simple: $full
-EOF
-      if (sharedaix()) {
-          $recipe .= <<"EOF";
 	rm -f $simple && \\
 	\$(AR) r $simple $full
 EOF
-      } elsif ($simple ne $full) {
-          $recipe .= <<"EOF";
+          } else {
+              $recipe .= <<"EOF";
+$simple: $full
 	rm -f $simple && \\
 	ln -s $full $simple
 EOF
+          }
       }
       $recipe .= <<"EOF";
-$full: $deps
+$full: $fulldeps
 	\$(CC) \$(LIB_CFLAGS) $linkflags\$(LIB_LDFLAGS)$shared_soname$shared_imp \\
 		-o $full$shared_def \\
-		$objs \\
+		$fullobjs \\
 		$linklibs \$(LIB_EX_LIBS)
 EOF
       if (windowsdll()) {
@@ -1481,6 +1506,11 @@ EOF
 	cp -p $full fuzz/
 EOF
       }
+      $recipe .= <<"EOF" if defined $argfile;
+$argfile: $argfiledeps
+	\$(RM) $argfile
+	$argfilecmds
+EOF
       return $recipe;
   }
   sub obj2dso {


More information about the openssl-commits mailing list