world leader in high performance signal processing
Trace: » 2009r1

2009 Release 1 (2009R1) Toolchain Release

DRAFT (up to r3375)

This toolchain release contains tools for three targets: bfin-elf, bfin-uclinux, and bfin-linux-uclibc. All are cross toolchains for the Blackfin architecture. The bfin-elf target toolchain uses newlib for the C library and can be used to develop standalone applications. Both of the bfin-uclinux and bfin-linux-uclibc target toolchains use uClibc for the C library and can be used to develop Linux applications. bfin-uclinux is used for the FLAT binary format while bfin-linux-uclibc is used for the ELF FD-PIC binary format.

This release provides two GCC versions: 4.1.2 and 4.3.3. The Binutils version in this release is 2.17. The GDB version in this release is 6.6. The uClibc version is 0.9.29.

Known Issues

  1. elf2flt passes -q option to real.ld. --gc-sections will be ignored by ld since it cannot be used together with -q.
  2. We do not support profiling using gprof. The latest uClibc no longer supports gcc -fprofile-arcs -pg style profiling. You may use other alternatives, like OProfile.
  3. Single stepping through hardware loop does not work when there are only one instruction in the loop. It will step over the whole loop instead.
  4. When running bfin-elf-gdb, interrupting the simulated program with ^C does not work immediately. It will not take the effect until user press another key.
  5. As expected, -fstack-limit-symbol cannot be used with multithreading applications. Use -mstack-check-l1 instead.
  6. -fstack-limit-symbol cannot be used with -mfdpic. Use -mstack-check-l1 instead.
  7. -fprofile-arcs cannot be used with -mfdpic.

Changes

  1. Two new JTAG tools bfin-jtag and bfin-gdbproxy are included.
  2. A new set of toolchain build and test scripts are added for experimental use. They are available through SVN only. The test script, buildscript-experimental/toolchain-regtest, supports testing installed toolchain.
  3. Pseudo instructions DBGA, DBGAH, and DBGAL have new encodings.
  4. Instruction set information has been added to flags of ELF header. Currently there is only one instruction set type for Blackfin: BF532 compatible ISA.
  5. Now it's GDB who decrements PC after breakpoint. gdbserver, gdbproxy, and kgdb have been changed accordingly.
  6. BuildToolChain stops supporting testing on Linux target running FD-PIC user space applications.

Improvement since Last Release

  1. Add support for build, load code and data with L2 attribute in toolchain.
  2. Better support for Windows and Mac OS X host.
  3. Support more processors and silicon revisions: bf512-0.0, bf514-0.0, bf516-0.0, bf518-0.0, bf522-0.2, bf523-0.2, bf524-0.2, bf525-0.2, bf526-0.2, bf527-0.2, bf531-0.6, bf532-0.6, bf533-0.6, bf538-0.5, bf539-0.5, bf542m-0.3, bf542-0.2, bf544m-0.3, bf544-0.2, bf547m-0.3, bf547-0.2, bf548m-0.3, bf548-0.2, bf549m-0.3 and bf549-0.2.
  4. Toolchain testing has been enabled on bare board through JTAG
  5. Be able to test installed toolchain now. (buildscript-experimental/toolchain-regtest)

GCC

  1. GCC 4.3.3 has been added.
  2. Hardware loop support has been largely improved. GCC now finds more opportunities for hardware loops and more stable.
  3. The following builtins have been added for Blackfin: __builtin_bfin_loadbytes, __builtin_bfin_mulhisill, __builtin_bfin_mulhisilh, __builtin_bfin_mulhisihl, __builtin_bfin_mulhisihh.
  4. Parallel instruction support has been largely improved. GCC now finds more opportunities for packing parallel instruction.
  5. Better workaround implemented for speculation load anomaly.
  6. GCC now supports -micplb.
  7. GCC now implements more workarounds: 05000074, 05000312 and 05000426.
  8. A optimized 64-bit integer multiply function has been added in GCC for Blackfin.
  9. Atomic operations have been implemented in GCC for Blackfin.
  10. Make it possible to disable symbol versioning in libgfortran and libssp.
  11. GCC now can generate add instruction using IREGS.
  12. bfin-uclinux-gcc now adds -elf2flt by default. -no-elf2flt is also provided in case you don't like the default.
  13. bfin-uclinux-gcc now links in proper start files and C library for shared FLAT application. -static-libc is also provided in case you don't like the default.
  14. Allow GCC to be relocated when configured with --with-gxx-include-dir.
  15. A new pass has been added to generate widening multiplies more reliably.
  16. Register allocation has been improved.
  17. Generate fewer NOPs for workarounds.
  18. Generate efficient code for the more kinds of comparisons.

