Hi Isidor,

* Isidor Zeuner wrote on Wed, Jul 18, 2007 at 04:32:07AM CEST:
> 
> You might be interested in my patch to reduce the space complexity for
> piecewise linking. See https://savannah.gnu.org/patch/index.php?6104

Thanks for the report and patch.  I agree that quadratic space
complexity is undesirable, and outweighs spawning more rm processes
(the linking itself is typically much more costly here).  We should
however strive to remove each file exactly once (to facilitate RM=rm
rather than RM='rm -f').

I'm currently testing the patch below.  OK to apply (if it shows
no problems)?

Cheers,
Ralf

2007-07-18  Ralf Wildenhues  <[EMAIL PROTECTED]>

        * libltdl/config/ltmain.m4sh (func_mode_link): Remove each
        intermediate relinked object after use, to avoid quadratic space
        complexity when linking partially.
        Report by Isidor Zeuner <[EMAIL PROTECTED]>.

Index: libltdl/config/ltmain.m4sh
===================================================================
RCS file: /cvsroot/libtool/libtool/libltdl/config/ltmain.m4sh,v
retrieving revision 1.84
diff -u -r1.84 ltmain.m4sh
--- libltdl/config/ltmain.m4sh  12 Jul 2007 06:47:06 -0000      1.84
+++ libltdl/config/ltmain.m4sh  18 Jul 2007 20:28:24 -0000
@@ -6164,7 +6164,7 @@
                  else
                    # All subsequent reloadable object files will link in
                    # the last one created.
-                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist 
$last_robj\"
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist 
$last_robj~$RM $last_robj\"
                  fi
                  last_robj=$output_objdir/$output_la-${k}.$objext
                  k=`expr $k + 1`
@@ -6177,16 +6177,9 @@
              # reloadable object file.  All subsequent reloadable object
              # files will link in the last one created.
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist 
$last_robj\"
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist 
$last_robj~$RM $last_robj\"
+             delfiles="$delfiles $output"
 
-             # Set up a command to remove the reloadable object files
-             # after they are used.
-             i=0
-             while test "$i" -lt "$k"
-             do
-               i=`expr $i + 1`
-               delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
-             done
            else
              output=
            fi
@@ -6199,6 +6192,9 @@
              # Append the command to create the export file.
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
              eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$output"; then
+               eval concat_cmds=\"\$concat_cmds~$RM $last_robj\"
+             fi
            fi
 
            test -n "$save_libobjs" &&


Reply via email to