| #! /bin/sh | 
 |  | 
 | # Copyright (C) 2018-2022 Free Software Foundation, Inc. | 
 | # | 
 | # This file is part of GDB. | 
 | # | 
 | # This program is free software; you can redistribute it and/or modify | 
 | # it under the terms of the GNU General Public License as published by | 
 | # the Free Software Foundation; either version 3 of the License, or | 
 | # (at your option) any later version. | 
 | # | 
 | # This program is distributed in the hope that it will be useful, | 
 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 | # GNU General Public License for more details. | 
 | # | 
 | # You should have received a copy of the GNU General Public License | 
 | # along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
 |  | 
 | # Usage: update-freebsd.sh <path-to-syscall.h> | 
 | # Update the freebsd.xml file. | 
 | # | 
 | # FreeBSD uses the same list of system calls on all architectures. | 
 | # The list is defined in the sys/kern/syscalls.master file in the | 
 | # FreeBSD source tree.  This file is used as an input to generate | 
 | # several files that are also stored in FreeBSD's source tree.  This | 
 | # script parses one of those generated files (sys/sys/syscall.h) | 
 | # rather than syscalls.master as syscall.h is easier to parse. | 
 |  | 
 | if [ $# -ne 1 ]; then | 
 |    echo "Error: Path to syscall.h missing. Aborting." | 
 |    echo "Usage: update-freebsd.sh <path-to-syscall.h>" | 
 |    exit 1 | 
 | fi | 
 |  | 
 | cat > freebsd.xml.tmp <<EOF | 
 | <?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*-  --> | 
 | <!-- vi:set ro: --> | 
 | <!-- Copyright (C) 2009-2020 Free Software Foundation, Inc. | 
 |  | 
 |      Copying and distribution of this file, with or without modification, | 
 |      are permitted in any medium without royalty provided the copyright | 
 |      notice and this notice are preserved.  --> | 
 |  | 
 | <!DOCTYPE feature SYSTEM "gdb-syscalls.dtd"> | 
 |  | 
 | <!-- This file was generated using the following file: | 
 |  | 
 |      /usr/src/sys/sys/syscall.h | 
 |  | 
 |      The file mentioned above belongs to the FreeBSD Kernel.  --> | 
 |  | 
 | <syscalls_info> | 
 | EOF | 
 |  | 
 | awk ' | 
 | /MAXSYSCALL/ { | 
 |     next | 
 | } | 
 | /^#define/ { | 
 |     sub(/^SYS_/,"",$2); | 
 |     printf "  <syscall name=\"%s\" number=\"%s\"", $2, $3 | 
 |     if (sub(/^freebsd[0-9]*_/,"",$2) != 0) | 
 |         printf " alias=\"%s\"", $2 | 
 |     printf "/>\n" | 
 | } | 
 | /\/\* [0-9]* is obsolete [a-z_]* \*\// { | 
 |     printf "  <syscall name=\"%s\" number=\"%s\"/>\n", $5, $2 | 
 | } | 
 | /\/\* [0-9]* is freebsd[0-9]* [a-z_]* \*\// { | 
 |     printf "  <syscall name=\"%s_%s\" number=\"%s\" alias=\"%s\"/>\n", $4, $5, $2, $5 | 
 | }' "$1" >> freebsd.xml.tmp | 
 |  | 
 | cat >> freebsd.xml.tmp <<EOF | 
 | </syscalls_info> | 
 | EOF | 
 |  | 
 | ../../move-if-change freebsd.xml.tmp freebsd.xml |