This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: Add hppa*64* support to libtool in binutils
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: ross dot alexander at uk dot neceur dot com
- Cc: law at redhat dot com, aoliva at redhat dot com, binutils at sources dot redhat dot com, binutils-owner at sources dot redhat dot com, gcc-patches at gcc dot gnu dot org, libtool at sources dot redhat dot com, sje at cup dot hp dot com
- Date: Tue, 13 Aug 2002 12:37:33 -0400 (EDT)
- Subject: Re: Add hppa*64* support to libtool in binutils
> At the moment my is not to check in libtool itself for 64bit environment,
> and only use the $host_cpu variable as a guide to behaviour. I have
> build gtk+-2.0.x with a patched libtool and it basically behaved itself,
> using the --build=hppa64-hp-hpux11.00 to tell libtool to expect 64bit code.
I have a partial patch which I enclose below based on what I did to binutils
libtool. I also have a couple of hacks for automake/autoconf.
> A couple of questions.
>
> 1) Do we put check in config.guess to output hppa64-hp-hpux11.xx if it
> detects a 64bit compiler (ie $CC -E | grep __LP64__ etc)?
That would certainly seem convenient. Also, libtool runs configure
in its testsuite. When I build it for hppa64, the testsuite unfortunately
ignores the options used configuring it and as a result configures
for hppa2.0w even though it is using 64bit tools :-(
> 2) Should hardcode_into_libs be true (true for SOM, false for IA64)?
Yes. You can see the difference with chatr. The SOM linker encodes
the full pathname of libraries in the library list. Even if dynamic
searching is enabled, the dynamic loader will check the original
location for libraries.
The ELF linker for PA2.0W (and IA64) doesn't do this. It just puts the
basename of the library in the library list. There is some question
in my mind about the definition of hardcode_minus_L. I am pretty
sure the default is ok for PA2.0W and IA64.
> There is a bug in libtool-1.4e to do with rpath data polution deplibs, so I
> haven't produced a patch yet.
Isn't that only relevant when GNU ld is used? I don't think we need
anything special in that case.
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)
--- libtool.m4.orig Fri Aug 9 17:59:02 2002
+++ libtool.m4 Mon Aug 12 19:22:58 2002
@@ -1227,7 +1227,8 @@
version_type=sunos
need_lib_prefix=no
need_version=no
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64)
hardcode_into_libs=yes
dynamic_linker="$host_os dld.so"
shlibpath_var=LD_LIBRARY_PATH
@@ -1240,13 +1241,25 @@
sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
fi
sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- else
+ ;;
+ hppa*64*)
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # Also SHLIB_PATH.
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+ soname_spec='${libname}${release}.sl$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
dynamic_linker="$host_os dld.sl"
shlibpath_var=SHLIB_PATH
shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
soname_spec='${libname}${release}.sl$major'
- fi
+ ;;
+ esac
# HP-UX runs *really* slowly unless shared libraries are mode 555.
postinstall_cmds='chmod 555 $lib'
;;
@@ -1957,13 +1970,20 @@
hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64)
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- else
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - PA-RISC [[0-9]].[[0-9]]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
lt_cv_file_magic_test_file=/usr/lib/libc.sl
- fi
+ ;;
+ esac
;;
irix5* | irix6* | nonstopux*)
@@ -2661,23 +2681,36 @@
;;
hpux*)
if test $with_gnu_ld = no; then
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64 | hppa*64*)
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
- else
+ ;;
+ *)
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
- fi
+ ;;
+ esac
fi
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64)
_LT_AC_TAGVAR(hardcode_direct, $1)=no
_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- else
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
_LT_AC_TAGVAR(hardcode_direct, $1)=yes
- fi
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
- # but as the default
- # location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
case $cc_basename in
CC)
@@ -2690,11 +2723,14 @@
_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
;;
*)
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64 | hppa*64*)
_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
- else
+ ;;
+ *)
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- fi
+ ;;
+ esac
;;
esac
# Commands to make compiler produce verbose output that lists
@@ -2715,11 +2751,14 @@
_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
;;
*)
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64 | hppa*64*)
_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
- else
+ ;;
+ *)
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
- fi
+ ;;
+ esac
;;
esac
fi
@@ -3932,9 +3971,11 @@
symcode='[[ABCDGISTW]]'
;;
hpux*) # Its linker distinguishes data from code symbols
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64 | hppa*64*)
symcode='[[ABCDEGRST]]'
- fi
+ ;;
+ esac
lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
;;
@@ -4128,10 +4169,14 @@
fi
;;
hpux*)
- # PIC is the default for IA64 HP-UX, but not for PA HP-UX.
- if test "$host_cpu" != ia64; then
+ # PIC is the default for IA64 and PA2.0W HP-UX, but not for PA HP-UX.
+ case $host_cpu in
+ ia64 | hppa*64*)
+ ;;
+ *)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- fi
+ ;;
+ esac
;;
*)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
@@ -4177,16 +4222,24 @@
CC)
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- if test "$host_cpu" != ia64; then
+ case host_cpu in
+ ia64 | hppa*64*)
+ ;;
+ *)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
+ ;;
+ esac
;;
aCC)
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
_LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
- if test "$host_cpu" != ia64; then
+ case host_cpu in
+ ia64 | hppa*64*)
+ ;;
+ *)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
+ ;;
+ esac
;;
*)
;;
@@ -4370,10 +4423,14 @@
;;
hpux*)
- # PIC is the default for IA64 HP-UX, but not for PA HP-UX.
- if test "$host_cpu" != ia64; then
+ # PIC is the default for IA64 and PA2.0W HP-UX, but not for PA HP-UX.
+ case $host_cpu in
+ ia64 | hppa*64*)
+ ;;
+ *)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
- fi
+ ;;
+ esac
;;
*)
@@ -4401,9 +4458,13 @@
hpux9* | hpux10* | hpux11*)
_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
- if test "$host_cpu" != ia64; then
+ case $host_cpu in
+ ia64 | hppa*64*)
+ ;;
+ *)
_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
- fi
+ ;;
+ esac
# Is there a better lt_prog_compiler_static that works with the bundled CC?
_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
;;
@@ -4996,11 +5057,14 @@
_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
;;
*)
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64 | hppa*64*)
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
+ ;;
+ *)
_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- fi
+ ;;
+ esac
;;
esac
else
@@ -5009,27 +5073,42 @@
_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
;;
*)
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64 | hppa*64*)
_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
- else
+ ;;
+ *)
_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
+ ;;
+ esac
;;
esac
fi
- if test "$host_cpu" = ia64; then
+ case $host_cpu in
+ ia64)
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_AC_TAGVAR(hardcode_direct, $1)=no
_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
- else
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_AC_TAGVAR(hardcode_direct, $1)=yes
- fi
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
- _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
;;
irix5* | irix6* | nonstopux*)