# Copyright (C) 2002,2003 David McCullough <davidm@snapgear.com>
# Copyright (C) 2000, Lineo. davidm@lineo.com
#
+# This is Free Software, under the GNU Public Licence v2 or greater.
+#
LINKER="$0.real" # the original renamed-linker
ELF2FLT="`expr $0 : '\(.*\)ld'`elf2flt"
TOOLDIR="`dirname $0`" # let gcc find the tools for us
+LDSCRIPTPATH="${TOOLDIR}/../@target_alias@/lib" # and the scripts
SHARED_ID=""
NEWLDSCRIPT=""
+# check TOOLDIR from prefix/bin/ or prefix/target-alias/bin/
+[ -d "${TOOLDIR}/../@target_alias@/lib" ] || LDSCRIPTPATH="${TOOLDIR}/../lib"
+
#
# if we have the elf2flt options, run it
#
FINAL="yes"
FINAL_ONLY=
MOVDAT=
+ VERBOSE=
while [ $# -ne 0 ]
do
ARG1="$ARG1 $1"
;;
+ -v) ARG1="$ARG1 $1"
+ VERBOSE="y"
+ ;;
+
+ -m) shift; EMUL="-m $1";; # ld emulations for h8300
+ -m*) EMUL=$1;;
+
*) ARG1="$ARG1 $1"
;;
esac
if [ "$FINAL" = "yes" ]
then
+ [ "$VERBOSE" = "y" ] && set -x
ARG1="$ARG1 $FINAL_ONLY"
NEWLDSCRIPT=`mktemp /tmp/flt-XXXXXX`
SEDOP=" -e s/^R_RODAT// -e /^W_RODAT/d"
fi
# Provide the magic parameter that defines the library data segment pointer offset
- ARG1="$ARG1 -defsym _current_shared_library_a5_offset_=`expr ${SHARED_ID} '*' -4 - 4`"
+ case "@target_cpu@" in
+ h8300) GOT_OFFSET="__current_shared_library_er5_offset_";;
+ *) GOT_OFFSET="_current_shared_library_a5_offset_";;
+ esac
+ ARG1="$ARG1 -defsym $GOT_OFFSET=`expr ${SHARED_ID} '*' -4 - 4`"
fi
# provide a default linker script, we usually need one
- [ -z "$LDSCRIPT" ] && LDSCRIPT="@prefix@/@target_alias@/lib/elf2flt.ld"
+ [ -z "$LDSCRIPT" ] && LDSCRIPT="${LDSCRIPTPATH}/elf2flt.ld"
# if we can find the linker script we preprocess it, otherwise
# we assume the user knows what they are doing
if [ -f "$LDSCRIPT" ]; then
sed $SEDOP < "$LDSCRIPT" > "$NEWLDSCRIPT"
LDSCRIPT="$NEWLDSCRIPT"
- elif [ -f "@prefix@/@target_alias@/lib/$LDSCRIPT" ]; then
- sed $SEDOP < "@prefix@/@target_alias@/lib/$LDSCRIPT" > "$NEWLDSCRIPT"
+ elif [ -f "${LDSCRIPTPATH}/$LDSCRIPT" ]; then
+ sed $SEDOP < "${LDSCRIPTPATH}/$LDSCRIPT" > "$NEWLDSCRIPT"
LDSCRIPT="$NEWLDSCRIPT"
- elif [ -f "@prefix@/@target_alias@/lib/ldscripts/$LDSCRIPT" ]; then
- sed $SEDOP < "@prefix@/@target_alias@/lib/ldscripts/$LDSCRIPT" > "$NEWLDSCRIPT"
+ elif [ -f "${LDSCRIPTPATH}/ldscripts/$LDSCRIPT" ]; then
+ sed $SEDOP < "${LDSCRIPTPATH}/ldscripts/$LDSCRIPT" > "$NEWLDSCRIPT"
LDSCRIPT="$NEWLDSCRIPT"
fi
if [ "@got_check@" = "no" ]
then
- $LINKER $SDIRS -T $LDSCRIPT -Ur -d -o "$OFILE.elf" $ARG1 ||exit $?
- $LINKER $SDIRS -T $LDSCRIPT -o "$OFILE.gdb" $ARG1 ||exit $?
+ $LINKER $EMUL $SDIRS -T $LDSCRIPT -Ur -d -o "$OFILE.elf" $ARG1 ||exit $?
+ $LINKER $EMUL $SDIRS -T $LDSCRIPT -o "$OFILE.gdb" $ARG1 ||exit $?
else
- $LINKER -r -d -o "$OFILE.elf2flt" $ARG1 ||exit $?
- $LINKER $SDIRS -T $LDSCRIPT -Ur -o "$OFILE.elf" "$OFILE.elf2flt" ||exit $?
- $LINKER $SDIRS -T $LDSCRIPT -o "$OFILE.gdb" "$OFILE.elf2flt" ||exit $?
+ $LINKER $EMUL -r -d -o "$OFILE.elf2flt" $ARG1 ||exit $?
+ $LINKER $EMUL $SDIRS -T $LDSCRIPT -Ur -o "$OFILE.elf" "$OFILE.elf2flt" ||exit $?
+ $LINKER $EMUL $SDIRS -T $LDSCRIPT -o "$OFILE.gdb" "$OFILE.elf2flt" ||exit $?
rm -f "$OFILE.elf2flt"
fi
if grep _GLOBAL_OFFSET_TABLE_ "$OFILE.gdb" > /dev/null