> Hi, > > We're working on implementation of Mono JIT/ARM for Native Client, and want to discuss certain details about design of our solution. > Native Client's sandboxing mechanism, being a SFI solution, has rather strict limitations on how verifiable machine code may look like. To be precise:
> Our 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. > So for example, trampoline like this: > ldr ip, [pc, #0] > b skip > .word target > skip: > mov lr, pc > mov pc, ip > would become (if r10 is used as jump table base register): > .align 4 # for NaCl only > ldr ip, [r10, #32] # unique (per-method or class) index for every callsite > nop # for NaCl only, to have bl at bundle end > bic r10, r10, #0xc000000f # for NaCl only > bl ip # or blx > r10 could point somewhere in method metadata, where its relocation table is stored. > 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 > such a table (maybe patch info?) are very welcome. Hi, ARM has PC relative addressing, so it would be easier to use that instead of reserving a register. Zoltan
_______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list