[PATCH] New -fstack-check implementation
Eric Botcazou
ebotcazou@adacore.com
Sun Mar 30 09:50:00 GMT 2008
> Can you elaborate on the design?
Stack checking is made up of 2 parts: "static" stack checking, i.e. checking
for the static part of the frame, and "dynamic" stack checking, i.e. checking
for dynamic stack allocations. In both cases, the checking must be done
prior to the stack allocation itself to be correct, in particular prior to
the frame allocation in the former case, i.e. in the prologue. The old
implementation is incorrect in that it doesn't do proper static stack
checking (except on the Alpha) but instead sort of emulates it with dynamic
stack checking in the parent function; this works only for small frames.
The patch adds the static stack checking part to the major architectures by
means of back-end specific support. Technically it's emitted in the RTL
prologue as an UNSPEC_VOLATILE instruction and output inline. If there is
no such support for a given architecture, the checking falls back on the old
implementation.
The patch also adds 2 stack checking methods, in addition to the 2 existing
ones which are stack probes and checking routine: stack probes with moving
stack pointer (for x86{-64}/Linux) and stack limits (for VxWorks).
> Why do you think we cannot remove the old code and call -fstack-check
> unsupported on architectures that do not have the required target support?
The patch unbreaks the old implementation, in the sense that it brings it at
least on par with what it was in the 3.x series, although its limitations are
still there, so removing it altogether would be sort of a feature regression.
We still use the old implementation at AdaCore for some "secondary" platforms.
Moreover the new implementation reuses the old implementation's code for the
dynamic checking part so the net gain would be small.
--
Eric Botcazou
More information about the Gcc-patches
mailing list