[LLVMdev] built-in longjmp and setjmp

John McCall
Wed, 13 Apr 2011 00:51:13 -0000

On Apr 12, 2011, at 3:15 PM, Jim Grosbach wrote:
> If you want an automated method, then using the source code re-writer
interfaces in clang is probably a reasonable starting place. Just modifying the
source code manually is probably easier, though, to be honest.
>
> As a moderate caveat to all of this, there are some bits of code out there
that use these builtins that are very tightly coupled to the compiler (the Linux
kernel used to do this, I think, and maybe still does). Those sorts of
situations are unlikely to be solved satisfactorily by moving to library calls
(performance reasons, usually). The appropriate solution there will be very
situation specific and will likely involve refactoring the implementations in
question to some degree.

Are these intrinsics really prohibitively difficult to implement?  I'm not
suggesting that you (or anyone else) particularly needs to do them, but is there
more to them than clobbering all registers and then lowering to a quick series
of instructions which save/restore the current IP, SP, and (maybe?) FP?
Something seems very wrong if rewriting a custom refactoring tool to turn
builtin_setjmp/longjmp into library calls could possibly be simpler than just
adding support for these intrinsics to one or two more targets.

John.