<div dir="ltr"><div style>   Hi Zoltan,</div><div><br></div> For PC-relative addressing at least 2 conditions has to be satisfied:<div style> 1. code must know which PC it runs at</div><div style> 2. offset to data must be smaller than 4K to fit into immediate encoding</div>
<div style><br></div><div style>If we're not using inline constant pools, it would lead to rather tricky memory layout of code </div><div style>interleaved with data.</div><div style><br></div><div style>  Nikolay</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Feb 3, 2013 at 10:09 PM, Zoltan Varga <span dir="ltr"><<a href="mailto:vargaz@gmail.com" target="_blank">vargaz@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="font-size:13px;font-family:arial,sans-serif"><div class="im"><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><div class="im"><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><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>
<span class="HOEnZb"><font color="#888888">
<div style="font-size:13px"><br></div><div style="font-size:13px">                 Zoltan</div></font></span></div>
<br>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
<br></blockquote></div><br></div>