diff options
author | Patrick Williams <patrick@stwcx.xyz> | 2023-06-16 00:18:34 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2023-06-16 01:27:11 +0300 |
commit | 4f6b1c0dcf9f9cb734f71b277af913e0d58c503f (patch) | |
tree | 6ca6709c6d54d63d4f9e1e5a3e2cefbb5cee09ce /poky/meta/recipes-devtools/gdb/gdb/0001-aarch64-Check-for-valid-inferior-thread-regcache-bef.patch | |
parent | fb02b9d8f5c7ab746a92c5f998f48983543d29ce (diff) | |
download | openbmc-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.patch | 286 |
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 + |