Recently I have taken up an interest in learning "bare-metal" development for ARM processors using native assembly. I bought a Raspberry Pi Zero which features an ARM11 processor, and am currently looking for a toolchain to assemble and link my code. It says on this page that only the A, R and M profiles are supported by the GNU Toolchain for Arm Processors, but I have come across this source which indicates that GCC is capable of compiling code for Arm architectures all the way back to ARMv4, and indeed supports the processor that I want to compile for (ARM1176JZF-S). Is there something I'm missing here? These are conflicting sources, are they not? And if the GNU Toolchain does not in fact support the ARM11 processor, what other options do I have?
Does the GNU Toolchain for Arm Processors provide support for classic processors such as the ARM11?
2.1k views Asked by William Robertson At
1
There are 1 answers
Related Questions in GCC
- File refuses to compile std::erase() even if using -std=g++23
- the difference between two style of inline ASM
- Why veneer code generated by gcc for cortex-m0 seems 8-byte aligned?
- How to compile the Linux kernel with -O0 for more detailed debug?
- GMP Windows installation "configure: error: could not find a working compiler"
- Unable to run get .exe file from assembly NASM
- Problem with compiling c++ project that is running python code using Python.h -> undefined reference
- How to use a newer linker and glibc in a Kotlin/Native project?
- "Config.guess failed to determine the host type" when trying build binutils-2.7 with Cygwin
- Trying to compile GCC returns a bunch of errors
- Compiling with gcc fno-common option causes performance degradation
- On cygwin I get errors containing -lintl and -liconv when running gcc
- Constant function pointer optimization
- How to obtain mingw-w64 version 9.3.0 or older for MSYS2?
- How to fix this error in terminal while writing hello world code in VS Code on C?
Related Questions in RASPBERRY-PI
- Raspberry Pi Sense Hat with Pyinstaller
- Waiting for several hours before resuming execution
- Using compositor in Gstreamer to merge imagesequence with video/audio stream
- How to make this sensor keep taking readings once its when_in_range function has been activated?
- Emulating an HID device with a raspberry pi 5
- How to stream PCM audio to a speakers both on mac and linux in Node.js?
- I want to use NRF24L01 transceiver with raspberry pi but some GPIO pins are already occupied by 3.5 inch display how do i connect transceiver
- voron 2.4 mainsail kiauh error install crowsnest (solved problem)
- Pi4J minimal example's LED doesn't blink
- How can I connect and send data from react-native to raspberry pi
- Xpt 2046 Display with Pn532 RFID reader
- Google SDK for Raspberry pi
- How to use a RaspberryPi camera with the cv2.videoCapture() function?
- How do I capture audio from the system bus in a node app (or from sox) on a raspberry pi?
- Can't open /dev/mem: Operation not permitted Raspberry Pi
Related Questions in ARM
- Jiobook flashing
- How to flush denormal numbers to zero for apple silicon?
- How to exploit Unified Memory in OpenCL with CL_MEM_ALLOC_HOST_PTR flag?
- ARM Assembly code is not executing in Vitis IDE
- Which version of ARM does the M1 chip run on?
- Vector by Scalar Division with -ffast-math
- Why veneer code generated by gcc for cortex-m0 seems 8-byte aligned?
- Getting almost random time stamp counter on ARM
- Portenta H7 Baremetal Development and a Little Guidance on Embedded System Learning Roadmap
- STM32 RTC3 Mixed Mode: Writing TR resets SSR
- Implementing Quick Sort Algorithm in Visual2 with armv7
- How can I create an Inline assembly command with a multi-variable register offset?
- Inquiry: ARM Compatibility for Puppeteer
- Confusion with thumb instructions while compiling recipe for cortexm4 CPU
- Difficulty understanding virtual LPIs in GICv3
Related Questions in GNU-TOOLCHAIN
- gcc linking to standard library functions failing
- Unrecognized options while configuring newlib
- Running QEMU with support for RISC-V Vector Extensions
- Toolchain-gccarmnoneeabi-teensy error. Platformio project for teensy 4.1
- GNU ToolChains Cross Compiler c/C++library issue
- toolchains for cross-compilation of 32bit ARMv7-a platform
- "cannot compute suffix of object files" error occurs during the installation of RISCV toolchain
- (make) Recipes breaks after definding PATH
- Where is the source code from the WCH RISC-V toolchain?
- Error: unrecognized opcode `mul a0,t4,t5', extension `m' or `zmmul' required
- Inconsistent Binary Output When Building STM32CubeIDE Project on Linux and Windows
- I can't add custom instructions to RISC-V GNU GCC
- Use Makefile and sdcc to build a perfect automation for MCS-51 development
- Downloading gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu from source, failed building libc
- How to run GCC for ARM cross compiling in WSL2 via WINE?
Related Questions in RASPBERRY-PI-ZERO
- Selenium with Chromium driver on Raspberry Pi
- Display an video flux from libcamera and gstreamer to an Java JFrame
- How to Get All Channels Inputs of an ADC at a Time
- Raspberry Pi Zero 2 W automatically disconnects after editing and saving new code in the `code.py` file
- Issue with RTC DS1307 and Raspberry PI setup
- RP Zero with new system and caemra module 3 - camera libs incompatibility
- Retropie Game Controller using evdev python module
- How to use create-react-app on a RaspberryPi Zero nowadays?
- pyAudio input seems lagging when using after some "idle" time
- how to install flutter on raspberry pi zero 2 w?
- ARM1176JZF-S not allowing banked register access
- Installing ws for node on RaspberryPi
- Alsa utils only run as root on Raspbian
- Why my program keeps blocking in a nondeterministic way using CURL library to do HTTP requests?
- How to emulate a HID device (mouse) on rPI Zero
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Just try it
(no this is not a complete functional program, just a tools demonstration)
Remember that gnu binutils (assembler, linker and other binary utilities) and gnu gcc (c compiler) are two separate projects so there is the expectation that they are not perfectly in sync one may support things the other doesn't.
I think they dropped support for the armv2/3 which is the acorn, actual chip stuff in recent tools perhaps gcc.
Where older versions of gcc were fine with it.
No warnings/errors
that means armv4t vs:
hmm they went so far as to make it a tail optimization, okay.
A difference between armv4t and armv5t is you can pop pc but you cant use it for arm/thumb interwork so the compiler unless possibly told, will generate interwork compatible code.
So yes even with gcc 9.3.0 it is supported. I used the wrong computer, I thought I had the latest on this one, will edit the answer with 10.2.0
Edit
Yes, I should just rewrite this, maybe I will...
Or try the original program
so 10.2.0 and 2.35 both support this core/cpu.
You can see the arm1176jzf-s versions in there of which one is in the raspberry pi zero.
arm-none-eabi- vs arm-linux-gnueabi-, arm-whatever-whatever unless possibly configured in the build of the tool, will all support the same targets for the same version of gcc (or binutils).
EDIT NOTE
So this is along the lines of does gcc support armxyz. The arm2/3 was dropped recently but older versions do/did support it (there is at least one open core armv2/3 out there that is I guess license free so if you want to use it you will want some tools).
But from the above demonstration with the current tools as of this writing (10.2.0 and 2.35) the armv4/4t up to the present (armv7-a/r/m) appear supported by gcc and binutils.
So since they did purge the arm2/3 at one point which probably wasn't too hard, there is an overlap between the arm2/3 and the present armv4 to armv7 as far as the machine code goes, there are some instructions in arm2/3 that didn't make it across the acorn/advanced transition (chips to cores, different companies) some/many overlap. As with the overlap from armv4 to armv7. So technically they may wish for example to remove armv4 support at some point as it has some things as shown above that are special cased. But if you bother to dig into the sources, you will find they appear to be held together with duct tape and bailing wire, so I cant imagine there would be a strong desire to go in and rip stuff out, even if you simply searched for armv4 or armv5 or armv6 or whatever the variable name for the flag is that indicates these.
They have done it before and they might again, so be prepared, test each build of the tools when you switch to it or better yet be explicit in your build so that if/when the tool drops support it will fail to build.
What you do in that case is you use an older one. On Debian/Ubuntu/Mint, etc
Which won't be cutting edge they will be a few major revs back. But there was a distinct change after gcc 5.x.x that makes it highly desirable to keep a hold of, gcc's optimization went downhill, binaries are larger, etc. Newer versions of Ubuntu, etc may not have the gcc-5 so you can try gcc-7 instead, you lose the gcc 5.x.x unless you can build it yourself, which eventually will become obsolete, the gnu folks don't tend to write clean C code that is meant to be compiled for many many years to come so their own tools won't build their own tools after some period of time. So if you get that deep in the hole then you run an older Linux on a virtual machine and in that Linux you grab or build the older toolchain (or windows or whatever).
While the Raspberry Pi Zero still exists I can't see armv6 support going away any time soon. It really has to do with maintainers and perhaps these conferences they have. pdp-11 support was ADDED not too many years ago and is still maintained (pdp-11s are still in use today, although with the hit to the airline industry from the virus, will see, maybe there is an opportunity to upgrade there). (pdp-11, a good first processor for learning assembly language, good simulators out there and easy to write your own).
Is the ARM11 (in the Pi Zero) still supported? Yes gcc and binutils still support it.
What do I do if/when they don't? Use an older toolchain, or worse case, run an older operating system that supports building/running the older toolchain.