What is the difference between FIQ and IRQ interrupt system?

ARM calls FIQ the fast interrupt, with the implication that IRQ is normal priority. In any real system, there will be many more sources of interrupts than just two devices and there will therefore be some external hardware interrupt controller which allows masking, prioritization etc. of these multiple sources and which drives the interrupt request … Read more

Why use armeabi-v7a code over armeabi code?

Depends on what your native code does, but v7a has support for hardware floating point operations, which makes a huge difference. armeabi will work fine on all devices, but will be a lot slower, and won’t take advantage of newer devices’ CPU capabilities. Do take some benchmarks for your particular application, but removing the armeabi-v7a … Read more

Why use LDR over MOV (or vice versa) in ARM assembly?

It is a trick/shortcut. say for example ldr r0,=main what would happen is the assembler would allocate a data word, near the instruction but outside the instruction path ldr r0,main_addr … b somewhere main_addr: .data main Now expand that trick to constants/immediates, esp those that cannot fit into a move immediate instruction: top: add r1,r2,r3 … Read more

ARM compilation error, VFP registers used by executable, not object file

Your target triplet indicates that your compiler is configured for the hard-float ABI. This means that the libgcc library will also be hardfp. The error message indicates that at least part of your system is using soft-float ABI. If the compiler has multilib enabled (you can tell with -print-multi-lib) then you can use -mfloat-abi=softfp, but … Read more

exit.c:(.text+0x18): undefined reference to `_exit’ when using arm-none-eabi-gcc

This happens when compiling a file with arm-none-eabi-gcc in one machine/architecture to load it in an ARM target machine. Most probably you are not making use of semihosting, you want to retarget. ARMĀ® Compiler toolchain Version 4.1 indicates: Semihosting is a mechanism that enables code running on an ARM target to communicate and use the … Read more

Can _start be the thumb function?

Can _start be a thumb function (in a Linux user program)? Yes it can. The steps are not as simple as you may believe. Please use the .code 16 as described by others. Also look at ARM Script predicate; my answer shows how to detect a thumb binary. The entry symbol must have the traditional … Read more

Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)

For what it’s worth, before installing Homebrew you will need to install Rosetta2 emulator for the new ARM silicon (M1 chip). I just installed Rosetta2 via terminal using: /usr/sbin/softwareupdate –install-rosetta –agree-to-license This will install rosetta2 with no extra button clicks. After installing Rosetta2 above you can then use the Homebrew cmd and install Homebrew for … Read more