OSDN Git Service

A new config.sub with blackfin support
[uclinux-h8/elf2flt.git] / ld-elf2flt.in
index ba93801..140b4f9 100644 (file)
@@ -9,13 +9,19 @@
 # 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
 #
@@ -71,6 +77,9 @@ then
                                  VERBOSE="y"
                                  ;;
 
+               -m)       shift; EMUL="-m $1";;        # ld emulations for h8300
+               -m*)      EMUL=$1;;
                *)        ARG1="$ARG1 $1"
                                  ;;
                esac
@@ -111,33 +120,37 @@ then
                        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