#!/usr/bin/perl
# This file is part of ltrace.
# Copyright (C) 2006 Heiko Carstens, IBM Corporation
#
# 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

#
# Generate syscall table for s390/s390x
#
# Use this on arch/s390/kernel/syscall.s after removing the first few
# nonsyscall lines.
#
# cat syscall.s | mksyscallent_s390 > syscalls31.h
# cat syscall.s | mksyscallent_s390 -x > syscalls64.h
#

use Getopt::Std;
use integer;
getopts('x');
$i = 0;
$s390x = 0;
$opt_x and $s390x = 1;

while (<>) {
	chomp;

	if ($s390x==1) {
		   s/^SYSCALL\([^,]*,//;
	} else {
	           s/^SYSCALL\(//;
	}

	s/,.*//;
	s/^sys_//;
	s/^s390[x]*_//;
	s/_glue$//;
	s/^ni_syscall.*/$i/i;
	$len = 32 - length();
	$tab = $len / 8;
	$space = $len % 8;
	print "    \"$_\"," ," " x $space , "\t" x $tab, " \/* $i \*\/\n";
	$i++;
}
