Home | History | Annotate | Download | only in minijail
      1 #!/bin/sh
      2 
      3 # Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 # Generates a header file with a system call table made up of "name",
      8 # syscall_nr entries by including the build target <asm/unistd.h> and
      9 # emitting the list of defines.  Use of the compiler is needed to
     10 # dereference the actual provider of syscall definitions.
     11 #   E.g., asm/unistd_32.h or asm/unistd_64.h, etc.
     12 
     13 set -e
     14 
     15 if [ $# -ne 1 ] && [ $# -ne 2 ]; then
     16   echo "Usage: $(basename "$0") OUTFILE"
     17   echo "Usage: $(basename "$0") CC OUTFILE"
     18   exit 1
     19 fi
     20 
     21 if [ $# -eq 2 ]; then
     22   CC="$1"
     23   shift
     24 fi
     25 OUTFILE="$1"
     26 
     27 # Generate a dependency file which helps the build tool to see when it
     28 # should regenerate ${OUTFILE}.
     29 echo '#include <asm/unistd.h>' | ${CC} - -E -M -MF "${OUTFILE}.d.tmp"
     30 # Correct the output filename.
     31 (echo "${OUTFILE}: \\" ; sed -e 's/^-\.o://' -e 's/^-://' "${OUTFILE}.d.tmp") \
     32   > "${OUTFILE}.d"
     33 rm "${OUTFILE}.d.tmp"
     34 
     35 # sed expression which extracts system calls that are
     36 # defined via asm/unistd.h.  It converts them from:
     37 #  #define __NR_read foo
     38 # to:
     39 # #ifdef __NR_read
     40 #  { "read", __NR_read },
     41 # #endif
     42 SED_MULTILINE='s/#define __(ARM_)?(NR_)([[:lower:]0-9_]*) (.*)$/#ifdef __\1\2\3\
     43 { "\1\3", __\1\2\3 },\
     44 #endif/g p;'
     45 
     46 cat <<-EOF > "${OUTFILE}"
     47 /* GENERATED BY MAKEFILE */
     48 #include <stddef.h>
     49 #include <asm/unistd.h>
     50 #include "libsyscalls.h"
     51 const struct syscall_entry syscall_table[] = {
     52 $(echo '#include <asm/unistd.h>' | \
     53   ${CC} -dD - -E | sed -Ene "${SED_MULTILINE}")
     54   { NULL, -1 },
     55 };
     56 EOF
     57