[LLVMdev] [PATCH] Fix for bug in JIT exception table allocation (no test yet)

Eric Christopher echristo at apple.com
Wed Aug 22 16:06:27 PDT 2012


On Aug 21, 2012, at 2:12 PM, Michael Muller <mmuller at enduden.com> wrote:

> 
> Hi, I found a bug in the code that generates exception tables, I've attached
> what I think is the correct fix.
> 
> When you run out of space writing to a buffer, the buffer management code
> simply stops writing at the end of the buffer.  It is the responsibility of
> the caller to verify that it has stayed in bounds and perform a retry with
> a larger memory estimate if not.  The function writing code does this, but
> the exception table code following it does not.  The end result is that
> exception table pointers can get registered pointing to invalid data, causing
> seg-faults when an exception is thrown.
> 
> I haven't implemented a test case that reproduces the problem, but I will do
> so.  (I've verified the problem and the fix in the scope of a much larger
> system) I'm open to suggestions as to how best to test it, I'm currently
> thinking of trying to create a highly contrived situation to force exception
> tables to be written at the end of a buffer that won't be long enough.

I'm actually somewhat curious at this point why it doesn't emit the tables before
deciding it's done with the function. That'd make it possible to move all of
the eh table code earlier in the method and use retryWith... instead of the loop.

-eric



More information about the llvm-dev mailing list