[PATCH] [gdb/syscalls] Generate aarch64-linux.xml.in in update-linux-from-src.sh

Tom de Vries tdevries@suse.de
Mon Dec 9 14:50:22 GMT 2024


On 11/26/24 15:22, Tom de Vries wrote:
> 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.
> 

Pushed.

Thanks,
- Tom

> Tested on aarch64-linux and x86_64-linux.  Verified with shellcheck.
> ---
>   gdb/syscalls/update-linux-from-src.sh | 50 ++++++++++++++++++++++++++-
>   gdb/syscalls/update-linux.sh          |  2 +-
>   2 files changed, 50 insertions(+), 2 deletions(-)
> 
> diff --git a/gdb/syscalls/update-linux-from-src.sh b/gdb/syscalls/update-linux-from-src.sh
> index d07cbbd9b44..35d78995eaa 100755
> --- a/gdb/syscalls/update-linux-from-src.sh
> +++ b/gdb/syscalls/update-linux-from-src.sh
> @@ -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)
> diff --git a/gdb/syscalls/update-linux.sh b/gdb/syscalls/update-linux.sh
> index 066572cbec9..127d92192d1 100755
> --- a/gdb/syscalls/update-linux.sh
> +++ b/gdb/syscalls/update-linux.sh
> @@ -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
> 
> base-commit: dfc65d0579444ec020b309637654cbe17cb9dc60



More information about the Gdb-patches mailing list