#!/bin/sh # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Generates a header file with a system call table made up of "name", # syscall_nr entries by including the build target <asm/unistd.h> and # emitting the list of defines. Use of the compiler is needed to # dereference the actual provider of syscall definitions. # E.g., asm/unistd_32.h or asm/unistd_64.h, etc. set -e if [ $# -ne 1 ] && [ $# -ne 2 ]; then echo "Usage: $(basename "$0") OUTFILE" echo "Usage: $(basename "$0") CC OUTFILE" exit 1 fi if [ $# -eq 2 ]; then CC="$1" shift fi OUTFILE="$1" # sed expression which extracts system calls that are # defined via asm/unistd.h. It converts them from: # #define __NR_read foo # to: # #ifdef __NR_read # { "read", __NR_read }, # #endif SED_MULTILINE='s/#define __(ARM_)?(NR_)([[:lower:]0-9_]*) (.*)$/#ifdef __\1\2\3\ { "\1\3", __\1\2\3 },\ #endif/g p;' cat <<-EOF > "${OUTFILE}" /* GENERATED BY MAKEFILE */ #include <stddef.h> #include <asm/unistd.h> #include "libsyscalls.h" const struct syscall_entry syscall_table[] = { $(echo '#include <asm/unistd.h>' | \ ${CC} -dD - -E | sed -Ene "${SED_MULTILINE}") { NULL, -1 }, }; EOF