<div dir="ltr">   Hi Paolo,</div><div dir="ltr"><br></div><div dir="ltr">On Mon, Feb 4, 2013 at 6:36 PM, Paolo Molaro <span dir="ltr"><<a href="mailto:lupus@oddwiz.org" target="_blank">lupus@oddwiz.org</a>></span> wrote:</div>
<div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>>   8. All bl/blx must be bundle-end aligned  and LR is masked before return,<br>
> as everything else in 3.<br>
<br>
</div>Can you define precisely what a bundle is in this context? 16 bytes? Does it<br>
need to be aligned? Do the data bundles need alignment, too?<br></blockquote><div>Yes, bundle is 16-bytes aligned block of instructions  (or data, in case of data bundles)</div><div>sized 16 bytes. Alignment requirements are of course only for code in .text, anything in </div>
<div>.data could be arranged the way application wants.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The use of an extra register makes this unsuitable for the genric ARM port, IMHO.<br>
</blockquote><div><br></div><div>Well, it's not mandatory to reserve a register. Instead we can do</div><div>movw ip, lo(jumptable)</div><div><div>movw ip, hi(jumptable)</div></div><div>ldr ip, [ip + offset]</div><div>
<br></div><div>It's just code will get a bit bigger. Generally we, at the NaCl team, are not really fond of arbitrary literals</div><div>in the instruction stream (as this is a simple way to use hole in the sandbox, or inject shellcode externally), </div>
<div>so for us preferable solution would be to move all data including jump tables to the .data section. </div><div>  </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Can't you combine a data bundle with up to three trampolines which can easily access<br>
the 12 bytes in the data bundle with pc-relative addressing?<br></blockquote><div>Yes, that's possible, but still problems with </div><div>  - inline constant pools, and thus arbitrary instructions</div><div>  - code patching</div>
<div>remains.</div><div><br></div><div> What would you say if instead of using a register we'll use scheme with initialization of jump table just before use? </div><div>It would be 2 additional instructions per trampoline, which is probably not that bad. </div>
<div><br></div><div>To measure impact we have to implement it and see if it makes any difference in performance.</div><div><br></div><div> Thanks,</div><div>   Nikolay.</div></div></div>