summaryrefslogtreecommitdiff
path: root/gcc/mklibgcc.in
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/mklibgcc.in')
-rw-r--r--gcc/mklibgcc.in35
1 files changed, 29 insertions, 6 deletions
diff --git a/gcc/mklibgcc.in b/gcc/mklibgcc.in
index de633497973..8f9174a0f5d 100644
--- a/gcc/mklibgcc.in
+++ b/gcc/mklibgcc.in
@@ -97,6 +97,7 @@ done
libgcc2_objs=""
libgcc2_st_objs=""
+libgcc2_eh_objs=""
for name in $LIB2FUNCS; do
for ml in $MULTILIBS; do
@@ -200,7 +201,11 @@ for file in $LIB2ADDEH; do
echo $out: stmp-dirs $file
echo " $gcc_compile" $flags -fexceptions -c $file -o $out
done
- libgcc2_objs="$libgcc2_objs ${oname}${objext}"
+ if [ "$SHLIB_LINK" ]; then
+ libgcc2_eh_objs="$libgcc2_eh_objs ${oname}${objext}"
+ else
+ libgcc2_objs="$libgcc2_objs ${oname}${objext}"
+ fi
done
for file in $LIB2ADD_ST; do
@@ -228,13 +233,18 @@ for ml in $MULTILIBS; do
flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
libgcc_objs=""
+ libgcc_eh_objs=""
for o in $libgcc1_objs; do
libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
done
for o in $libgcc2_objs; do
libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
done
- shlib_deps="$libgcc_objs"
+ for o in $libgcc2_eh_objs; do
+ libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o"
+ done
+ libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs"
+ shlib_deps="$libgcc_sh_objs"
libgcc_st_objs=""
for o in $libgcc2_st_objs; do
@@ -244,8 +254,8 @@ for ml in $MULTILIBS; do
if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" -a -z "$mapfile" ]; then
mapfile="libgcc.map"
echo ""
- echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_objs"
- echo ' { $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_objs; echo %%; cat $SHLIB_MAPFILES; } | "'$(AWK)'" -f $SHLIB_MKMAP > "'tmp-$@'
+ echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs"
+ echo ' { $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; cat $SHLIB_MAPFILES; } | "'$(AWK)'" -f $SHLIB_MKMAP > "'tmp-$@'
echo ' mv tmp-$@ $@'
fi
shlib_deps="$shlib_deps $mapfile"
@@ -265,6 +275,15 @@ for ml in $MULTILIBS; do
echo ' else true; fi;'
if [ "$SHLIB_LINK" ]; then
+
+ echo ""
+ echo "${dir}/libgcc_eh.a: $libgcc_eh_objs"
+ echo " -rm -rf ${dir}/libgcc_eh.a"
+ echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_objs
+ echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\
+ echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a ';' \\
+ echo ' else true; fi;'
+
if [ -z "$SHLIB_MULTILIB" ]; then
if [ "$dir" = "." ]; then
shlib_base_name="libgcc_s";
@@ -276,7 +295,7 @@ for ml in $MULTILIBS; do
echo " $SHLIB_LINK" \
| sed -e "s%@multilib_flags@%$flags%g" \
-e "s%@multilib_dir@%$dir%g" \
- -e "s%@shlib_objs@%$libgcc_objs%g" \
+ -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
-e "s%@shlib_base_name@%$shlib_base_name%g" \
-e "s%@shlib_map_file@%$mapfile%g"
elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
@@ -286,7 +305,7 @@ for ml in $MULTILIBS; do
echo " $SHLIB_LINK" \
| sed -e "s%@multilib_flags@%$flags%g" \
-e "s%@multilib_dir@%$dir%g" \
- -e "s%@shlib_objs@%$libgcc_objs%g" \
+ -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
-e "s%@shlib_base_name@%$shlib_base_name%g" \
-e "s%@shlib_map_file@%$mapfile%g"
fi
@@ -320,6 +339,7 @@ for ml in $MULTILIBS; do
fi
all="$all ${dir}/libgcc.a"
if [ "$SHLIB_LINK" ]; then
+ all="$all ${dir}/libgcc_eh.a"
if [ -z "$SHLIB_MULTILIB" ]; then
if [ "$dir" = "." ]; then
suff="";
@@ -379,6 +399,9 @@ for ml in $MULTILIBS; do
echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
if [ "$SHLIB_LINK" ]; then
+ echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
+ echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
+
if [ -z "$SHLIB_MULTILIB" ]; then
if [ "$dir" = "." ]; then
shlib_base_name="libgcc_s";