[LLVMdev] building a jump table in LLVM IR

Joshua Cranmer pidgeot18 at gmail.com
Thu Jan 3 06:50:47 PST 2013


On 1/2/2013 11:05 AM, Tom Roeder wrote:
> Hi,
>
> I'm currently writing an opt module for fast indirect call checks
> using a table of allowed indirect call targets. The code replaces
> function pointers with offsets into the table then masks the offset
> for the table size and restores the function pointer before the call.
> I have some ways of dealing with some kinds of external code that are
> sufficient for my use case but not for more general use.
>
> I'd like to generalize the table to be a table of jump instructions (a
> classic jump table) rather than just a table of function pointers,
> since this would solve some of my problems for the more general cases.
> I know how to do this using inline assembly in LLVM, but this ties the
> module to a particular architecture or set of architectures.
>
> Is there a way to build a table of jump instructions like this in pure
> LLVM IR? My limited understanding of LLVM says no, and I haven't been
> able to find a way to do this, but I would appreciate any pointers you
> can give me.

You can use a jump table using indirectbr, although note that this 
instruction requires you to label all the possible target blocks and 
that the targets can only be blocks in the same function.

-- 
Joshua Cranmer
News submodule owner
DXR coauthor




More information about the llvm-dev mailing list