4 # Probe gdb for supported architectures.
6 # This is required to support testing of the gdbstub as its hard to
7 # handle errors gracefully during the test. Instead this script when
8 # passed a GDB binary will probe its architecture support and return a
9 # string of supported arches, stripped of guff.
11 # Copyright 2023 Linaro Ltd
13 # Author: Alex Bennée <alex.bennee@linaro.org>
15 # This work is licensed under the terms of the GNU GPL, version 2 or later.
16 # See the COPYING file in the top-level directory.
18 # SPDX-License-Identifier: GPL-2.0-or-later
22 from subprocess
import check_output
, STDOUT
24 # mappings from gdb arch to QEMU target
27 "aarch64" : ["aarch64", "aarch64_be"],
29 "armv8-a" : ["aarch64", "aarch64_be"],
32 # no hexagon in upstream gdb
35 "i386:x86-64" : "x86_64",
36 "Loongarch64" : "loongarch64",
38 "MicroBlaze" : "microblaze",
39 "mips:isa64" : ["mips64", "mips64el"],
42 "powerpc:common" : "ppc",
43 "powerpc:common64" : ["ppc64", "ppc64le"],
44 "riscv:rv32" : "riscv32",
45 "riscv:rv64" : "riscv64",
46 "s390:64-bit" : "s390x",
47 "sh4" : ["sh4", "sh4eb"],
49 "sparc:v8plus": "sparc32plus",
50 "sparc:v9a" : "sparc64",
51 # no tricore in upstream gdb
52 "xtensa" : ["xtensa", "xtensaeb"]
56 gdb_out
= check_output([gdb
,
57 "-ex", "set architecture",
58 "-ex", "quit"], stderr
=STDOUT
)
60 m
= re
.search(r
"Valid arguments are (.*)",
61 gdb_out
.decode("utf-8"))
66 for arch
in m
.group(1).split(", "):
68 mapping
= mappings
[arch
]
69 if isinstance(mapping
, str):
70 valid_arches
.add(mapping
)
73 valid_arches
.add(entry
)
78 parser
= argparse
.ArgumentParser(description
='Probe GDB Architectures')
79 parser
.add_argument('gdb', help='Path to GDB binary.')
81 args
= parser
.parse_args()
83 supported
= do_probe(args
.gdb
)
85 print(" ".join(supported
))
87 if __name__
== '__main__':