This commit is contained in:
Brandt Bucher 2026-02-05 08:03:16 +00:00 committed by GitHub
commit 1b69309048
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 4 deletions

View file

@ -0,0 +1,2 @@
Set frame pointers in ``x86_64-unknown-linux-gnu`` JIT code, allowing
most native profilers and debuggers to unwind through them.

View file

@ -51,6 +51,7 @@ class _Target(typing.Generic[_S, _R]):
debug: bool = False
verbose: bool = False
cflags: str = ""
frame_pointers: bool = False
llvm_version: str = _llvm._LLVM_VERSION
known_symbols: dict[str, int] = dataclasses.field(default_factory=dict)
pyconfig_dir: pathlib.Path = pathlib.Path.cwd().resolve()
@ -174,10 +175,13 @@ async def _compile(
"-o",
f"{s}",
f"{c}",
*self.args,
# Allow user-provided CFLAGS to override any defaults
*shlex.split(self.cflags),
]
if self.frame_pointers:
frame_pointer = "all" if opname == "shim" else "reserved"
args_s += ["-Xclang", f"-mframe-pointer={frame_pointer}"]
args_s += self.args
# Allow user-provided CFLAGS to override any defaults
args_s += shlex.split(self.cflags)
await _llvm.run(
"clang", args_s, echo=self.verbose, llvm_version=self.llvm_version
)
@ -613,7 +617,9 @@ def get_target(host: str) -> _COFF32 | _COFF64 | _ELF | _MachO:
condition = "defined(__x86_64__) && defined(__linux__)"
args = ["-fno-pic", "-mcmodel=medium", "-mlarge-data-threshold=0", "-fno-plt"]
optimizer = _optimizers.OptimizerX86
target = _ELF(host, condition, args=args, optimizer=optimizer)
target = _ELF(
host, condition, args=args, optimizer=optimizer, frame_pointers=True
)
else:
raise ValueError(host)
return target