2. What we did since LCA'13
●
Libraries
– Boehm gc and libatomic_ops
– libunwind
●
Binutils
– gc sections
– gprof
●
GCC
– Boehm gc integration
– Mainline backports
3. Ongoing work
●
Libraries
– libdwarf
●
Binutils
– IFUNC
●
GCC
– gprof
– libssp and libasan – blocked due to stack frame
– stack frame – changing the growing direction
– LRA (Local Register Allocator)
4. Stack Frame
local var n
...
local var 1
canary
...
Frame grows upward Frame grows downward
canary
local var 1
...
local var n
...
5. What is LRA
●
A replacement of reload
●
What is reload ?
– Checks that each insn after register allocation is valid (operands are
in the right register class) and fixes them up
– Mostly machine-dependent and tries to do everything at once
– More than 25 years old and more than 20 000 LoC
– A blocker to new optimization
●
LRA
– New design of reload
– Divides this process in small and separated subtasks
– Iterative