ShadowStackGC.cpp - More Dead Code?

Hi,

I've been looking at all of the uses of the 'unwind' instruction, and ShadowStackGC.cpp is the last pass which actually creates 'unwind' instructions. The thing is, this pass seems to be dead. It hasn't been updated in any meaningful way since ~79000.

Should this pass go the way of the dodo?

-bw

no-sgc.diff (18.3 KB)

Hi Bill,

I've been looking at all of the uses of the 'unwind' instruction, and ShadowStackGC.cpp is the last pass which actually creates 'unwind' instructions. The thing is, this pass seems to be dead. It hasn't been updated in any meaningful way since ~79000.

Should this pass go the way of the dodo?

no idea, but it would be nice if there was a simple way to run some cleanup
code then keep unwinding when an exception is unwind. I guess the
problem is what personality function to use? It could scan the function,
and if it sees an existing landing pad, just reuse that personality function,
and otherwise just use the C personality function in the cleanup landing pad
it needs to create. It would be neat if a landing pad instruction didn't need
a personality function if it only wants to run a cleanup, and have everything
be taken care of automagically, but I guess that can be done in some happy
future time when the exception handling world has calmed down again :slight_smile:

Ciao, Duncan.

Hi Bill,

I don’t think it’s dead code, per se – AFAIK there are still clients of LLVM which use the shadow stack as part of their garbage collection implementation. HLVM is probably the most visible such project.

My own project now has its own GC plugin to emit stack maps, rather than relying on the shadow stack. But for what it’s worth, I found the shadow stack to be a useful stepping stone towards a “real” GC implementation when I first started out with LLVM’s garbage collector infrastructure.

– Ben

Okay, then I'll try to work around the use of the "unwind" instruction. :slight_smile:

-bw

Assuming you’re referring to my HLVM project, it actually uses its own shadow stack based upon Henderson’s “Accurate Garbage Collection in an uncooperative environment”. I kept it completely separate from LLVM’s GC infrastructure because that was highly experimental at the time…

Cheers,

Jon.