OSDN Git Service

[PATCH] add Blackfin to the README
[uclinux-h8/elf2flt.git] / ld-elf2flt.in
index b876636..fd1faed 100644 (file)
@@ -22,6 +22,7 @@ OBJDUMP="`expr $OBJCOPY : '\(.*\)objcopy'`objdump"
 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"
@@ -52,9 +53,13 @@ then
 
                -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\(.*\)'`";;
@@ -77,7 +82,8 @@ then
                          ARG1="$ARG1 $1"
                                  ;;
 
-               -v)       ARG1="$ARG1 $1"
+               -v|--verbose)
+                                 ARG1="$ARG1 $1"
                                  VERBOSE="y"
                                  ;;
 
@@ -90,11 +96,20 @@ then
                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" ]
@@ -121,23 +136,31 @@ then
                        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"
@@ -155,13 +178,13 @@ then
                        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 $?
@@ -205,7 +228,6 @@ then
                 fi
                fi
                [ "$RFILE" = "$OFILE.gdb" ] || rm -f "$RFILE"  # not needed for any reason
-               rm -f "$NEWLDSCRIPT"
                exit 0
        fi