Apparently, both GCC and Clang encode bl label
in such a way that the resulting machine code ends up jumping to itself,
not label
. However, when assembled on an actual thumbv7 machine, the machine code suddenly becomes correct.
What's more, in many cases of "incorrect" encoding that should jump to itself, objdump
somehow recognizes that it jumps
to the correct label.
Put Dockerfile
and mve_docker.s
in the same directory and run: