ARM Assembly benchmarking platform

This is a prototype of a website for testing and benchmarking small ARM assembly code. It is designed to allow students to submit their implementation of some functions (such as the ones asked in practical classes) in assembly. Then, this code is tested in an emulator against multiple inputs and some statistics are extracted (number of instructions, number of jumps taken, number of memory access).

Testing framework

Unfortunately, it is not that easy to "test" assembly code for correctness...

Current ideas

Description language of the tests + rules of writing asked to the students. For instance:

  • main program must be named _start and is exported
  • the array to sort must be located at a label tableau
  • the last jump is expected to be an extern _exit function

Then it is relatively easy to run the program (with maximum number of instructions) until our specified _exit address, and inspect either memory and/or registers to check our testcase.

Architecture overview

For now, this is a work in project and will probably not be finished before next year... It consists in several parts:

  • web platform: handles submission and present the results
  • simulator: currently expected to be based on epater, which is easily customizable (CPU-only emulator, no SoC, I/O and cache currently)
  • assembling and linking: for now, building relies on GNU toolchain
    • compiling must be isolated as much as possible on the server, as many security issues may be exploited using a C compiler (and probably also using the GNU assembler)!