1
0
Fork 0
mirror of https://git.sr.ht/~seirdy/seirdy.one synced 2024-09-19 20:02:10 +00:00
seirdy.one/content/notes/clang-supports-wiping-call-used-registers.md
2023-04-17 00:07:50 -07:00

1.3 KiB

title date syndicatedCopies
Clang supports wiping call-used registers 2023-04-17T00:01:52-07:00
title url
The Fediverse https://pleroma.envs.net/notice/AUjf1wCr0xk0yCVpKK

Here's a compiler flag that slipped my notice: Clear Linux has -fzero-call-used-regs=used in its CFLAGS for security-sensitive x86_64 packages, wiping call-used registers on return to protect against ROP exploits. In my benchmarks, there was almost no perf difference between skip, used-gpr and used which is surprising; I thought that this would really hurt instruction cache optimization.

Either optimizing compilers have rendered even more of my coursework on computer architecture unusable, or there's a reason why this is x86_64-only (I'm only familiar with RISC).

Anyway: Alpine's Clang-16 seems to have finally implemented this GCC-11 feature (it was supposed to be in Clang-15), so I can use it in my build scripts. Now seirdy.one is now served with an Nginx built with fzero-call-used-regs=used-gpr (including all linked libraries). Let's see if I notice a difference. If I don't, I'll switch from used-gpr to used and repeat.