Build Script

  1. When compiling with a uClibc config that doesn't have UCLIBC_HAS_LOCALE, use the generic locale support for libstdc++ instead of the uClibc specific one.
  2. Earlier setup of BINUTILS_EXTRA_CONF does not break.
  3. Add ability to change CFLAGS for uClibc through new option -U.
  4. Make sure we are running on a case sensitive filesystem.
  5. Parse out svn/git info and pass it to gcc-4.3 configure to get branding info.
  6. Keep track of how long things take.
  7. Enable testing on SMP Linux target.
  8. Add the print info to the board to tell the end of testing.
  9. Install libgomp and libobjc for GCC 4.3.
  10. Canadian cross building has been improved.
  11. libgomp testing has been enabled.

LDR

  1. Announce the target of the jump block.
  2. Add a check to see if the target supports fork().
  3. Loading through networks are improved.
  4. Documentation has been updated.
  5. Add binary flags to make windows not crap itself due to working with brain dead ascii mode by default
  6. Do not allow source ldr file to be a non-normal file by default in case people reverse arguments by accident (specify a device as LDR source instead of destination).
  7. Make sure targets are valid.
  8. Allow jump blocks to be omitted.
  9. Do not blockify phdrs by default.
  10. Set default block size back to 0x8000 as bootroms tend to die with large blocks.

uClibc

  1. Enable sbrk for everyone.
  2. Implement mmap2 support generically using Blackfin as a base.
  3. Add C inline functions for fixed code functions.
  4. Add a standard ENDPROC() macro for bfin.
  5. Add work by Jean-Christian de Rivaz to implement INTERNAL_SYSCALL().
  6. Update to upstream 0.9.29 release.
  7. Default configs disable 2.4 modules functions, and enable BSD signal functions (sighold etc.) and ustat.
  8. uClibc/libc/sysdeps/linux/bfin/sys/reg.h has been dropped because it was unused.
  9. Update ptrace.h to latest glibc version.
  10. Stack checking of linuxthreads has been disabled on Blackfin SMP linux at runtime.
  11. Copy implementation of nextafterf from glibc 2.7.
  12. FD-PIC lazy binding isn't thread safe. Disable it when we detect an executable linked against libpthread.
  13. Enable daemon() support.

Simulator

  1. Use `EXCPT 0' instead of `RAISE 0' for syscall.
  2. Pseudo instructions DBGA, HLT is explemented for debug purpose.
  3. Initial tests are added for Blackfin.
  4. Add support for return registers in simulator.
  5. Add support for pushing and popping ASTAT.

GAS

  1. GAS now detects resource conflict in parallel instruction.
  2. Pseudo instruction HLT has been implemented.

LD

  1. bfin-linux-uclibc target ld now default uses elf32bfinfd emulation.

Elf2flt

  1. Update to upstream.
  2. configure now has a new --with-binutils-build-dir flag.
  3. configure now has a new --with-zlib-prefix flag.
  4. Add support for zlib rather than gzip binary to elf2flt as well.
  5. Only respect the __start symbol.
  6. Keep names of gcc eh sections in the output.
  7. Keep .init and .fini.
  8. xmalloc() provides better error functions when they fail whereas the malloc() checking only displayed “error!”. This is relevant because when executing gcc to link something, a generic error message doesn't tell you that the problem is actually going from elf2flt.

fdpichdr

  1. Improve parsing of int/hex options.
  2. Fix when running on big endian systems.
  3. Option parsing of numbers is more flexible -- you gave specify in hex, decimal, or octal rather than just decimal.

libbfdsp

  1. Has fr32_to_float and float_to_fr32 from VDSP.
  2. The object files that are generated from assembly files are stripped when installed.

Others

  1. Use `EXCPT 0' instead of `RAISE 0' for syscall in libgloss.
  2. Update VDSP headers used in libgloss to the 5.0 update 1 release.
  3. Insight testing on uClinux using FLAT file format has been improved.

Bug fixes

This section lists the bugs that are known to be fixed in this release. The number before the description is the bug ID in the GNU toolchain for the Blackfin processor project tracker. Here only list the import bugs that have been fixed. For a full list, see tracker.

GCC

GAS

LD

Binutils

GDB

Simulator

Build Script

uClibc

libgloss

libbfdsp