diff --git a/ChangeLog b/ChangeLog index 5c6524fa..473d3687 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-09-08 Peter Ekberg + + * libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS) [dumpbin]: + Symbols in "pick any" sections are not global. Use + awk, not sed, in the global_symbol_pipe so that keeping + track of sections is easier. + * doc/libtool.texi (libtool script contents): Update to hint + at new findings concerning "pick any" sections. + 2005-09-08 Ralf Wildenhues * tests/early-libtool.at (config.status): Use EXEEXT diff --git a/doc/libtool.texi b/doc/libtool.texi index 15812ab2..7e3935c8 100644 --- a/doc/libtool.texi +++ b/doc/libtool.texi @@ -5017,7 +5017,8 @@ formats: @end example The @var{size} of the global variables are not zero and the @var{section} -of the global functions are not "UNDEF". +of the global functions are not "UNDEF". Symbols in "pick any" sections +("pick any" appears in the section header) are not global either. @end defvar @defvar RANLIB diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4 index f3c80da3..082512c6 100644 --- a/libltdl/m4/libtool.m4 +++ b/libltdl/m4/libtool.m4 @@ -3078,11 +3078,17 @@ for ac_symprfx in "" "_"; do # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$SED -n -e ['/ UNDEF [^|]*()/d; / 00* UNDEF /d; - s/.*().*External *| *$ac_symprfx$sympat.*/T $ac_symprfx\1 \1/p; - s/.*External *| *$ac_symprfx$sympat.*/D $ac_symprfx\1 \1/p; - s/.*().*External *| *\([@?][_A-Za-z0-9@?]*\).*/T \1 \1/p; - s/.*External *| *\([@?][_A-Za-z0-9@?]*\).*/D \1 \1/p']" + lt_cv_sys_global_symbol_pipe="$AWK [' + {last_section=section; section=\$ 3} + /Section length .*#relocs.*(pick any)/{hide[last_section]=1} + \$ 0!~/External *\|/{next} + / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next} + {if(hide[section]) next} + {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"} + {split(\$ 0, a, /\||\r/); split(a[2], s)} + s[1]~/^[@?]/{print s[1], s[1]; next} + s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))} + ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi