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") INFILE OUTFILE"
     18   exit 1
     19 fi
     20 
     21 BUILD="${CC} -dD gen_syscalls.c -E"
     22 GEN_DEPS=1
     23 
     24 if [ $# -eq 2 ]; then
     25   BUILD="cat $1"
     26   GEN_DEPS=0
     27   shift
     28 fi
     29 OUTFILE="$1"
     30 
     31 if [ ${GEN_DEPS} -eq 1 ]; then
     32   # Generate a dependency file which helps the build tool to see when it
     33   # should regenerate ${OUTFILE}.
     34   ${BUILD} -M -MF "${OUTFILE}.d"
     35 fi
     36 
     37 # sed expression which extracts system calls that are
     38 # defined via asm/unistd.h.  It converts them from:
     39 #  #define __NR_read foo
     40 # to:
     41 # #ifdef __NR_read
     42 #  { "read", __NR_read },
     43 # #endif
     44 SED_MULTILINE='s/#define __(ARM_)?(NR_)([[:lower:]0-9_]*) (.*)$/#ifdef __\1\2\3\
     45 { "\1\3", __\1\2\3 },\
     46 #endif/g p;'
     47 
     48 cat <<-EOF > "${OUTFILE}"
     49 /* GENERATED BY MAKEFILE */
     50 #include <stddef.h>
     51 #include <asm/unistd.h>
     52 #include "libsyscalls.h"
     53 const struct syscall_entry syscall_table[] = {
     54 $(${BUILD} | sed -Ene "${SED_MULTILINE}")
     55   { NULL, -1 },
     56 };
     57 EOF
     58