LLVM CFI Jump Tables - Storage of Beginning Address

Hi,

I am looking into Control-Flow Integrity for indirect function calls, implemented with jump tables. Each jump table consists of all
address-taken functions in the program of a certain arity, or number of arguments. At each call site, the assembly code takes
the start address of the relevant jump table and performs a range and alignment check for the address of the function
being called.

My question is: how does LLVM keep track of the start of these jump tables, as well as their size? I see code to generate
jump tables in LowerTypeTests.cpp, but it’s not clear how the starts and sizes of the jump tables are maintained. If someone
could point me to the code responsible for this bookkeeping I’d appreciate it!

Shishir Jessu