<div dir="ltr"><div class="gmail-gs" style="margin:0px;padding:0px 0px 20px;width:835px;font-family:Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:medium"><div class="gmail-"><div id="gmail-:1j5" class="gmail-ii gmail-gt" style="font-size:0.875rem;direction:ltr;margin:8px 0px 0px;padding:0px"><div id="gmail-:1j6" class="gmail-a3s gmail-aXjCH" style="overflow:hidden;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:small;line-height:1.5;font-family:Arial,Helvetica,sans-serif"><div>Hi, <br><br>I am looking into Control-Flow Integrity for indirect function calls, implemented with jump tables. Each jump table consists of all </div><div>address-taken functions in the program of a certain arity, or number of arguments. At each call site, the assembly code takes</div><div>the start address of the relevant jump table and performs a range and alignment check for the address of the function</div><div>being called.</div><div><br></div><div>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</div><div>jump tables in <a href="https://llvm.org/doxygen/LowerTypeTests_8cpp_source.html">LowerTypeTests.cpp</a>, but it's not clear how the starts and sizes of the jump tables are maintained. If someone</div><div>could point me to the code responsible for this bookkeeping I'd appreciate it!</div><div dir="ltr"><br>Shishir Jessu</div><img src="https://my-email-signature.link/signature.gif?u=452460&e=69832799&v=6efa26dd8b7b5e591d1b31d3c4a3519873f620bdba0e97b50ce1fae745e580e7" class="gmail-CToWUd" style="width: 0px; max-height: 0px; overflow: hidden;"><div class="gmail-yj6qo"></div><div class="gmail-adL"></div></div></div><div class="gmail-hi" style="border-bottom-left-radius:1px;border-bottom-right-radius:1px;padding:0px;width:auto;background:rgb(242,242,242);margin:0px"></div></div></div><br class="gmail-Apple-interchange-newline"></div>