mirror of git://gcc.gnu.org/git/gcc.git
Makefile.in (NM_FOR_TARGET): New.
* Makefile.in (NM_FOR_TARGET): New.
(libgcc.mk): Pass SHLIB_MKMAP, SHLIB_MAPFILES.
(libgcc.a, stmp-multilib): Pass NM_FOR_TARGET.
* mklibgcc.in: If SHLIB_MKMAP, build libgcc.map. Depend the
shared library build on that and EXTRA_MULTILIB_PARTS.
* mkmap-flat.awk: New file.
* mkmap-symver.awk: New file.
* libgcc-std.ver: New file.
* config/libgcc-glibc.ver: New file.
* config/ia64/libgcc-ia64.ver: New file.
* config/t-linux (SHLIB_MKMAP, SHLIB_MAPFILES): New.
(SHLIB_LINK): Add --version-script.
* config/ia64/t-ia64 (SHLIB_MAPFILES): Add libgcc-ia64.ver.
* config/mips/t-iris6 (SHLIB_MKMAP, SHLIB_MAPFILES): New.
* config/sparc/t-sol2 (SHLIB_MKMAP, SHLIB_MAPFILES): New.
(SHLIB_LINK): Add -M.
From-SVN: r36746
This commit is contained in:
parent
29279975b8
commit
83dad10cd4
|
|
@ -1,3 +1,22 @@
|
||||||
|
2000-10-05 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in (NM_FOR_TARGET): New.
|
||||||
|
(libgcc.mk): Pass SHLIB_MKMAP, SHLIB_MAPFILES.
|
||||||
|
(libgcc.a, stmp-multilib): Pass NM_FOR_TARGET.
|
||||||
|
* mklibgcc.in: If SHLIB_MKMAP, build libgcc.map. Depend the
|
||||||
|
shared library build on that and EXTRA_MULTILIB_PARTS.
|
||||||
|
* mkmap-flat.awk: New file.
|
||||||
|
* mkmap-symver.awk: New file.
|
||||||
|
* libgcc-std.ver: New file.
|
||||||
|
* config/libgcc-glibc.ver: New file.
|
||||||
|
* config/ia64/libgcc-ia64.ver: New file.
|
||||||
|
* config/t-linux (SHLIB_MKMAP, SHLIB_MAPFILES): New.
|
||||||
|
(SHLIB_LINK): Add --version-script.
|
||||||
|
* config/ia64/t-ia64 (SHLIB_MAPFILES): Add libgcc-ia64.ver.
|
||||||
|
* config/mips/t-iris6 (SHLIB_MKMAP, SHLIB_MAPFILES): New.
|
||||||
|
* config/sparc/t-sol2 (SHLIB_MKMAP, SHLIB_MAPFILES): New.
|
||||||
|
(SHLIB_LINK): Add -M.
|
||||||
|
|
||||||
2000-10-05 Richard Henderson <rth@cygnus.com>
|
2000-10-05 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
* Makefile.in (LIB2FUNCS): Add _clz.
|
* Makefile.in (LIB2FUNCS): Add _clz.
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,16 @@ RANLIB_TEST_FOR_TARGET = \
|
||||||
[ -f $(RANLIB_FOR_TARGET) ] \
|
[ -f $(RANLIB_FOR_TARGET) ] \
|
||||||
|| ( [ "$(host_canonical)" = "$(target)" ] \
|
|| ( [ "$(host_canonical)" = "$(target)" ] \
|
||||||
&& [ -f /usr/bin/ranlib -o -f /bin/ranlib ] )
|
&& [ -f /usr/bin/ranlib -o -f /bin/ranlib ] )
|
||||||
|
NM_FOR_TARGET = ` \
|
||||||
|
if [ -f $(objdir)/../binutils/nm ] ; then \
|
||||||
|
echo $(objdir)/../binutils/nm ; \
|
||||||
|
else \
|
||||||
|
if [ "$(host_canonical)" = "$(target)" ] ; then \
|
||||||
|
echo nm; \
|
||||||
|
else \
|
||||||
|
t='$(program_transform_cross_name)'; echo nm | sed -e $$t ; \
|
||||||
|
fi; \
|
||||||
|
fi`
|
||||||
|
|
||||||
# Dir to search for system headers. Overridden by cross-make.
|
# Dir to search for system headers. Overridden by cross-make.
|
||||||
SYSTEM_HEADER_DIR = /usr/include
|
SYSTEM_HEADER_DIR = /usr/include
|
||||||
|
|
@ -972,6 +982,8 @@ libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) xgcc$(exeext)
|
||||||
SHLIB_LINK='$(SHLIB_LINK)' \
|
SHLIB_LINK='$(SHLIB_LINK)' \
|
||||||
SHLIB_LIBS='$(SHLIB_LIBS)' \
|
SHLIB_LIBS='$(SHLIB_LIBS)' \
|
||||||
SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \
|
SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \
|
||||||
|
SHLIB_MKMAP='$(SHLIB_MKMAP)' \
|
||||||
|
SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
|
||||||
$(SHELL) mklibgcc > tmp-libgcc.mk
|
$(SHELL) mklibgcc > tmp-libgcc.mk
|
||||||
mv tmp-libgcc.mk libgcc.mk
|
mv tmp-libgcc.mk libgcc.mk
|
||||||
|
|
||||||
|
|
@ -991,6 +1003,7 @@ libgcc.a: $(LIBGCC_DEPS)
|
||||||
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
|
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
|
||||||
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
|
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
|
||||||
RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
|
RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
|
||||||
|
NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \
|
||||||
LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
|
LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
|
||||||
INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \
|
INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \
|
||||||
CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
|
CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
|
||||||
|
|
@ -1023,6 +1036,7 @@ stmp-multilib: $(LIBGCC_DEPS)
|
||||||
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
|
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
|
||||||
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
|
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
|
||||||
RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
|
RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
|
||||||
|
NM_FOR_TARGET="$(NM_FOR_TARGET)" AWK="$(AWK)" \
|
||||||
LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
|
LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)" \
|
||||||
INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \
|
INCLUDES="$(INCLUDES)" MAYBE_USE_COLLECT2="$(MAYBE_USE_COLLECT2)" \
|
||||||
CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
|
CONFIG_H="$(CONFIG_H)" MACHMODE_H="$(MACHMODE_H)" \
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
GCC_3.0 {
|
||||||
|
# IA-64 symbols
|
||||||
|
__ia64_nonlocal_goto
|
||||||
|
__ia64_personality_v1
|
||||||
|
__ia64_restore_stack_nonlocal
|
||||||
|
__ia64_save_stack_nonlocal
|
||||||
|
__ia64_trampoline
|
||||||
|
}
|
||||||
|
|
@ -20,6 +20,8 @@ LIB1ASMFUNCS = __divtf3 __divdf3 __divsf3 \
|
||||||
# to support the Intel assembler.
|
# to support the Intel assembler.
|
||||||
#LIBGCC2_DEBUG_CFLAGS = -g1 -P
|
#LIBGCC2_DEBUG_CFLAGS = -g1 -P
|
||||||
|
|
||||||
|
SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64.ver
|
||||||
|
|
||||||
# For svr4 we build crtbegin.o and crtend.o which serve to add begin and
|
# For svr4 we build crtbegin.o and crtend.o which serve to add begin and
|
||||||
# end labels to the .ctors and .dtors section when we link using gcc.
|
# end labels to the .ctors and .dtors section when we link using gcc.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
# In order to work around the very problems that force us to now generally
|
||||||
|
# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
|
||||||
|
# By now choosing the same version tags for these specific routines, we
|
||||||
|
# maintain enough binary compatibility to allow future versions of glibc
|
||||||
|
# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.
|
||||||
|
|
||||||
|
%inherit GCC_3.0 GLIBC_2.0
|
||||||
|
GLIBC_2.0 {
|
||||||
|
# Sampling of DImode arithmetic used by (at least) i386 and m68k.
|
||||||
|
__divdi3
|
||||||
|
__moddi3
|
||||||
|
__udivdi3
|
||||||
|
__umoddi3
|
||||||
|
|
||||||
|
# Exception handling support functions used by most everyone.
|
||||||
|
__register_frame
|
||||||
|
__register_frame_table
|
||||||
|
__deregister_frame
|
||||||
|
__register_frame_info
|
||||||
|
__deregister_frame_info
|
||||||
|
__frame_state_for
|
||||||
|
__register_frame_info_table
|
||||||
|
}
|
||||||
|
|
@ -22,4 +22,10 @@ CRTSTUFF_T_CFLAGS=-g1
|
||||||
# Build a shared libgcc library.
|
# Build a shared libgcc library.
|
||||||
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||||
-Wl,-soname,@shlib_base_name@.so.0
|
-Wl,-soname,@shlib_base_name@.so.0
|
||||||
|
# ??? Irix 6.5 seems to eat the option fine (if we somehow remove the
|
||||||
|
# -hidden_symbol option, which is documented to be ignored in conjunction
|
||||||
|
# with -exports_file), but fails to actually hide any symbols.
|
||||||
|
# -Wl,-exports_file,libgcc.map
|
||||||
SHLIB_LIBS = -lc
|
SHLIB_LIBS = -lc
|
||||||
|
SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
|
||||||
|
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver
|
||||||
|
|
|
||||||
|
|
@ -31,5 +31,8 @@ TARGET_LIBGCC2_CFLAGS = -fPIC
|
||||||
|
|
||||||
# Build a shared libgcc library.
|
# Build a shared libgcc library.
|
||||||
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||||
-Wl,-h,@shlib_base_name@.so.0 -Wl,-z,text -Wl,-z,defs
|
-Wl,-h,@shlib_base_name@.so.0 -Wl,-z,text -Wl,-z,defs \
|
||||||
|
-Wl,-M,libgcc.map
|
||||||
SHLIB_LIBS = -lc
|
SHLIB_LIBS = -lc
|
||||||
|
SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
|
||||||
|
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@ CRTSTUFF_T_CFLAGS_S = -fPIC
|
||||||
TARGET_LIBGCC2_CFLAGS = -fPIC
|
TARGET_LIBGCC2_CFLAGS = -fPIC
|
||||||
# Build a shared libgcc library.
|
# Build a shared libgcc library.
|
||||||
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
|
||||||
-Wl,--soname=@shlib_base_name@.so.0
|
-Wl,--soname=@shlib_base_name@.so.0 \
|
||||||
# ??? Do versioning later -- need to figure out how to post-process
|
-Wl,--version-script=libgcc.map
|
||||||
# the script and allow for target-specific additions.
|
|
||||||
# -Wl,--version-script=$(srcdir)/config/ver-glibc.map
|
|
||||||
SHLIB_LIBS = -lc
|
SHLIB_LIBS = -lc
|
||||||
|
SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
|
||||||
|
SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/libgcc-glibc.ver
|
||||||
|
|
||||||
# Do not build libgcc1. Let gcc generate those functions. The GNU/Linux
|
# Do not build libgcc1. Let gcc generate those functions. The GNU/Linux
|
||||||
# C library can handle them.
|
# C library can handle them.
|
||||||
LIBGCC1 =
|
LIBGCC1 =
|
||||||
CROSS_LIBGCC1 =
|
CROSS_LIBGCC1 =
|
||||||
LIBGCC1_TEST =
|
LIBGCC1_TEST =
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,129 @@
|
||||||
|
GCC_3.0 {
|
||||||
|
# libgcc1 symbols
|
||||||
|
__adddf3
|
||||||
|
__addsf3
|
||||||
|
__ashlsi3
|
||||||
|
__ashrsi3
|
||||||
|
__divdf3
|
||||||
|
__divsf3
|
||||||
|
__divsi3
|
||||||
|
__divtf3
|
||||||
|
__eqdf2
|
||||||
|
__eqsf2
|
||||||
|
__extendsfdf2
|
||||||
|
__fixdfsi
|
||||||
|
__fixsfsi
|
||||||
|
__floatsidf
|
||||||
|
__floatsisf
|
||||||
|
__gedf2
|
||||||
|
__gesf2
|
||||||
|
__gtdf2
|
||||||
|
__gtsf2
|
||||||
|
__ledf2
|
||||||
|
__lesf2
|
||||||
|
__lshrsi3
|
||||||
|
__ltdf2
|
||||||
|
__ltsf2
|
||||||
|
__modsi3
|
||||||
|
__muldf3
|
||||||
|
__mulsf3
|
||||||
|
__mulsi3
|
||||||
|
__nedf2
|
||||||
|
__negdf2
|
||||||
|
__negsf2
|
||||||
|
__nesf2
|
||||||
|
__subdf3
|
||||||
|
__subsf3
|
||||||
|
__truncdfsf2
|
||||||
|
__udivsi3
|
||||||
|
__umodsi3
|
||||||
|
|
||||||
|
# libgcc2 DImode arithmetic (for 32-bit targets).
|
||||||
|
__ashldi3
|
||||||
|
__ashrdi3
|
||||||
|
__cmpdi2
|
||||||
|
__divdi3
|
||||||
|
__ffsdi2
|
||||||
|
__fixdfdi
|
||||||
|
__fixsfdi
|
||||||
|
__fixunsdfdi
|
||||||
|
__fixunssfdi
|
||||||
|
__floatdidf
|
||||||
|
__floatdisf
|
||||||
|
__lshrdi3
|
||||||
|
__moddi3
|
||||||
|
__muldi3
|
||||||
|
__negdi2
|
||||||
|
__ucmpdi2
|
||||||
|
__udivdi3
|
||||||
|
__udivmoddi4
|
||||||
|
__umoddi3
|
||||||
|
|
||||||
|
# libgcc2 TImode arithmetic (for 64-bit targets).
|
||||||
|
__ashlti3
|
||||||
|
__ashrti3
|
||||||
|
__cmpti2
|
||||||
|
__divti3
|
||||||
|
__ffsti2
|
||||||
|
__fixdfti
|
||||||
|
__fixsfti
|
||||||
|
__lshrti3
|
||||||
|
__modti3
|
||||||
|
__multi3
|
||||||
|
__negti2
|
||||||
|
__ucmpti2
|
||||||
|
__udivmodti4
|
||||||
|
__udivti3
|
||||||
|
__umodti3
|
||||||
|
__fixunsdfti
|
||||||
|
__fixunssfti
|
||||||
|
__floattidf
|
||||||
|
__floattisf
|
||||||
|
__fixtfti
|
||||||
|
__fixunstfti
|
||||||
|
__floattitf
|
||||||
|
|
||||||
|
# Basic block profile symbols.
|
||||||
|
# ??? Some of these are for `-a', which ought to die.
|
||||||
|
__bb
|
||||||
|
__bb_exit_func
|
||||||
|
__bb_fork_func
|
||||||
|
__bb_init_func
|
||||||
|
__bb_init_trace_func
|
||||||
|
__bb_trace_func
|
||||||
|
__bb_trace_ret
|
||||||
|
|
||||||
|
# ??? Symbols that perhaps unused should be nuked.
|
||||||
|
__builtin_saveregs
|
||||||
|
__clear_cache
|
||||||
|
__dummy
|
||||||
|
__empty
|
||||||
|
__eprintf
|
||||||
|
__gcc_bcmp
|
||||||
|
__shtab
|
||||||
|
|
||||||
|
# EH symbols
|
||||||
|
__default_terminate
|
||||||
|
__deregister_frame
|
||||||
|
__deregister_frame_info
|
||||||
|
__eh_alloc
|
||||||
|
__eh_free
|
||||||
|
__eh_rtime_match
|
||||||
|
__frame_state_for
|
||||||
|
__get_dynamic_handler_chain
|
||||||
|
__get_eh_context
|
||||||
|
__get_eh_info
|
||||||
|
__get_eh_table_language
|
||||||
|
__get_eh_table_version
|
||||||
|
__register_frame
|
||||||
|
__register_frame_info
|
||||||
|
__register_frame_info_table
|
||||||
|
__register_frame_table
|
||||||
|
__rethrow
|
||||||
|
__sjpopnthrow
|
||||||
|
__sjthrow
|
||||||
|
__terminate
|
||||||
|
__throw
|
||||||
|
__throw_type_match
|
||||||
|
__unwinding_cleanup
|
||||||
|
}
|
||||||
|
|
@ -26,6 +26,8 @@
|
||||||
# SHLIB_LINK
|
# SHLIB_LINK
|
||||||
# SHLIB_LIBS
|
# SHLIB_LIBS
|
||||||
# SHLIB_MULTILIB
|
# SHLIB_MULTILIB
|
||||||
|
# SHLIB_MKMAP
|
||||||
|
# SHLIB_MAPFILES
|
||||||
|
|
||||||
# Make needs VPATH to be literal.
|
# Make needs VPATH to be literal.
|
||||||
echo 'srcdir = @srcdir@'
|
echo 'srcdir = @srcdir@'
|
||||||
|
|
@ -263,6 +265,8 @@ for file in $LIB2ADD; do
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# SHLIB_MKMAP
|
||||||
|
# SHLIB_MAPFILES
|
||||||
for ml in $MULTILIBS; do
|
for ml in $MULTILIBS; do
|
||||||
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
|
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
|
||||||
flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
|
flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
|
||||||
|
|
@ -278,6 +282,22 @@ for ml in $MULTILIBS; do
|
||||||
for o in $libgcc2_objs; do
|
for o in $libgcc2_objs; do
|
||||||
libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
|
libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
|
||||||
done
|
done
|
||||||
|
shlib_deps="$libgcc_objs"
|
||||||
|
|
||||||
|
if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" -a -z "$mapfile" ]; then
|
||||||
|
mapfile="libgcc.map"
|
||||||
|
shlib_deps="$shlib_deps $mapfile"
|
||||||
|
echo ""
|
||||||
|
echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_objs"
|
||||||
|
echo ' { $(NM_FOR_TARGET) -pg'" $libgcc_objs; echo %%; cat $SHLIB_MAPFILES; } | "'$(AWK)'" -f $SHLIB_MKMAP > "'tmp-$@'
|
||||||
|
echo ' mv tmp-$@ $@'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Depend on EXTRA_MULTILIB_PARTS, since that's where crtbegin/end
|
||||||
|
# usually are put in a true multilib situation.
|
||||||
|
for f in $EXTRA_MULTILIB_PARTS; do
|
||||||
|
shlib_deps="$shlib_deps $dir/$f"
|
||||||
|
done
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "${dir}/libgcc.a: $libgcc_objs"
|
echo "${dir}/libgcc.a: $libgcc_objs"
|
||||||
|
|
@ -295,12 +315,12 @@ for ml in $MULTILIBS; do
|
||||||
shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
|
shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
echo "${dir}/${shlib_base_name}.so: $libgcc_objs"
|
echo "${dir}/${shlib_base_name}.so: $shlib_deps"
|
||||||
echo " $SHLIB_LINK $flags -o ${shlib_base_name}.so $libgcc_objs $SHLIB_LIBS" | sed "s/@shlib_base_name@/$shlib_base_name/g"
|
echo " $SHLIB_LINK $flags -o ${shlib_base_name}.so $libgcc_objs $SHLIB_LIBS" | sed "s/@shlib_base_name@/$shlib_base_name/g"
|
||||||
elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
|
elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
|
||||||
shlib_base_name="libgcc_s";
|
shlib_base_name="libgcc_s";
|
||||||
echo ""
|
echo ""
|
||||||
echo "${shlib_base_name}.so: $libgcc_objs"
|
echo "${shlib_base_name}.so: $shlib_deps"
|
||||||
echo " $SHLIB_LINK $flags -o ${shlib_base_name}.so $libgcc_objs $SHLIB_LIBS" | sed "s/@shlib_base_name@/$shlib_base_name/g"
|
echo " $SHLIB_LINK $flags -o ${shlib_base_name}.so $libgcc_objs $SHLIB_LIBS" | sed "s/@shlib_base_name@/$shlib_base_name/g"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Generate a flat list of symbols to export.
|
||||||
|
# Contributed by Richard Henderson <rth@cygnus.com>
|
||||||
|
#
|
||||||
|
# This file is part of GNU CC.
|
||||||
|
#
|
||||||
|
# GNU CC is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# GNU CC is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with GNU CC; see the file COPYING. If not, write to
|
||||||
|
# the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
# Boston MA 02111-1307, USA.
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
state = "nm";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove comment and blank lines.
|
||||||
|
/^ *#/ || /^ *$/ {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# We begin with nm input. Collect the set of symbols that are present
|
||||||
|
# so that we can elide undefined symbols.
|
||||||
|
|
||||||
|
state == "nm" && /^%%/ {
|
||||||
|
state = "ver";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
state == "nm" && ($1 == "U" || $2 == "U") {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
state == "nm" && NF == 3 {
|
||||||
|
def[$3] = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
state == "nm" {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Now we process a simplified variant of the Solaris symbol version
|
||||||
|
# script. We have one symbol per line, no semicolons, simple markers
|
||||||
|
# for beginning and ending each section, and %inherit markers for
|
||||||
|
# describing version inheritence. A symbol may appear in more than
|
||||||
|
# one symbol version, and the last seen takes effect.
|
||||||
|
|
||||||
|
NF == 3 && $1 == "%inherit" {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
NF == 2 && $2 == "{" {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$1 == "}" {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
export[$1] = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
END {
|
||||||
|
for (sym in export)
|
||||||
|
if (def[sym])
|
||||||
|
print sym;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
# Generate an ELF symbol version map a-la Solaris and GNU ld.
|
||||||
|
# Contributed by Richard Henderson <rth@cygnus.com>
|
||||||
|
#
|
||||||
|
# This file is part of GNU CC.
|
||||||
|
#
|
||||||
|
# GNU CC is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# GNU CC is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with GNU CC; see the file COPYING. If not, write to
|
||||||
|
# the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
# Boston MA 02111-1307, USA.
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
state = "nm";
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove comment and blank lines.
|
||||||
|
/^ *#/ || /^ *$/ {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# We begin with nm input. Collect the set of symbols that are present
|
||||||
|
# so that we can not emit them into the final version script -- Solaris
|
||||||
|
# complains at us if we do.
|
||||||
|
|
||||||
|
state == "nm" && /^%%/ {
|
||||||
|
state = "ver";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
state == "nm" && ($1 == "U" || $2 == "U") {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
state == "nm" && NF == 3 {
|
||||||
|
def[$3] = 1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
state == "nm" {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Now we process a simplified variant of the Solaris symbol version
|
||||||
|
# script. We have one symbol per line, no semicolons, simple markers
|
||||||
|
# for beginning and ending each section, and %inherit markers for
|
||||||
|
# describing version inheritence. A symbol may appear in more than
|
||||||
|
# one symbol version, and the last seen takes effect.
|
||||||
|
|
||||||
|
NF == 3 && $1 == "%inherit" {
|
||||||
|
inherit[$2] = $3;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
NF == 2 && $2 == "{" {
|
||||||
|
libs[$1] = 1;
|
||||||
|
thislib = $1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$1 == "}" {
|
||||||
|
thislib = "";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ver[$1] = thislib;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
END {
|
||||||
|
for (l in libs)
|
||||||
|
output(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
function output(lib) {
|
||||||
|
if (done[lib])
|
||||||
|
return;
|
||||||
|
done[lib] = 1;
|
||||||
|
if (inherit[lib])
|
||||||
|
output(inherit[lib]);
|
||||||
|
|
||||||
|
printf("%s {\n", lib);
|
||||||
|
printf(" global:\n");
|
||||||
|
for (sym in ver)
|
||||||
|
if ((ver[sym] == lib) && (sym in def))
|
||||||
|
printf("\t%s;\n", sym);
|
||||||
|
|
||||||
|
if (inherit[lib])
|
||||||
|
printf("} %s;\n", inherit[lib]);
|
||||||
|
else
|
||||||
|
printf ("\n local:\n\t*;\n};\n");
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue