On the Origins of Indirect Jumps in Embedded Software
summary
Systematic binary study produces a taxonomy of why indirect jumps appear and measures their prevalence on 32-bit RISC‑V binaries compiled from C, C++, Fortran and Rust with GCC and LLVM at six optimization levels. Method chains disassembly, backward-pattern matching, addr2line-assisted source mapping and an optional manual pass to label jumps. Key results: indirect jumps remain rare—up to 8% of instructions—but categories matter (returns, long‑range jumps, jump tables, dynamic dispatch, function pointers), and Rust’s default linker behavior yields many long‑range jumps unless special flags are used.
AI-written summary · about
chapters (10)
- 0:00Indirect jumps in embedded software
- 2:07Research questions and contributions
- 3:10RISC-V indirect jump instructions
- 5:19Origins of indirect jumps
- 6:01Dynamic dispatch in C++ and Rust
- 8:08Long run jumps and compiler generation
- 9:09Jump tables and switch optimizations
- 9:52Indirect jump distribution study
- 14:09Conclusion and future work
- 15:14Q&A
related talks
20mAnalysis for Code Size Opportunities in RISC V
22mGigue: A JIT Code Binary Generator for Hardware Testing
17mRecent Developments in Optimizing Compilers for RISC-V
34mWhat happens to your code when you don't look?
30mAn Incremental Approach to JIT Construction
19mExploiting Undefined Behavior in C/C++ Programs for Optimization: A Study on the(…)
54mWhat Lies Beneath
50mWhat’s really going on under the hood? The hidden life of method calls.
