<div style="font-size:13px;font-family:arial,sans-serif"><div style="font-size:13px">>  Hi,</div><div style="font-size:13px">></div><div style="font-size:13px">>  We're working on implementation of Mono JIT/ARM for Native Client, and want to discuss certain details about design of our solution.</div>
<div style="font-size:13px">>  Native Client's sandboxing mechanism, being a SFI solution, has rather strict  limitations on how verifiable machine code may look like. To be precise:</div><div style="font-size:13px">
<br></div><div style="font-size:13px"><div class="gmail_default">>  O<span style="font-size:13px">ur idea is to emit per-method (or per class?) "jump table" somewhere in .data, which contains list of all relocations, and use some register to point to this table.</span></div>
</div><div style="font-size:13px">> So for example, trampoline like this:</div><div style="font-size:13px"><div>>        ldr ip, [pc, #0]</div><div><span style="white-space:pre-wrap">> </span>b skip</div><div>>        .word target</div>
<div>>      skip:</div><div><span style="white-space:pre-wrap">>        </span>mov lr, pc</div><div><span style="white-space:pre-wrap">>   </span>mov pc, ip</div><div>> would become (if r10 is used as jump table base register):</div>
<div>>      .align 4 # for NaCl only</div><div>>         ldr ip, [r10, #32] # unique (per-method or class) index for every callsite</div><div>>         nop  # for NaCl only, to have bl at bundle end</div><div>>         bic r10, r10, #0xc000000f # for NaCl only</div>
<div>>         bl ip # or blx<br></div></div><div style="font-size:13px">>  r10 could point somewhere in method metadata, where its relocation table is stored.</div><div style="font-size:13px"><br></div><div style="font-size:13px">
> So our question is if someone sees problem with such approach, or could suggest better alternative. Also advises which register could be used as the jump table base, and where > to store</div><div style="font-size:13px">
> such a table (maybe patch info?) are very welcome.</div><div style="font-size:13px"><br></div><div style="font-size:13px">Hi,</div><div style="font-size:13px"><br></div><div style="font-size:13px">ARM has PC relative addressing, so it would be easier to use that instead of reserving a register.</div>
<div style="font-size:13px"><br></div><div style="font-size:13px">                 Zoltan</div></div>