]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/syscalls] Generate aarch64-linux.xml.in in update-linux-from-src.sh
authorTom de Vries <tdevries@suse.de>
Mon, 9 Dec 2024 14:49:44 +0000 (15:49 +0100)
committerTom de Vries <tdevries@suse.de>
Mon, 9 Dec 2024 14:49:44 +0000 (15:49 +0100)
Currently aarch64-linux.xml.in is skipped by update-linux-from-src.sh:
...
$ ./update-linux-from-src.sh ~/upstream/linux-stable.git/
Skipping aarch64-linux.xml.in, no syscall.tbl
  ...
$
...
and instead we use update-linux.sh.

This works fine, but requires an aarch64 system with recent system headers,
which makes it harder to pick up the latest changes in the linux kernel.

Fix this by updating ./update-linux-from-src.sh to:
- build the linux kernel headers for aarch64
- use update-linux.sh with those headers to generate
  aarch64-linux.xml.in.

Regenerating aarch64-linux.xml.in using current trunk of linux-stable gives me
these changes:
...
+  <syscall name="setxattrat" number="463"/>
+  <syscall name="getxattrat" number="464"/>
+  <syscall name="listxattrat" number="465"/>
+  <syscall name="removexattrat" number="466"/>
...
which are the same changes I see for the other architectures.

Note that the first step, building the linux kernel headers is a cross build
and should work on any architecture.

But the second step, update-linux.sh uses plain gcc rather than a cross-gcc,
so there is scope for problems, but we seem to get away with this on
x86_64-linux.

So, while we could constrain this to only generate aarch64-linux.xml.in on
aarch64-linux, I'm leaving this unconstrained.

For aarch64-linux.xml.in, this doesn't matter much to me because I got an
aarch64-linux system.

But I don't have a longaarch system, and the same approach seems to work
there.  I'm leaving this for follow-up patch though.

Tested on aarch64-linux and x86_64-linux.  Verified with shellcheck.

gdb/syscalls/update-linux-from-src.sh
gdb/syscalls/update-linux.sh

index d07cbbd9b44cd8c6eec075f092a35b80fef77f80..35d78995eaa1085fed5fe245446a2844989c3736 100755 (executable)
@@ -20,6 +20,8 @@
 # Used to generate .xml.in files, like so:
 # $ ./update-linux-from-src.sh ~/linux-stable.git
 
+pwd=$(pwd -P)
+
 parse_args ()
 {
     if [ $# -lt 1 ]; then
@@ -36,6 +38,51 @@ parse_args ()
     fi
 }
 
+gen_from_kernel_headers ()
+{
+    local f
+    f="$1"
+    local arch
+    arch="$2"
+
+    echo "Generating $f"
+
+    local tmpdir
+    tmpdir=$(mktemp -d)
+    trap 'rm -Rf $tmpdir/*' EXIT
+
+    local build
+    build="$tmpdir"/build
+    local install
+    install="$tmpdir"/install
+    local usr
+    usr="$install"/usr
+    local include
+    include="$usr"/include
+
+    mkdir -p "$build" "$usr"
+
+    (
+       cd "$build" || exit 1
+
+       make \
+           -f "$d"/Makefile \
+           ARCH="$arch" \
+           INSTALL_HDR_PATH="$usr" \
+           headers_install \
+           > "$build"/header_install.log \
+           2>&1
+
+       "$pwd"/update-linux.sh \
+           "$pwd"/"$f" \
+           -nostdinc \
+           -isystem "$include"
+    )
+
+    trap '' EXIT
+    rm -Rf "$tmpdir"
+}
+
 pre ()
 {
     local f
@@ -274,7 +321,8 @@ regen ()
            return
            ;;
        aarch64-linux.xml.in)
-           echo "Skipping $f, no syscall.tbl"
+           # No syscall.tbl.
+           gen_from_kernel_headers "$f" arm64
            return
            ;;
        arm-linux.xml.in)
index 066572cbec9477a13d6d7c1766e3bd9509770992..127d92192d158d7a7d7ff44210a7462f214cb413 100755 (executable)
@@ -67,7 +67,7 @@ EOF
 
     echo '<syscalls_info>'
 
-    echo '#include <sys/syscall.h>' \
+    echo '#include <asm/unistd.h>' \
        | gcc -E - -dD "$@" \
        | grep -E '#define __NR_' \
        | while read -r line; do