From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1551) id 05CBF3858D39; Mon, 27 Feb 2023 15:03:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 05CBF3858D39 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1677510239; bh=R93yFOWk7ulp9ArZ8b0NDJ435hdo6YYHiNXF/XZ7uzU=; h=From:To:Subject:Date:From; b=XVNO+B1Nku9TBHW1wMIPEleqYUagSH8Pgb4EWu2/1yRjzRUEi4T0zvhjKtGTV4eej 72FeKqB50M1cAoiHtjrjxAKJuUXDpjh9RS4329skKWD452NbnjzByKQsTnz9g8MfyD AGMa+KWiLrHkXypcllPx8Ijs1VtEFX2Ry3H/TBqY= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Pedro Alves To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Autogenerate gdb/syscalls/linux-defaults.xml.in (groups) from strace sources X-Act-Checkin: binutils-gdb X-Git-Author: Pedro Alves X-Git-Refname: refs/heads/master X-Git-Oldrev: 1b30ccce02065e40a6a82664e50e7f86225c7a67 X-Git-Newrev: 08c815c2bffb3b76a84c0a14acdd71cc302ed609 Message-Id: <20230227150359.05CBF3858D39@sourceware.org> Date: Mon, 27 Feb 2023 15:03:59 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D08c815c2bffb= 3b76a84c0a14acdd71cc302ed609 commit 08c815c2bffb3b76a84c0a14acdd71cc302ed609 Author: Pedro Alves Date: Fri Feb 24 18:58:31 2023 +0000 Autogenerate gdb/syscalls/linux-defaults.xml.in (groups) from strace so= urces =20 I noticed that "catch syscall group:process" doesn't catch clone3, while it does catch clone. =20 The catch syscall group information is recorded in the gdb/syscalls/linux-defaults.xml.in file, which says: =20 =20 So I looked at the strace sources, to confirm that clone3 is in fact recorded in the "process" group there too, and to check what other syscalls might be missing groups. =20 After some digging, I found that strace records the group info in C arrays, with entries like: ... [ 61] =3D { 4, TP, SEN(wait4), "wait= 4" }, [ 62] =3D { 2, TS|TP, SEN(kill), "kill= " }, [ 63] =3D { 1, 0, SEN(uname), "unam= e" }, ... =20 You can see the current master's table for Linux x86-64 here: =20 https://github.com/strace/strace/blob/e88e5e9ae6da68f22d15f9be3193b14= 12ac9aa02/src/linux/x86_64/syscallent.h =20 The column with TS|TP above is what defines each syscall's groups. So I wrote a script that extracts this information and generates linux-defaults.xml.in. =20 Approved-By: Simon Marchi Change-Id: I679d59d42fb2a914bf7a99e4c558e9696e5adff1 Diff: --- gdb/syscalls/update-linux-defaults.sh | 91 +++++++++++++++++++++++++++++++= ++++ 1 file changed, 91 insertions(+) diff --git a/gdb/syscalls/update-linux-defaults.sh b/gdb/syscalls/update-li= nux-defaults.sh new file mode 100755 index 00000000000..bf74f1e321a --- /dev/null +++ b/gdb/syscalls/update-linux-defaults.sh @@ -0,0 +1,91 @@ +#!/bin/sh + +# Copyright (C) 2023 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 . + +# Used to generate linux-defaults.xml.in, like so: +# $ ./update-linux-defaults.sh ~/strace.git + +if [ $# -lt 1 ]; then + echo "dir argument needed" + exit 1 +fi + +d=3D"$1" +shift + +if [ ! -d "$d" ]; then + echo "cannot find $d" + exit 1 +fi + +pre () +{ + year=3D$(date +%Y) + + cat < + + + +EOF + + echo '' +} + + +post () +{ + echo '' +} + +generate () +{ + pre + + grep -rn -E "T[A-Z][,|]" "$d/src/linux/" \ + | sed -e 's/\(T[A-Z][,|].*\)/\x03&/' -e 's/.*\x03//' \ + -e 's/,[ \t]*SEN[ \t]*(/, SEN(/g' \ + | grep ", SEN(" \ + | sed -e 's/\(.*\"\).*/\1/g' \ + -e 's/#64\"/\"/g' \ + | awk '{print $3 " " $1}' \ + | sort -u \ + | sed -e 's/|/,/g' \ + -e 's/TD,/descriptor,/g' \ + -e 's/TF,/file,/g' \ + -e 's/TI,/ipc,/g' \ + -e 's/TM,/memory,/g' \ + -e 's/TN,/network,/g' \ + -e 's/TP,/process,/g' \ + -e 's/TS,/signal,/g' \ + -e 's/[A-Z]\+,//g' \ + | grep -v '" $' \ + | sed 's/,$//g' \ + | awk "{printf \" \n\", \$1, \$2= }" + + post +} + +f=3Dlinux-defaults.xml.in + +echo "Generating $f" +generate > "$f"