How to disassemble a program using xobjdump
version
1.0.1
scope
Example.
This code is provided as example code for a user to base their code on.
description
How to disassemble a program using xobjdump
boards
Unless otherwise specified, this example runs on the SliceKIT Core Board, but can easily be run on any XMOS device by using a different XN file.
The xTIMEcomposer tools contain the xobjdump utility, which you can use to disassemble a given executable. For example, compile the following code:
#include <print.h> int main() { printstr("Hello World!\n"); return 0; }
From the command line, the resulting executable can be disassembled as follows:
xobjdump -d a.xe
This will produce the following output:
.... <main>: 0x000100ac: 44 77: entsp (u6) 0x4 0x000100ae: 4e 68: ldc (ru6) r1, 0xe 0x000100b0: 00 f0 05 60: ldaw (lru6) r0, dp[0x5] 0x000100b4: 00 f0 4d d0: bl (lu10) 0x4d <printstr> 0x000100b8: 40 68: ldc (ru6) r1, 0x0 0x000100ba: 42 54: stw (ru6) r1, sp[0x2] 0x000100bc: 01 54: stw (ru6) r0, sp[0x1] 0x000100be: 02 5c: ldw (ru6) r0, sp[0x2] 0x000100c0: c4 77: retsp (u6) 0x4 ....
You can use xobjdump to intermix the source lines with the disassembly output. This is enabled via the -S command line option:
xobjdump -S a.xe
This will produce the following output:
.... int main() { 0x000100ac: 44 77: entsp (u6) 0x4 0x000100ae: 4e 68: ldc (ru6) r1, 0xe printstr("Hello World!\n"); 0x000100b0: 00 f0 05 60: ldaw (lru6) r0, dp[0x5] 0x000100b4: 00 f0 4d d0: bl (lu10) 0x4d <printstr> 0x000100b8: 40 68: ldc (ru6) r1, 0x0 return 0; 0x000100ba: 42 54: stw (ru6) r1, sp[0x2] 0x000100bc: 01 54: stw (ru6) r0, sp[0x1] 0x000100be: 02 5c: ldw (ru6) r0, sp[0x2] 0x000100c0: c4 77: retsp (u6) 0x4 ....