summaryrefslogtreecommitdiff
path: root/poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch
diff options
context:
space:
mode:
authorPatrick Williams <patrick@stwcx.xyz>2023-06-16 00:18:34 +0300
committerPatrick Williams <patrick@stwcx.xyz>2023-06-16 01:27:11 +0300
commit4f6b1c0dcf9f9cb734f71b277af913e0d58c503f (patch)
tree6ca6709c6d54d63d4f9e1e5a3e2cefbb5cee09ce /poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch
parentfb02b9d8f5c7ab746a92c5f998f48983543d29ce (diff)
downloadopenbmc-4f6b1c0dcf9f9cb734f71b277af913e0d58c503f.tar.xz
subtree updates
poky: ddb298ce89..fc25449687: Alex Kiernan (1): rust: Upgrade 1.68.1 -> 1.68.2 Alexander Kanavin (5): selftest/distrodata: clean up exception lists in recipe maintainers test dhcpcd: use git instead of tarballs perl: patch out build paths from native binaries libgcrypt: update 1.10.1 -> 1.10.2 rpm: update 4.18.0 -> 4.18.1 Andrew Jeffery (1): Revert "ipk: Decode byte data to string in manifest handling" Archana Polampalli (1): git: ignore CVE-2023-25815 Arslan Ahmad (1): kernel-fitimage: Fix the default dtb config check Bruce Ashfield (9): kernel: improve initramfs bundle processing time yocto-bsps: update to v5.15.106 linux-yocto/5.15: update to v5.15.109 linux-yocto/5.15: update to v5.15.110 linux-yocto/5.15: update to v5.15.111 linux-yocto/5.15: update to v5.15.112 linux-yocto/5.15: update to v5.15.113 kernel: don't force PAHOLE=false linux-yocto: move build / debug dependencies to .inc Chen Qi (1): staging.bbclass: do not add extend_recipe_sysroot to prefuncs of prepare_recipe_sysroot Chi Xu (1): expect: Add ptest support Daniel Ammann (1): overview-manual: concepts.rst: Fix a typo Deepthi Hemraj (1): binutils: stable 2.40 branch updates Denys Dmytriyenko (1): xz: upgrade 5.4.2 -> 5.4.3 Dmitry Baryshkov (1): linux-firmware: upgrade 20230210 -> 20230404 Eero Aaltonen (1): avahi: fix D-Bus introspection Enrico Jörns (1): package_manager/ipk: fix config path generation in _create_custom_config() Jan Vermaete (1): cve-update-nvd2-native: added the missing http import Joe Slater (1): ghostscript: fix CVE-2023-28879 Johannes Schrimpf (1): python3targetconfig.bbclass: Extend PYTHONPATH instead of overwriting Kai Kang (1): libnotify: remove dependency dbus Khem Raj (10): cargo: Fix build on musl/riscv gawk: Disable known ptest fails on musl gawk: Remove redundant patch gawk: Add skipped.txt to emit test to ignore libxml2: Disable icu tests on musl quilt: Fix merge.test race condition piglit: Fix c++11-narrowing warnings in tests cpio: Run ptests under ptest user go: Upgrade 1.20.1 -> 1.20.4 go: Use -no-pie to build target cgo Lee Chee Yang (3): release-notes-4.2: update known issues and Repositories/Downloads migration-guides: add release-notes for 4.1.4 migration-guides: add release notes for 4.2.1 Lorenzo Arena (1): conf: add nice level to the hash config ignred variables Luca Ceresoli (2): ref-manual: classes: kernel: remove incorrect sentence opening ref-manual: classes: kernel: document automatic defconfig usage Markus Volk (1): gtk4: update 4.10.0 -> 4.10.3 Martin Jansa (7): populate_sdk_ext.bbclass: set METADATA_REVISION with an DISTRO override populate_sdk_ext.bbclass: redirect stderr to stdout so that both end in LOGFILE populate_sdk_base.bbclass: respect MLPREFIX for ptest-pkgs's ptest-runner binutils: package static libs from gprofng go.bbclass: don't use test to check output from ls image-live.bbclass: respect IMAGE_MACHINE_SUFFIX rpm: drop unused 0001-Rip-out-partial-support-for-unused-MD2-and-RIPEMD160.patch Martin Siegumfeldt (1): systemd-systemctl: fix instance template WantedBy symlink construction Michael Halstead (2): uninative: Upgrade to 3.10 to support gcc 13 uninative: Upgrade to 4.0 to include latest gcc 13.1.1 Michael Opdenacker (2): migration-guides: release-notes-4.2: add doc improvement highlights releases.svg: fix and explain duration of Hardknott 3.3 Mikko Rapeli (1): qemurunner: avoid leaking server_socket Ming Liu (1): weston: add xwayland to DEPENDS for PACKAGECONFIG xwayland Otavio Salvador (1): mesa: 23.0.2 -> 23.0.3 Pablo Saavedra (1): gstreamer1.0: upgrade 1.22.0 -> 1.22.2 Paul Gortmaker (1): scripts: fix buildstats diff/summary hard bound to host python3 Pavel Zhukov (1): lib/terminal.py: Add urxvt terminal Pawan Badganchi (1): tiff: Add fix for CVE-2022-4645 Peter Bergin (1): update-alternatives.bbclass: fix old override syntax Peter Kjellerstedt (3): license.bbclass: Include LICENSE in the output when it fails to parse musl: Correct SRC_URI xf86-video-intel: Use the HTTPS protocol to fetch the Git repositories Piotr Łobacz (1): libarchive: Enable acls, xattr for native as well as target Qiu Tingting (2): e2fsprogs: fix ptest bug for second running e2fsprogs: Fix error SRCDIR when using usrmerge DISTRO_FEATURES Randy MacLeod (1): vim: upgrade 9.0.1429 -> 9.0.1527 Ranjitsinh Rathod (2): libbsd: Add correct license for all packages kmscube: Correct DEPENDS to avoid overwrite Richard Purdie (8): qemu: Add fix for powerpc instruction fallback issue qemu: Update ppc instruction fix to match revised upstream version glib-networking: Add test retry to avoid failures glib-networking: Correct glib error handling in test patch maintainers.inc: Fix email address typo maintainers.inc: Move repo to unassigned recipes: Default to https git protocol where possible selftest/reproducible: Allow native/cross reuse in test Ross Burton (5): connman: backport fix for CVE-2023-28488 cpio: fix appending to archives larger than 2GB machine/qemuarm*: don't explicitly set vmalloc gdb: fix crashes when debugging threads with Arm Pointer Authentication enabled meta: depend on autoconf-archive-native, not autoconf-archive Steve Sakoman (3): Revert "xserver-xorg: backport fix for CVE-2023-1393" poky.conf: bump version for 4.2.1 release build-appliance-image: Update to mickledore head revision Sudip Mukherjee (4): libxfixes: Upgrade to v6.0.1 xwininfo: upgrade to v1.1.6 xinput: upgrade to v1.6.4 libxi: upgrade to v1.8.1 Thomas Roos (3): oeqa/utils/metadata.py: Fix running oe-selftest running with no distro set oeqa/selftest/cases/devtool.py: skip all tests require folder a git repo oeqa: adding selftest-hello and use it to speed up tests Tim Orling (1): libmodule-build-perl: upgrade 0.4232 -> 0.4234 Tom Hochstein (1): piglit: Add missing glslang dependencies Ulrich Ölmann (1): ref-manual: classes.rst: fix typo Upgrade Helper (1): waffle: upgrade 1.7.0 -> 1.7.2 Virendra Thakur (1): qemu: Whitelist CVE-2023-0664 Wang Mingyu (18): apr: upgrade 1.7.2 -> 1.7.3 bind: upgrade 9.18.12 -> 9.18.13 cracklib: upgrade 2.9.10 -> 2.9.11 libhandy: upgrade 1.8.1 -> 1.8.2 libpcap: upgrade 1.10.3 -> 1.10.4 libsdl2: upgrade 2.26.3 -> 2.26.5 mpg123: upgrade 1.31.2 -> 1.31.3 man-pages: upgrade 6.03 -> 6.04 mtools: upgrade 4.0.42 -> 4.0.43 pango: upgrade 1.50.13 -> 1.50.14 ruby: upgrade 3.2.1 -> 3.2.2 texinfo: upgrade 7.0.2 -> 7.0.3 wpebackend-fdo: upgrade 1.14.0 -> 1.14.2 xserver-xorg: upgrade 21.1.7 -> 21.1.8 xwayland: upgrade 22.1.8 -> 23.1.1 vala: upgrade 0.56.4 -> 0.56.6 mesa: upgrade 23.0.0 -> 23.0.2 iso-codes: upgrade 4.13.0 -> 4.15.0 Xiangyu Chen (1): sysstat: Fix CVE-2023-33204 Yoann Congal (1): cve-extra-exclusions: linux-yocto: ignore fixed CVE-2023-1652 & CVE-2023-1829 Zhixiong Chi (1): libpam: Fix the xtests/tst-pam_motd[1|3] failures bkylerussell@gmail.com (1): kernel-devsrc: depend on python3-core instead of python3 hen Qi (1): unfs3: fix symlink time setting issue nikhil (1): tiff: Remove unused patch from tiff meta-raspberrypi: bf948e0aa8..aa0aed9a08: Florin Sarbu (1): udev-rules-rpi: Use 99-com.rules directly from upstream Martin Jansa (3): rpi-libcamera-apps: fix flags used in aarch64 builds rpi-libcamera-apps: fix version generation on hosts with older python rpi-libcamera-apps: bump to latest SRCREV and set PV meta-openembedded: 2d89a469e5..9286582126: Alexander Amelkin (1): ipmitool: Update links Arsalan H. Awan (1): meta-networking/licenses/netperf: remove unused license Bartosz Golaszewski (2): python3-gpiod: add missing run-time dependencies libgpiod: install the libgpiosim header Bergin, Peter (1): freediameter: fix typo and old overide syntax Bhargav Das (2): tslib: Add native & nativestdk package support pointercal: Add native & nativestdk package support Changqing Li (1): redis: upgrade 6.2.11 -> 6.2.12 Chen Qi (1): frr: add CVE_PRODUCT Jasper Orschulko (1): python3-gcovr: Add missing runtime dependency Joe Slater (1): bats: use baselib Khem Raj (48): fwupd: Do not emit build time paths into generated headers libcereal: Fix TMPDIR leaking into debug_str section libtimezonemap: Point to a working SRC_URI unixODBC: Update SRC_URI to use updated location of tarball unicode-ucd: Update license URI to reflect renamed license libx86: Point to working SRC_URI ctapi-common: Point to working SRC_URI locations netkit-ftp: Update to debian patch 34 nicstat: Use SOURCEFORGE_MIRROR in SRC_URI rp-pppoe: Point SRC_URI to valid location ttf-mplus: Point to valid download location for SRC_URI ttf-lklug: Point SRC_URI to a working location radiusclient-ng: Point SRC_URI to archive.ubuntu.com httpfs2: Do not use S during compile/install tasks p910nd: Switch to using github for SRC_URI mosh: Point SRC_URI to https://mosh.org/ debootstrap: Update SRC_URI to point to valid URL debootstrap: Use DEBIAN_MIRROR for SRC_URI ttf-gentium: Switch to debian archive mirror for SRC_URI nfacct: Update SRC_URI to point to valid URL libencode-perl: Remove buildpaths from generated .exh files enca: Remove buildpaths from target scripts libirecovery: Add missing build dependency on readline fftw: Remove hardcoded sysroot into binaries lmdb: Pass CFLAGS to Makefile php: Remove buildpaths from scripts and generated headers uw-imap: Pass CFLAGS from environment libmad: Add a patch to pass cflags to build libpeas: Fix reference to TMPDIR in tests lirc: Define SH_PATH=/bin/sh mce-inject: Pass CFLAGS to make nbdkit: Remove buildpaths from binaries mpv: Remove references to builddir from mpv binary libnice: Remove buildpaths from binaries curlpp: Remove references to buildpaths e.g. TMPDIR unbound: Remove references to buildpaths uml-utilities: Fix references to TMPDIR openct: Fix buildpaths being emitted into generated types.h minifi-cpp: Remove references to buildpaths in generated files freerdp: Fix reference to TMPDIR in libfreerdp2.so nautilus: Fix buildpath QA errors cgdb: Fix buildpaths emitted into cgdb binary ibus: Point python interpreter to target location gimp: Fix buildpaths in binaries and scripts libgphoto2: Edit out sysroot from CC variable in configure vlan: Pass CFLAGS via CCFLAGS sgpio: Pass CFLAGS to make x265: Pass --debug-prefix-map to nasm Markus Volk (1): polkit: update SRC_URI Martin Jansa (16): lirc: fix do_install with multilib dleyna-{server,renderer}: fix dev-so QA issue with multilib libreport: add dependency on libarchive libxmlb: add missing dependency on glib-2.0 and xz geoclue: fix build without gobject-introspection-data appstream: fix build without gobject-introspection-data ostree: fix build without gobject-introspection-data rdfind: fix build with -Werror=return-type spice-gtk: respect gobject-introspection-data cpulimit: fix do_install with multilib libnfs: fix installed-vs-shipped issues with multilib btrfsmaintenance: install to ${datadir}/${BPN} libtomcrypt: pass LIBPATH to fix installed-vs-shipped with multilib nanopb: fix installed-vs-shipped with multilib nv-codec-headers: fix installed-vs-shipped with multilib zfs: fix installation paths for multilib Ming Liu (2): libusbgx: drop hard-coded /usr/bin,/etc libusbgx: check scripts in /etc/usbgx.d Mingli Yu (2): php: Link with libatomic on rv64 minicoredumper: correct the sysvinit service file attribute Peter Marko (1): ntp: whitelist CVE-2019-11331 Petr Gotthard (1): gensio: fix QA issue: non -staticdev package with .a libraries Valeria Petrov (1): apache2: upgrade 2.4.56 -> 2.4.57 Virendra Thakur (2): p7zip: fix for CVE-2018-5996 p7zip: Fix for CVE-2016-9296 Wang Mingyu (6): redis: upgrade 7.0.10 -> 7.0.11 hdf5: Fix install conflict when enable multilib. php: upgrade 8.2.4 -> 8.2.5 postgresql: upgrade 15.2 -> 15.3 php: upgrade 8.2.5 -> 8.2.6 nautilus: upgrade 44.0 -> 44.1 Yogita Urade (1): dlt-daemon: fix CVE-2023-26257 schitrod=cisco.com@lists.openembedded.org (1): gnulib: Update recipe name to 2018-12-18 meta-security: 53c5cc794f..d7db0a3bd1: Peter Hoyes (1): meta-parsec/layer.conf: Insert addpylib declaration meta-arm: 0b5724266a..8db460fa5d: Abdellatif El Khlifi (2): kas: corstone1000: set branches to mickledore arm-bsp/u-boot: corstone1000: upgrade NVMXIP support Emekcan Aras (3): arm-bsp/trusted-firmware-m: Align Capsule Update with GPT changes arm-bsp/wic: corstone1000: Fix and limit the partition size for corstone1000 arm-bsp/u-boot: corstone1000: enable PSCI reset Signed-off-by: Patrick Williams <patrick@stwcx.xyz> Change-Id: Id8a293d03f6c2320ff407a7aaed4416038ba04ed
Diffstat (limited to 'poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch')
-rw-r--r--poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch286
1 files changed, 286 insertions, 0 deletions
diff --git a/poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch b/poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch
new file mode 100644
index 0000000000..9adf4a4db5
--- /dev/null
+++ b/poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch
@@ -0,0 +1,286 @@
+From b3eff3e15576229af9bae026c5c23ee694b90389 Mon Sep 17 00:00:00 2001
+From: Luis Machado <luis.machado@arm.com>
+Date: Fri, 24 Mar 2023 07:58:38 +0000
+Subject: [PATCH] aarch64: Check for valid inferior thread/regcache before
+ reading pauth registers
+
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+There were reports of gdb throwing internal errors when calling
+inferior_thread ()/get_current_regcache () on a system with
+Pointer Authentication enabled.
+
+In such cases, gdb produces the following backtrace, or a variation
+of it (for gdb's with the non-address removal implemented only in
+the aarch64-linux-tdep.c file).
+
+../../../repos/binutils-gdb/gdb/thread.c:86: internal-error: inferior_thread: Assertion `current_thread_ != nullptr' failed.
+A problem internal to GDB has been detected,
+further debugging may prove unreliable.
+----- Backtrace -----
+0xaaaae04a571f gdb_internal_backtrace_1
+ ../../../repos/binutils-gdb/gdb/bt-utils.c:122
+0xaaaae04a57f3 _Z22gdb_internal_backtracev
+ ../../../repos/binutils-gdb/gdb/bt-utils.c:168
+0xaaaae0b52ccf internal_vproblem
+ ../../../repos/binutils-gdb/gdb/utils.c:401
+0xaaaae0b5310b _Z15internal_verrorPKciS0_St9__va_list
+ ../../../repos/binutils-gdb/gdb/utils.c:481
+0xaaaae0e24b8f _Z18internal_error_locPKciS0_z
+ ../../../repos/binutils-gdb/gdbsupport/errors.cc:58
+0xaaaae0a88983 _Z15inferior_threadv
+ ../../../repos/binutils-gdb/gdb/thread.c:86
+0xaaaae0956c87 _Z20get_current_regcachev
+ ../../../repos/binutils-gdb/gdb/regcache.c:428
+0xaaaae035223f aarch64_remove_non_address_bits
+ ../../../repos/binutils-gdb/gdb/aarch64-tdep.c:3572
+0xaaaae03e8abb _Z31gdbarch_remove_non_address_bitsP7gdbarchm
+ ../../../repos/binutils-gdb/gdb/gdbarch.c:3109
+0xaaaae0a692d7 memory_xfer_partial
+ ../../../repos/binutils-gdb/gdb/target.c:1620
+0xaaaae0a695e3 _Z19target_xfer_partialP10target_ops13target_objectPKcPhPKhmmPm
+ ../../../repos/binutils-gdb/gdb/target.c:1684
+0xaaaae0a69e9f target_read_partial
+ ../../../repos/binutils-gdb/gdb/target.c:1937
+0xaaaae0a69fdf _Z11target_readP10target_ops13target_objectPKcPhml
+ ../../../repos/binutils-gdb/gdb/target.c:1977
+0xaaaae0a69937 _Z18target_read_memorymPhl
+ ../../../repos/binutils-gdb/gdb/target.c:1773
+0xaaaae08be523 ps_xfer_memory
+ ../../../repos/binutils-gdb/gdb/proc-service.c:90
+0xaaaae08be6db ps_pdread
+ ../../../repos/binutils-gdb/gdb/proc-service.c:124
+0x40001ed7c3b3 _td_fetch_value
+ /build/glibc-RIFKjK/glibc-2.31/nptl_db/fetch-value.c:115
+0x40001ed791ef td_ta_map_lwp2thr
+ /build/glibc-RIFKjK/glibc-2.31/nptl_db/td_ta_map_lwp2thr.c:194
+0xaaaae07f4473 thread_from_lwp
+ ../../../repos/binutils-gdb/gdb/linux-thread-db.c:413
+0xaaaae07f6d6f _ZN16thread_db_target4waitE6ptid_tP17target_waitstatus10enum_flagsI16target_wait_flagE
+ ../../../repos/binutils-gdb/gdb/linux-thread-db.c:1420
+0xaaaae0a6b33b _Z11target_wait6ptid_tP17target_waitstatus10enum_flagsI16target_wait_flagE
+ ../../../repos/binutils-gdb/gdb/target.c:2586
+0xaaaae0789cf7 do_target_wait_1
+ ../../../repos/binutils-gdb/gdb/infrun.c:3825
+0xaaaae0789e6f operator()
+ ../../../repos/binutils-gdb/gdb/infrun.c:3884
+0xaaaae078a167 do_target_wait
+ ../../../repos/binutils-gdb/gdb/infrun.c:3903
+0xaaaae078b0af _Z20fetch_inferior_eventv
+ ../../../repos/binutils-gdb/gdb/infrun.c:4314
+0xaaaae076652f _Z22inferior_event_handler19inferior_event_type
+ ../../../repos/binutils-gdb/gdb/inf-loop.c:41
+0xaaaae07dc68b handle_target_event
+ ../../../repos/binutils-gdb/gdb/linux-nat.c:4206
+0xaaaae0e25fbb handle_file_event
+ ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:573
+0xaaaae0e264f3 gdb_wait_for_event
+ ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:694
+0xaaaae0e24f9b _Z16gdb_do_one_eventi
+ ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:217
+0xaaaae080f033 start_event_loop
+ ../../../repos/binutils-gdb/gdb/main.c:411
+0xaaaae080f1b7 captured_command_loop
+ ../../../repos/binutils-gdb/gdb/main.c:475
+0xaaaae0810b97 captured_main
+ ../../../repos/binutils-gdb/gdb/main.c:1318
+0xaaaae0810c1b _Z8gdb_mainP18captured_main_args
+ ../../../repos/binutils-gdb/gdb/main.c:1337
+0xaaaae0338453 main
+ ../../../repos/binutils-gdb/gdb/gdb.c:32
+---------------------
+../../../repos/binutils-gdb/gdb/thread.c:86: internal-error: inferior_thread: Assertion `current_thread_ != nullptr' failed.
+A problem internal to GDB has been detected,
+further debugging may prove unreliable.
+Quit this debugging session? (y or n)
+
+We also see failures across the testsuite if the tests get executed on a target
+that has native support for the pointer authentication feature. But
+gdb.base/break.exp and gdb.base/access-mem-running.exp are two examples of
+tests that run into errors and internal errors.
+
+This issue started after commit d88cb738e6a7a7179dfaff8af78d69250c852af1, which
+enabled more broad use of pointer authentication masks to remove non-address
+bits of pointers, but wasn't immediately detected because systems with native
+support for pointer authentication are not that common yet.
+
+The above crash happens because gdb is in the middle of handling an event,
+and do_target_wait_1 calls switch_to_inferior_no_thread, nullifying the
+current thread. This means a call to inferior_thread () will assert, and
+attempting to call get_current_regcache () will also call inferior_thread (),
+resulting in an assertion as well.
+
+target_has_registers was one function that seemed useful for detecting these
+types of situation where we don't have a register cache. The problem with that
+is the inconsistent state of inferior_ptid, which is used by
+target_has_registers.
+
+Despite the call to switch_to_no_thread in switch_to_inferior_no_thread from
+do_target_wait_1 in the backtrace above clearing inferior_ptid, the call to
+ps_xfer_memory sets inferior_ptid momentarily before reading memory:
+
+static ps_err_e
+ps_xfer_memory (const struct ps_prochandle *ph, psaddr_t addr,
+ gdb_byte *buf, size_t len, int write)
+{
+ scoped_restore_current_inferior restore_inferior;
+ set_current_inferior (ph->thread->inf);
+
+ scoped_restore_current_program_space restore_current_progspace;
+ set_current_program_space (ph->thread->inf->pspace);
+
+ scoped_restore save_inferior_ptid = make_scoped_restore (&inferior_ptid);
+ inferior_ptid = ph->thread->ptid;
+
+ CORE_ADDR core_addr = ps_addr_to_core_addr (addr);
+
+ int ret;
+ if (write)
+ ret = target_write_memory (core_addr, buf, len);
+ else
+ ret = target_read_memory (core_addr, buf, len);
+ return (ret == 0 ? PS_OK : PS_ERR);
+}
+
+Maybe this shouldn't happen, or maybe it is just an unfortunate state to be
+in. But this prevents the use of target_has_registers to guard against the
+lack of registers, since, although current_thread_ is still nullptr,
+inferior_ptid is valid and is not null_ptid.
+
+There is another crash scenario after we kill a previously active inferior, in
+which case the gdbarch will still say we support pointer authentication but we
+will also have no current thread (inferior_thread () will assert etc).
+
+If the target has support for pointer authentication, gdb needs to use
+a couple (or 4, for bare-metal) mask registers to mask off some bits of
+pointers, and for that it needs to access the registers.
+
+At some points, like the one from the backtrace above, there is no active
+thread/current regcache because gdb is in the middle of doing event handling
+and switching between threads.
+
+Simon suggested the use of inferior_ptid to fetch the register cache, as
+opposed to relying on the current register cache. Though we need to make sure
+inferior_ptid is valid (not null_ptid), I think this works nicely.
+
+With inferior_ptid, we can do safety checks along the way, making sure we have
+a thread to fetch a register cache from and checking if the thread is actually
+stopped or running.
+
+The following patch implements this idea with safety checks to make sure we
+don't run into assertions or errors. If any of the checks fail, we fallback to
+using a default mask to remove non-address bits of a pointer.
+
+I discussed with Pedro the possibility of caching the mask register values
+(which are per-process and can change mid-execution), but there isn't a good
+spot to cache those values. Besides, the mask registers can change constantly
+for bare-metal debugging when switching between exception levels.
+
+In some cases, it is just not possible to get access to these mask registers,
+like the case where threads are running. In those cases, using a default mask
+to remove the non-address bits should be enough.
+
+This can happen when we let threads run in the background and then we attempt
+to access a memory address (now that gdb is capable of reading memory even
+with threads running). Thus gdb will attempt to remove non-address bits
+of that memory access, will attempt to access registers, running into errors.
+
+Regression-tested on aarch64-linux Ubuntu 20.04.
+---
+ gdb/aarch64-linux-tdep.c | 64 ++++++++++++++++++++++++++++++----------
+ 1 file changed, 49 insertions(+), 15 deletions(-)
+
+diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
+index 20a041c599e..4b2915b8e99 100644
+--- a/gdb/aarch64-linux-tdep.c
++++ b/gdb/aarch64-linux-tdep.c
+@@ -57,6 +57,9 @@
+ #include "elf/common.h"
+ #include "elf/aarch64.h"
+
++/* For inferior_ptid and current_inferior (). */
++#include "inferior.h"
++
+ /* Signal frame handling.
+
+ +------------+ ^
+@@ -1986,29 +1989,60 @@ aarch64_linux_decode_memtag_section (struct gdbarch *gdbarch,
+ static CORE_ADDR
+ aarch64_remove_non_address_bits (struct gdbarch *gdbarch, CORE_ADDR pointer)
+ {
+- aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
+-
+ /* By default, we assume TBI and discard the top 8 bits plus the VA range
+- select bit (55). */
++ select bit (55). Below we try to fetch information about pointer
++ authentication masks in order to make non-address removal more
++ precise. */
+ CORE_ADDR mask = AARCH64_TOP_BITS_MASK;
+
+- if (tdep->has_pauth ())
++ /* Check if we have an inferior first. If not, just use the default
++ mask.
++
++ We use the inferior_ptid here because the pointer authentication masks
++ should be the same across threads of a process. Since we may not have
++ access to the current thread (gdb may have switched to no inferiors
++ momentarily), we use the inferior ptid. */
++ if (inferior_ptid != null_ptid)
+ {
+- /* Fetch the PAC masks. These masks are per-process, so we can just
+- fetch data from whatever thread we have at the moment.
++ /* If we do have an inferior, attempt to fetch its thread's thread_info
++ struct. */
++ thread_info *thread
++ = find_thread_ptid (current_inferior ()->process_target (),
++ inferior_ptid);
+
+- Also, we have both a code mask and a data mask. For now they are the
+- same, but this may change in the future. */
+- struct regcache *regs = get_current_regcache ();
+- CORE_ADDR cmask, dmask;
++ /* If the thread is running, we will not be able to fetch the mask
++ registers. */
++ if (thread != nullptr && thread->state != THREAD_RUNNING)
++ {
++ /* Otherwise, fetch the register cache and the masks. */
++ struct regcache *regs
++ = get_thread_regcache (current_inferior ()->process_target (),
++ inferior_ptid);
++
++ /* Use the gdbarch from the register cache to check for pointer
++ authentication support, as it matches the features found in
++ that particular thread. */
++ aarch64_gdbarch_tdep *tdep
++ = gdbarch_tdep<aarch64_gdbarch_tdep> (regs->arch ());
++
++ /* Is there pointer authentication support? */
++ if (tdep->has_pauth ())
++ {
++ /* We have both a code mask and a data mask. For now they are
++ the same, but this may change in the future. */
++ CORE_ADDR cmask, dmask;
+
+- if (regs->cooked_read (tdep->pauth_reg_base, &dmask) != REG_VALID)
+- dmask = mask;
++ if (regs->cooked_read (tdep->pauth_reg_base, &dmask)
++ != REG_VALID)
++ dmask = mask;
+
+- if (regs->cooked_read (tdep->pauth_reg_base + 1, &cmask) != REG_VALID)
+- cmask = mask;
++ if (regs->cooked_read (tdep->pauth_reg_base + 1, &cmask)
++ != REG_VALID)
++ cmask = mask;
+
+- mask |= aarch64_mask_from_pac_registers (cmask, dmask);
++ mask |= aarch64_mask_from_pac_registers (cmask, dmask);
++ }
++ }
+ }
+
+ return aarch64_remove_top_bits (pointer, mask);
+--
+2.34.1
+