diff options
author | David Edelsohn <edelsohn@gnu.org> | 2005-05-05 15:04:39 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2005-05-05 11:04:39 -0400 |
commit | c9392a2bf8ea86907553d8788c0cc9cb215b5a20 (patch) | |
tree | 9dcfd0cb6000a08749cf71a027450c4e0142afdb | |
parent | c54c7322513c602b6a0e108afc3146ce9cc2b8f8 (diff) | |
download | gcc-c9392a2bf8ea86907553d8788c0cc9cb215b5a20.zip gcc-c9392a2bf8ea86907553d8788c0cc9cb215b5a20.tar.gz gcc-c9392a2bf8ea86907553d8788c0cc9cb215b5a20.tar.bz2 |
ltconfig: Define file_list_spec.
* ltconfig: Define file_list_spec. Pass file_list_spec and
with_gnu_ld to libtool.
* ltcf-c.sh (aix[45]): Define file_list_spec.
* ltcf-cxx.sh (aix[45]): Same.
* ltcf-gcj.sh (aix[45]): Same.
* ltmain.sh: If command exceeds max_cmd_len and file_list_spec
exists, write list of input files to temporary file.
From-SVN: r99268
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | ltcf-c.sh | 1 | ||||
-rw-r--r-- | ltcf-cxx.sh | 1 | ||||
-rw-r--r-- | ltcf-gcj.sh | 1 | ||||
-rwxr-xr-x | ltconfig | 9 | ||||
-rw-r--r-- | ltmain.sh | 152 |
6 files changed, 109 insertions, 65 deletions
@@ -1,3 +1,13 @@ +2005-05-05 David Edelsohn <edelsohn@gnu.org> + + * ltconfig: Define file_list_spec. Pass file_list_spec and + with_gnu_ld to libtool. + * ltcf-c.sh (aix[45]): Define file_list_spec. + * ltcf-cxx.sh (aix[45]): Same. + * ltcf-gcj.sh (aix[45]): Same. + * ltmain.sh: If command exceeds max_cmd_len and file_list_spec + exists, write list of input files to temporary file. + 2005-05-04 Mike Stump <mrs@apple.com> * configure.in: Always pass --target to target configures as @@ -267,6 +267,7 @@ else hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes + file_list_spec='${wl}-f,' # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to diff --git a/ltcf-cxx.sh b/ltcf-cxx.sh index 48d5a53..240e40d 100644 --- a/ltcf-cxx.sh +++ b/ltcf-cxx.sh @@ -128,6 +128,7 @@ case $host_os in hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes + file_list_spec='${wl}-f,' # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to diff --git a/ltcf-gcj.sh b/ltcf-gcj.sh index 950dd00..4c6afeb 100644 --- a/ltcf-gcj.sh +++ b/ltcf-gcj.sh @@ -266,6 +266,7 @@ else hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes + file_list_spec='${wl}-f,' # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to @@ -266,6 +266,7 @@ exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= +file_list_spec= ## Tools: old_AR="$AR" @@ -2164,7 +2165,7 @@ case $ltmain in finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ hardcode_libdir_flag_spec hardcode_libdir_separator \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - compiler_c_o need_locks exclude_expsyms include_expsyms; do + compiler_c_o need_locks exclude_expsyms include_expsyms file_list_spec; do case $var in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ @@ -2557,6 +2558,12 @@ exclude_expsyms=$exclude_expsyms # Symbols that must always be exported. include_expsyms=$include_expsyms +# Specify filename containing input files. +file_list_spec=$file_list_spec + +# with_gnu_ld value +with_gnu_ld=$with_gnu_ld + EOF if test -z "$tagname"; then @@ -3272,7 +3272,6 @@ EOF : else # The command line is too long to link in one step, link piecewise. - $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we @@ -3286,6 +3285,7 @@ EOF save_libobjs=$libobjs fi save_output=$output + output_la=`$echo "X$output" | $Xsed -e "s,^.*/,,"` # Clear the reloadable object creation command queue and # initialize k to one. @@ -3295,63 +3295,87 @@ EOF delfiles= last_robj= k=1 - output=$output_objdir/$save_output-${k}.$objext - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - eval test_cmds=\"$reload_cmds $objlist $last_robj\" - if test "X$objlist" = X || - { len=`expr "X$test_cmds" : ".*"` && - test $len -le $max_cmd_len; }; then - objlist="$objlist $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test $k -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" - fi - last_robj=$output_objdir/$save_output-${k}.$objext - k=`expr $k + 1` - output=$output_objdir/$save_output-${k}.$objext - objlist=$obj - len=1 - fi - done - # Handle the remaining objects by creating one last - # 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\" - - # Set up a command to remove the reloadale object files - # after they are used. - i=0 - while test $i -lt $k - do - i=`expr $i + 1` - delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" - done - $echo "creating a temporary reloadable object file: $output" + if test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + $echo "creating GNU ld script: $output" + $echo 'INPUT (' > $output + for obj in $save_libobjs + do + $echo \""$obj"\" >> $output + done + $echo ')' >> $output + delfiles="$delfiles $output" + elif test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + $echo "creating linker input file list: $output" + : > $output + for obj in $save_libobjs + do + $echo "$obj" >> $output + done + delfiles="$delfiles $output" + output=\"$file_list_spec$output\" + else + $echo "creating reloadable object files..." + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test $len -le $max_cmd_len; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test $k -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # 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\" + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test $i -lt $k + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done - # Loop through the commands generated above and execute them. - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" + $echo "creating a temporary reloadable object file: $output" - libobjs=$output + # Loop through the commands generated above and execute them. + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + libobjs=$output # Restore the value of output. - output=$save_output + output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" @@ -3364,20 +3388,20 @@ EOF cmds=$archive_expsym_cmds else cmds=$archive_cmds - fi + fi # Append the command to remove the reloadable object files # to the just-reset $cmds. - eval cmds=\"\$cmds~$rm $delfiles\" - fi - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" + eval cmds=\"\$cmds~$rm $delfiles\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then |