#!/usr/bin/awk -f
# This file is part of ltrace.
# Copyright (C) 2006 Ian Wienand
# Copyright (C) 1999 Juan Cespedes
#
# 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 2 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, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
# 02110-1301 USA

# hack expression to generate arch/syscallent.h from <asm/unistd.h>
# It reads from stdin and writes to stdout
# It should work OK on i386,m68k,arm,ia64
# It does NOT work in mips, s390
# It is untested in other architectures

BEGIN {
	max=0;
	FS="[ \t\n()+]+";
}

{
	#debug
	#printf("/%s/%s/%s/%s/\n", $1, $2, $3, $4);
	if (($1 ~ /^#define$/) && ($2 ~ /^__NR_/)) {
	        #ia64 syscalls are > 1000 (lower for x86 compat)
		if (($3>=0) && ($3<=2000)) {
			SYSCALL[$3]=substr($2,6);
			if ($3 > max) {
				max=$3;
			}
		} else if (($3 ~ /^__NR_SYSCALL_BASE$/) && ($4>=0) && ($4<=1000)) {
			SYSCALL[$4]=substr($2,6);
			if ($4 > max) {
				max=$4;
			}
		}
	}
}

END {
	for(i=0; i<=max; i++) {
		if (!SYSCALL[i]) {
			SYSCALL[i] = i;
		}
		pad = 32 - length(SYSCALL[i]);
		if (pad<1) {
			pad=1;
		}
		printf("\t\"%s\",%*s/* %d */\n", SYSCALL[i], pad, "", i);
	}
}

