Skip to content

GH-115802: Remove no-plt for Linux AArch64#148238

Merged
diegorusso merged 3 commits intopython:mainfrom
diegorusso:drop-no-plt
Apr 8, 2026
Merged

GH-115802: Remove no-plt for Linux AArch64#148238
diegorusso merged 3 commits intopython:mainfrom
diegorusso:drop-no-plt

Conversation

@diegorusso
Copy link
Copy Markdown
Contributor

@diegorusso diegorusso commented Apr 8, 2026

Removing -fno-plt makes Linux stencils use more direct call relocations and fewer GOT-indirect call sequences. On AArch64 it means CALL26 instead of adrp/ldr/blr GOT calls

This improves code size and some complexity of the JIT stencils. It reduces the amount of GOT-specific patching the JIT has to do.

@diegorusso diegorusso changed the title GH-115802: Remove no-plt for Linux targets GH-115802: Remove no-plt for Linux AArch64 Apr 8, 2026
@diegorusso
Copy link
Copy Markdown
Contributor Author

diegorusso commented Apr 8, 2026

I had to revert the x86-64 changes as they are more involved and require more investigation. I'm going to create a new issue for changing x86-64 Linux target: #148256

@Fidget-Spinner
Copy link
Copy Markdown
Member

Do you have any numbers for this?

@diegorusso
Copy link
Copy Markdown
Contributor Author

diegorusso commented Apr 8, 2026

Do you have any numbers for this?

Relocation Before (-fno-plt) After (default) Delta
R_AARCH64_CALL26 0 368 +368
R_AARCH64_JUMP26 269 269 0
R_AARCH64_ADR_GOT_PAGE 831 461 -370
R_AARCH64_LD64_GOT_LO12_NC 829 461 -368

Before all the calls were done via GOT, now only 55% are done via the GOT and the rest using a direct bl

@diegorusso diegorusso merged commit e11315d into python:main Apr 8, 2026
82 checks passed
@diegorusso diegorusso deleted the drop-no-plt branch April 8, 2026 15:34
@brandtbucher
Copy link
Copy Markdown
Member

Sorry, didn’t have a chance to look at this yet. What happens if the jump is outside the 26 bit range? The trampolines get used? Were the trampolines being used at all before?

@diegorusso
Copy link
Copy Markdown
Contributor Author

Sorry, didn’t have a chance to look at this yet. What happens if the jump is outside the 26 bit range? The trampolines get used? Were the trampolines being used at all before?

Earlier no trampolines were used at all. Now if a jump is out of range, the trampoline is generated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants