2003-09-12 Andrew Cagney <cagney@redhat.com>
[binutils-gdb.git] / ld / genscripts.sh
index fdfc37dd89f59828f1745e246746a18327edf5bf..c06c0d54304c2f8ef603da8f2c043aae5bd34523 100755 (executable)
@@ -74,10 +74,10 @@ fi
 # the library path with the suffix applied.
 
 if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
+  LIB_PATH2=
   if [ x"$use_sysroot" != xyes ] ; then
-    LIB_PATH=${libdir}
+    LIB_PATH2=${libdir}
   fi
-  LIB_PATH2=""
   for lib in ${NATIVE_LIB_DIRS}; do
     # The "=" is harmless if we aren't using a sysroot, but also needless.
     if [ "x${use_sysroot}" = "xyes" ] ; then
@@ -95,26 +95,34 @@ if [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
        ::) LIB_PATH=${lib}${LIBPATH_SUFFIX} ;;
        *) LIB_PATH=${LIB_PATH}:${lib}${LIBPATH_SUFFIX} ;;
       esac
-      case :${LIB_PATH}${LIB_PATH2}: in
+      case :${LIB_PATH}:${LIB_PATH2}: in
        *:${lib}:*) ;;
-        *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
+       *::) LIB_PATH2=${lib} ;;
+       *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
       esac
     else
-      case :${LIB_PATH}: in
-        *:${lib}:*) ;;
-        ::) LIB_PATH=${lib} ;;
-        *) LIB_PATH=${LIB_PATH}:${lib} ;;
+      case :${LIB_PATH2}: in
+       *:${lib}:*) ;;
+       ::) LIB_PATH2=${lib} ;;
+       *) LIB_PATH2=${LIB_PATH2}:${lib} ;;
       esac
     fi
   done
-  LIB_PATH=${LIB_PATH}${LIB_PATH2}
+  case :${LIB_PATH}:${LIB_PATH2}: in
+    *:: | ::*) LIB_PATH=${LIB_PATH}${LIB_PATH2} ;;
+    *) LIB_PATH=${LIB_PATH}:${LIB_PATH2} ;;
+  esac
 fi
 
 
 # Always search $(tooldir)/lib, aka /usr/local/TARGET/lib, except for
-# sysrooted configurations.
+# sysrooted configurations and when LIBPATH=":".
 if [ "x${use_sysroot}" != "xyes" ] ; then
-  LIB_PATH=${tool_lib}:${LIB_PATH}
+  case :${LIB_PATH}: in
+  ::: | *:${tool_lib}:*) ;;
+  ::) LIB_PATH=${tool_lib} ;;
+  *) LIB_PATH=${tool_lib}:${LIB_PATH} ;;
+  esac
 fi
 
 LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
@@ -123,7 +131,7 @@ LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_
 case " $EMULATION_LIBPATH " in
   *" ${EMULATION_NAME} "*)
     test -d tmpdir || mkdir tmpdir
-    rm -f tmpdir/libpath
+    test -f tmpdir/libpath.exp || \
     echo "set libpath \"${LIB_PATH}\"" | sed -e 's/:/ /g' > tmpdir/libpath.exp
     ;;
 esac
@@ -236,6 +244,31 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; then
     rm -f ${COMBRELOC}
     COMBRELOC=
   fi
+  unset CREATE_SHLIB
+fi
+
+if test -n "$GENERATE_PIE_SCRIPT"; then
+  LD_FLAG=pie
+  DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
+  CREATE_PIE=" "
+  # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR.
+  (
+    echo "/* Script for ld -pie: link position independent executable */"
+    . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+  ) | sed -e '/^ *$/d;s/[      ]*$//' > ldscripts/${EMULATION_NAME}.xd
+  if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
+    LD_FLAG=cpie
+    DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
+    COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
+    ( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */"
+      . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+      . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+    ) | sed -e '/^ *$/d;s/[    ]*$//' > ldscripts/${EMULATION_NAME}.xdc
+    rm -f ${COMBRELOC}
+    COMBRELOC=
+  fi
+  unset CREATE_PIE
 fi
 
 case " $EMULATION_LIBPATH " in