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