LDSCRIPTPATH="@binutils_ldscript_dir@" # and the scripts
SHARED_ID=""
NEWLDSCRIPT=""
+WANT_SHARED=""
# check TOOLDIR from prefix/bin/ or prefix/target-alias/bin/
[ -d "${LDSCRIPTPATH}" ] || LDSCRIPTPATH="${TOOLDIR}/../lib"
-move-rodata)
MOVDAT="y";; # Put rodata in ROM if possible
-
+ -s|-S|--strip-all|--strip-debug)
+ ;; # Ignore strip flags
+
-shared-lib-id)
shift; SHARED_ID="$1";; # Shared library ID
+ -shared|-G)
+ WANT_SHARED="y";; # Shared library
-o) shift; OFILE="$1";; # the final outfile
-o*) OFILE="`expr \"$1\" : '-o\(.*\)'`";;
ARG1="$ARG1 $1"
;;
- -v) ARG1="$ARG1 $1"
+ -v|--verbose)
+ ARG1="$ARG1 $1"
VERBOSE="y"
;;
shift
done
+ if [ "$WANT_SHARED" = "y" ]
+ then
+ if [ -z "$SHARED_ID" ]
+ then
+ echo "-shared used without passing a shared library ID"
+ exit 1
+ fi
+ fi
if [ "$FINAL" = "yes" ]
then
[ "$VERBOSE" = "y" ] && set -x
ARG1="$ARG1 $FINAL_ONLY"
NEWLDSCRIPT=`mktemp /tmp/flt-XXXXXX`
+ trap 'rm -f "$NEWLDSCRIPT"' EXIT
SEDOP=" -e s/^R_RODAT// -e /^W_RODAT/d"
OBJCOPYOP=""
if [ "$MOVDAT" ]
then
# Non application modules enter via main not _start
# SEDOP="$SEDOP -e 's/ENTRY (_start)/ENTRY (main)/'"
- SEDOP="$SEDOP -e s/\\(ENTRY.\\)(_start)/\1(lib_main)/"
+ SEDOP="$SEDOP -e s/\\(ENTRY.\\)(@SYMBOL_PREFIX@_start)/\1(lib_main)/"
OBJCOPYOP="--localize-hidden --weaken"
fi
# Provide the magic parameter that defines the library data segment pointer offset
+ GOT_ADJ=4
case "@target_cpu@" in
+ bfin) GOT_OFFSET="_current_shared_library_p5_offset_" GOT_ADJ=1;;
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`"
+ ARG1="$ARG1 -defsym $GOT_OFFSET=`expr ${SHARED_ID} '*' -${GOT_ADJ} - ${GOT_ADJ}`"
fi
- if [ "@emit_relocs@" = "yes" ]
+ if [ "@emit_relocs@" = "1" ]
then
SEDOP="$SEDOP -e s/^SINGLE_LINK://"
else
SEDOP="$SEDOP -e /^SINGLE_LINK:/d"
fi
+ if [ "@emit_ctor_dtor@" = "1" ]
+ then
+ SEDOP="$SEDOP -e s/^TOR://"
+ else
+ SEDOP="$SEDOP -e /^TOR:/d"
+ fi
# provide a default linker script, we usually need one
[ -z "$LDSCRIPT" ] && LDSCRIPT="${LDSCRIPTPATH}/elf2flt.ld"
LDSCRIPT="$NEWLDSCRIPT"
fi
- if [ "@emit_relocs@" = "yes" ]
+ if [ "@emit_relocs@" = "1" ]
then
$LINKER $EMUL $SDIRS -T $LDSCRIPT -q -o "$OFILE.gdb" $ARG1 ||exit $?
RFILE="$OFILE.gdb"
FLTFLAGS="$FLTFLAGS -a"
else
- if [ "@got_check@" = "no" ]
+ if [ "@got_check@" = "0" ]
then
$LINKER $EMUL $SDIRS -T $LDSCRIPT -Ur -d -o "$OFILE.elf" $ARG1 ||exit $?
$LINKER $EMUL $SDIRS -T $LDSCRIPT -o "$OFILE.gdb" $ARG1 ||exit $?
fi
fi
[ "$RFILE" = "$OFILE.gdb" ] || rm -f "$RFILE" # not needed for any reason
- rm -f "$NEWLDSCRIPT"
exit 0
fi