diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-02-13-12-31-53.gh-issue-115802.0kN4xM.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-02-13-12-31-53.gh-issue-115802.0kN4xM.rst new file mode 100644 index 00000000000000..b645c6b9e1cf20 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-02-13-12-31-53.gh-issue-115802.0kN4xM.rst @@ -0,0 +1,2 @@ +Use the more efficient "medium" code model for JIT-compiled code on +supported platforms. diff --git a/Tools/jit/_stencils.py b/Tools/jit/_stencils.py index 8b6957f8bdbdfc..4ddbe967438bd1 100644 --- a/Tools/jit/_stencils.py +++ b/Tools/jit/_stencils.py @@ -84,9 +84,8 @@ class HoleValue(enum.Enum): "R_AARCH64_MOVW_UABS_G3": "patch_aarch64_16d", # x86_64-unknown-linux-gnu: "R_X86_64_64": "patch_64", - "R_X86_64_GOTPCREL": "patch_32r", "R_X86_64_GOTPCRELX": "patch_x86_64_32rx", - "R_X86_64_PC32": "patch_32r", + "R_X86_64_PLT32": "patch_32r", "R_X86_64_REX_GOTPCRELX": "patch_x86_64_32rx", # x86_64-apple-darwin: "X86_64_RELOC_BRANCH": "patch_32r", @@ -226,11 +225,11 @@ def remove_jump(self, *, alignment: int = 1) -> None: offset -= 3 case Hole( offset=offset, - kind="IMAGE_REL_I386_REL32" | "X86_64_RELOC_BRANCH", + kind="IMAGE_REL_I386_REL32" | "R_X86_64_PLT32" | "X86_64_RELOC_BRANCH", value=HoleValue.CONTINUE, symbol=None, - addend=-4, - ) as hole: + addend=addend, + ) as hole if _signed(addend) == -4: # jmp 5 jump = b"\xE9\x00\x00\x00\x00" offset -= 1 @@ -243,17 +242,6 @@ def remove_jump(self, *, alignment: int = 1) -> None: ) as hole: # b #4 jump = b"\x00\x00\x00\x14" - case Hole( - offset=offset, - kind="R_X86_64_GOTPCRELX", - value=HoleValue.GOT, - symbol="_JIT_CONTINUE", - addend=addend, - ) as hole: - assert _signed(addend) == -4 - # jmp qword ptr [rip] - jump = b"\xFF\x25\x00\x00\x00\x00" - offset -= 2 case _: return if self.body[offset:] == jump and offset % alignment == 0: diff --git a/Tools/jit/_targets.py b/Tools/jit/_targets.py index 7eb433e2a5b207..84fa1a6ed25a18 100644 --- a/Tools/jit/_targets.py +++ b/Tools/jit/_targets.py @@ -522,7 +522,7 @@ def get_target(host: str) -> _COFF | _ELF | _MachO: args = ["-fms-runtime-lib=dll"] target = _COFF(host, args=args) elif re.fullmatch(r"x86_64-.*-linux-gnu", host): - args = ["-fpic"] + args = ["-fno-pic", "-mcmodel=medium", "-mlarge-data-threshold=0"] target = _ELF(host, args=args) else: raise ValueError(host)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: