Fix gdb on OpenBSD/amd64 by:

* Filtering out registers that are "<unavailable>" when querying gdb
for register list.
* Force querying gdb for register list on OpenBSD.
This commit is contained in:
Kurt Miller
2026-02-23 08:33:56 -05:00
parent e6bc02583c
commit 065617a6a9

View File

@@ -19,6 +19,7 @@ import bisect
from dataclasses import dataclass from dataclasses import dataclass
import re import re
from typing import Callable, Dict, List, Optional, Sequence, Set, Tuple, Union from typing import Callable, Dict, List, Optional, Sequence, Set, Tuple, Union
import platform
import gdb import gdb
@@ -467,7 +468,7 @@ class RegisterDesc:
def get_register_descs(arch: gdb.Architecture, group: str = 'all') -> List[ def get_register_descs(arch: gdb.Architecture, group: str = 'all') -> List[
Union[RegisterDesc, gdb.RegisterDescriptor]]: Union[RegisterDesc, gdb.RegisterDescriptor]]:
if hasattr(arch, "registers"): if hasattr(arch, "registers") and platform.system() != "OpenBSD":
try: try:
return list(arch.registers(group)) return list(arch.registers(group))
except ValueError: # No such group, or version too old except ValueError: # No such group, or version too old
@@ -481,7 +482,7 @@ def get_register_descs(arch: gdb.Architecture, group: str = 'all') -> List[
regset = gdb.execute( regset = gdb.execute(
f"info registers", to_string=True).strip().split('\n') f"info registers", to_string=True).strip().split('\n')
for line in regset: for line in regset:
if not line.startswith(" "): if not line.startswith(" ") and "<unavailable>" not in line:
tokens = line.strip().split() tokens = line.strip().split()
descs.append(RegisterDesc(tokens[0])) descs.append(RegisterDesc(tokens[0]))
return descs return descs