Don't allow use when using _FILE_OFFSET_BITS=64.
[kopensolaris-gnu/glibc.git] / sysdeps / unix / make-syscalls.sh
1 #! /bin/sh
2
3 # Usage: make-syscalls.sh ../sysdeps/unix/common
4 # Expects $sysdirs in environment.
5
6 thisdir=$1; shift
7
8 # Get the list of system calls for this directory.
9 calls=`sed 's/#.*$//
10 /^[     ]*$/d' $thisdir/syscalls.list`
11
12 # Check each sysdep dir with higher priority than this one,
13 # and remove from $calls all the functions found in other dirs.
14 for dir in $sysdirs; do
15
16   # Punt when we reach the directory defining these syscalls.
17   test $dir = $thisdir && break
18
19   # Remove each syscall that is implemented by a file in $dir.
20   # If a syscall specified a "caller", then only compile that syscall
21   # if the caller function is also implemented in this directory.
22   calls=`echo "$calls" | while read file caller rest; do
23            test -f $dir/$file.c && continue
24            test -f $dir/$file.S && continue
25            test -f $dir/$file.s && continue
26            if test x$caller != x-; then
27              test -f $dir/$caller.c && continue
28              test -f $dir/$caller.S && continue
29              test -f $dir/$caller.s && continue
30            fi
31            echo $file $caller $rest
32          done`
33
34 done
35
36 # Any calls left?
37 test -n "$calls" || exit 0
38
39 files=
40
41 # Emit rules to compile the syscalls remaining in $calls.
42 echo "$calls" | while read file caller syscall nargs strong weak; do
43
44   # Figure out if $syscall is defined with a number in syscall.h.
45   $asm_CPP - << EOF | grep "^@@@ .*$syscall" >/dev/null && continue
46 #include <sysdep.h>
47 @@@ SYS_ify ($syscall)
48 EOF
49
50   case $weak in
51   *@*)
52     # The versioned symbols are only in the shared library.
53     echo "ifneq (,\$(filter .os,\$(object-suffixes)))"
54     ;;
55   esac
56
57   # Make sure only the first syscall rule is used, if multiple dirs
58   # define the same syscall.
59   echo "ifeq (,\$(filter $file,\$(unix-syscalls)))"
60
61   # Accumulate the list of syscall files for this directory.
62   echo "unix-syscalls += $file"
63   test x$caller = x- || echo "unix-extra-syscalls += $file"
64
65   # Emit a compilation rule for this syscall.
66   case $weak in
67   *@*)
68     # The versioned symbols are only in the shared library.
69     echo "\
70 shared-only-routines += $file
71 \$(objpfx)${file}.os: \\"
72     ;;
73   *)
74     echo "\
75 \$(foreach o,\$(object-suffixes),\$(objpfx)$file\$o): \\"
76     ;;
77   esac
78   echo "\$(common-objpfx)s-proto.d
79         (echo '#include <sysdep.h>'; \\
80          echo 'PSEUDO ($strong, $syscall, $nargs)'; \\
81          echo ' ret'; \\
82          echo 'PSEUDO_END($strong)'; \\"
83
84   # Append any weak aliases or versions defined for this syscall function.
85
86   # A shortcoming in the current gas is that it will only allow one
87   # version-alias per symbol.  So we create new strong aliases as needed.
88   vcount=""
89
90   for name in $weak; do
91     case $name in
92       *@@*)
93         base=`echo $name | sed 's/@@.*//'`
94         ver=`echo $name | sed 's/.*@@//'`
95         if test -z "$vcount" ; then
96           source=$strong
97           vcount=1
98         else
99           source="${strong}_${vcount}"
100           vcount=`expr $vcount + 1`
101           echo "         echo 'strong_alias ($strong, $source)'; \\"
102         fi
103         echo "   echo 'default_symbol_version($source, $base, $ver)'; \\"
104         ;;
105       *@*)
106         base=`echo $name | sed 's/@.*//'`
107         ver=`echo $name | sed 's/.*@//'`
108         if test -z "$vcount" ; then
109           source=$strong
110           vcount=1
111         else
112           source="${strong}_${vcount}"
113           vcount=`expr $vcount + 1`
114           echo "         echo 'strong_alias ($strong, $source)'; \\"
115         fi
116         echo "   echo 'symbol_version($source, $base, $ver)'; \\"
117         ;;
118       *)
119         echo "   echo 'weak_alias ($strong, $name)'; \\"
120         ;;
121     esac
122   done
123
124   # And finally, pipe this all into the compiler.
125   echo '        ) | $(COMPILE.S) -x assembler-with-cpp -o $@ -'
126
127   echo endif
128
129   case $weak in
130   *@*)
131     # The versioned symbols are only in the shared library.
132     echo endif
133     ;;
134   esac
135
136 done