163184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes#!/usr/bin/awk -f
2e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# This file is part of ltrace.
3e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# Copyright (C) 2008 Juan Cespedes
4e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata#
5e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# This program is free software; you can redistribute it and/or
6e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# modify it under the terms of the GNU General Public License as
7e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# published by the Free Software Foundation; either version 2 of the
8e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# License, or (at your option) any later version.
9e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata#
10e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# This program is distributed in the hope that it will be useful, but
11e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# WITHOUT ANY WARRANTY; without even the implied warranty of
12e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# General Public License for more details.
14e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata#
15e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# You should have received a copy of the GNU General Public License
16e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# along with this program; if not, write to the Free Software
17e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18e99af270a60891e68d465c4cd97dbe29cd1a05e4Petr Machata# 02110-1301 USA
1963184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes
2063184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes# hack expression to generate arch_syscallent.h from <asm/unistd.h>
2163184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes# It reads from stdin and writes to stdout
2263184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes# Currently (linux-2.6.16), it works OK on arm
2363184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes# It is untested in other architectures
2463184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes
2563184be8c577f5799e44db2a4e312a8240ad7751Juan CespedesBEGIN {
2663184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes	max=0;
2763184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes	FS="[ \t\n()+]+";
2863184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes}
2963184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes
3063184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes{
3163184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes#      printf("/%s/%s/%s/%s/\n", $1, $2, $3, $4);
3263184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes	if (($1 ~ /^#define$/) && ($2 ~ /^__[A-Z]+_NR_/)) {
3363184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		sub(/^__[A-Z]+_NR_/,"",$2);
3463184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		if (($3>=0) && ($3<=1000)) {
3563184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			SYSCALL[$3]=$2;
3663184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			if ($3 > max) {
3763184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes				max=$3;
3863184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			}
3963184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		} else if (($3 ~ /^__[A-Z]+_NR_BASE$/) && ($4>=0) && ($4<=1000)) {
4063184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			SYSCALL[$4]=$2;
4163184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			if ($4 > max) {
4263184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes				max=$4;
4363184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			}
4463184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		}
4563184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes	}
4663184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes}
4763184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes
4863184be8c577f5799e44db2a4e312a8240ad7751Juan CespedesEND {
4963184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes	for(i=0; i<=max; i++) {
5063184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		if (!SYSCALL[i]) {
5163184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			SYSCALL[i] = i;
5263184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		}
5363184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		pad = 32 - length(SYSCALL[i]);
5463184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		if (pad<1) {
5563184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes			pad=1;
5663184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		}
5763184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes		printf("\t\"%s\",%*s/* %d */\n", SYSCALL[i], pad, "", i);
5863184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes	}
5963184be8c577f5799e44db2a4e312a8240ad7751Juan Cespedes}
60