FS#10430 - EABI toolchain for ARM targets.

Attached to Project: Rockbox
Opened by Andrew Mahone (Unhelpful) - Saturday, 11 July 2009, 09:13 GMT
Last edited by Rafaël Carré (funman) - Wednesday, 16 June 2010, 18:47 GMT
Task Type Patches
Category Build environment
Status Closed
Assigned To No-one
Operating System All players
Severity Low
Priority Normal
Reported Version Version 3.3
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No


Updates to build gcc-4.3.3 and binutils-2.19.51 for ARM, allowing targets which can't map all functions within short-call range of each other to use short calls everywhere, which will be pointed at stubs that jump to the proper target if it is out of range for a short call. This saves about 45KB on e200, as well as making calls between functions in different source files faster, provided that caller and callee are within short-call range.

The down side is that targets that don't need this appear to get a bit larger, and that EABI has different structure packing specifications, so that structures that are written to disk will no longer be compatible, and asm that relies on C struct size or packing may need rewritten. Core JPEG is fixed with regard to these new rules, but nothing else has been yet. despite that, I haven't yet found anything in core that doesn't work. Codecs i've tested (vorbis, mp3) are broken, probably due to structure packing changes.

To use this patch, you'll need to store the gcc diff in your rbdev-dl directory before running, since the script will try to download it otherwise.
This task depends upon

Closed by  Rafaël Carré (funman)
Wednesday, 16 June 2010, 18:47 GMT
Reason for closing:  Out of Date
Comment by Andrew Mahone (Unhelpful) - Sunday, 12 July 2009, 02:42 GMT
Add a new ASMDEFS mechanism. Special C files are compiled, but not assembled, and the result processed to create defines for compile-time values which the assembler can't calculate. Name a file *_asmdefs.c, add it to ASMDEFS_SRC in a makefile, and include it (relative to the source root) as <dir>/<name>_asmdefs.h. Define a global int value with the name AD_<label> in the .c file to generate a #define <label> <value> in the .h file. These can be used to export structure size, packing, or member offset data to assembly files so that they may access arrays or members of structures without hard-coded numeric values for sizes or offsets. Converted jpeg_idct_arm.S as proof-of-concept, also removing #ifdef HAVE_LCD from it.