MCSection and Win64 Exception Handling


As you know if you've been watching llvm-commits, I've been working on
Win64 exception handling support in LLVM. Unfortunately, I've hit a bit
of a snag.

I recently learned that GAS implemented its own set of Win64 EH
directives. I've made ours compatible with GAS, but one problem remains.

GAS's .seh_handlerdata directive is used to declare data that belongs in
the language-specific handler's data area. The way it works in GAS is
that it creates a pseudo-section containing the data that is later
written to the unwind info structure. For LLVM, I suspect I have to do
something similar. Trouble is, MCSection doesn't really support any
pseudo-sections. It only supports physical sections inside of an object

Unless someone has a better idea for implementing .seh_handlerdata, I
need to extend MCSection to support sections that don't really
physically exist, and then add support for writing the pseudo section
anywhere in the object file. Does anyone have a better idea?