Change output so that it generates compilation rules only for the
[kopensolaris-gnu/glibc.git] / sysdeps / unix / make-syscalls.sh
index 9c97cf0..f00ce5b 100644 (file)
@@ -1,14 +1,13 @@
 #! /bin/sh
 
-# Usage: make-syscalls.sh ../sysdeps unix/common
+# Usage: make-syscalls.sh ../sysdeps/unix/common
 # Expects $sysdirs in environment.
 
-sysbase=$1; shift
 thisdir=$1; shift
 
 # Get the list of system calls for this directory.
 calls=`sed 's/#.*$//
-/^[    ]*$/d' $sysbase/$thisdir/syscalls.list`
+/^[    ]*$/d' $thisdir/syscalls.list`
 
 # Check each sysdep dir with higher priority than this one,
 # and remove from $calls all the functions found in other dirs.
@@ -21,13 +20,13 @@ for dir in $sysdirs; do
   # If a syscall specified a "caller", then only compile that syscall
   # if the caller function is also implemented in this directory.
   calls=`echo "$calls" | while read file caller rest; do
-          test -f $sysbase/$dir/$file.c && continue
-          test -f $sysbase/$dir/$file.S && continue
-          test -f $sysbase/$dir/$file.s && continue
+          test -f $dir/$file.c && continue
+          test -f $dir/$file.S && continue
+          test -f $dir/$file.s && continue
           if test x$caller != x-; then
-            test -f $sysbase/$dir/$caller.c && continue
-            test -f $sysbase/$dir/$caller.S && continue
-            test -f $sysbase/$dir/$caller.s && continue
+            test -f $dir/$caller.c && continue
+            test -f $dir/$caller.S && continue
+            test -f $dir/$caller.s && continue
           fi
           echo $file $caller $rest
          done`
@@ -48,16 +47,22 @@ echo "$calls" | while read file caller syscall nargs strong weak; do
 @@@ SYS_ify ($syscall)
 EOF
 
+  # Make sure only the first syscall rule is used, if multiple dirs
+  # define the same syscall.
+  echo "ifeq (,\$(filter $file,\$(unix-syscalls)))"
+
   # Accumulate the list of syscall files for this directory.
   echo "unix-syscalls += $file"
   test x$caller = x- || echo "unix-extra-syscalls += $file"
 
   # Emit a compilation rule for this syscall.
   echo "\
-\$(foreach o,\$(object-suffixes),\$(objpfx)$file\$o): \$(objpfx)s-proto.d
+\$(foreach o,\$(object-suffixes),\$(objpfx)$file\$o): \\
+\$(common-objpfx)s-proto.d
        (echo '#include <sysdep.h>'; \\
         echo 'PSEUDO ($strong, $syscall, $nargs)'; \\
-        echo ' ret'; \\"
+        echo ' ret'; \\
+        echo 'PSEUDO_END($strong)'; \\"
 
   # Append any weak aliases defined for this syscall function.
   for name in $weak; do
@@ -67,4 +72,6 @@ EOF
   # And finally, pipe this all into the compiler.
   echo '       ) | $(COMPILE.S) -x assembler-with-cpp -o $@ -'
 
+  echo endif
+
 done