简体   繁体   中英

Assembling ARM instructions on x86_64

I have a file, foo.S, which contains ARM thumb instructions, on an Ubuntu 22.04 x86_64 machine. Is it possible to convert this into an ARM object file using as from binutils or do I need to create a cross-compiler toolchain? I tried

$ as -mthumb foo.S -o foo.o

However, I got

as: unrecognized option '-mthumb'

even though that's one of the options listed in man as .

A minimal and deterministic procedure for assembling aS file targeting the T32 instruction set on an Ubuntu 22.04 x86_64 machine could be to install the latest Arm toolchain for arm-none-eabi

if you don't have wget installed, just execute: sudo apt-get install wget , or download arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz using a WEB browser into you home directory.

Once done:

cd ${HOME}
# Skip the wget command hereafter if arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz was already downloaded into your home directory.
wget "https://developer.arm.com/-/media/Files/downloads/gnu/11.3.rel1/binrel/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz?rev=95edb5e17b9d43f28c74ce824f9c6f10&hash=176C4D884DBABB657ADC2AC886C8C095409547C4" -O arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz
tar Jxf arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz

You can now assemble your program using the command:

${HOME}/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc -c -mthumb foo.S -o foo.o 

Please note that a file with the.S extension usually requires to be processed using cpp, the C preprocessor - this is why the command is using arm-none-eabi-gcc , and not arm-none-eabi-as .

run

sudo sh -c 'apt update;apt install binutils-arm-none-eabi;'

then the code can be compiled with

arm-none-eabi-as -mthumb foo.S -o foo.o

example:

$ echo nop > foo.S 
$ arm-none-eabi-as -mthumb foo.S -o foo.o
$ echo $?
0
$ file foo.o
foo.o: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), not stripped
  • i gathered this from @Nate Eldredge and @old_timer in the comments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM