world leader in high performance signal processing
Trace: » 2005r4

2005 Release 4 (2005R4) Toolchain Release

November 25th 2005

This toolchain release contains tools for two targets: bfin-elf and bfin-uclinux. Both are cross toolchains for Blackfin. The bfin-elf target toolchain uses newlib for C library and can be used to develop standalone applications. The bfin-uclinux target toolchain uses uClibc for C library and can be used to develop uClinux applications.

This release contains many bug fixes. It’s more stable and usable.

Known Issues

  1. elf2flt passes -r option to ld. This option may make C++ objects with init_priority attribute not initialized properly.
  2. Also because elf2flt passes -r option to real.ld. You cannot use --gc-sections for ld since it cannot be used together with -r.
  3. 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.
  4. 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.
  5. As expected, -fstack-limit-symbol cannot be used with multithreading applications.
  6. 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.
  7. Toolchain cannot be built on Mac OS X 10.4.


  1. When testing GCC using its testsuite, not add -fPIC/-fpic for these test cases: gcc.dg/20010912-1.c, gcc.dg/20021018-1.c, gcc.dg/20030225-1.c.

Improvement since Last Release

  1. GCC now uses addressing modes of Blackfin better to generate more efficient code.
  2. Shared library support has been largely improved and well tested.
  3. Now GCC support the instruction which multiplies a signed by an unsigned value, widening from 16 to 32 bits:
    R3 = R1.L * R2.L (IS, M);
  4. Now GDB using hardware single stepping of Blackfin instead of software single stepping. This makes it possible to single step through two-instruction hardware loop instruction by instruction. This also avoid a GDB bug of debugging multithreading applications.
  5. Previously, the GDB used for debugging via JTAG was different with the one in Blackfin toolchain project. Now the two GDBs have been merged. The same GDB executable can connect to gdbserver for debugging uClinux applications via serial port or ethernet, or connect to gdbproxy for debugging U-Boot and Kernel via JTAG.

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 Blackfin gcc3 project tracker.


  • Previously interrupt_handler function attribute was broken. It would cause an internal compiler error. Now it has been fixed.
  • Previously there would be no debug information in the generated object file even you had passed -g to GCC when you were using GCC to compile an assembly file. Now GCC will pass --gdwarf2 to GAS if it sees -g.
  • Previously using -flimit-stack-symbol for function which calls alloca () or __builtin_alloca () would crash GCC. Now it has been fixed.
  • Previously there would be an error on make install when doing a linux-x-cygwin-x-bfin cross compiler. Now it has been fixed.





  • Previously Blackfin object file wasn't disassembled properly on big endian host, e.g. PowerPC. Now it has been fixed.


  • Previously stdout and stdin in the simulator were mixed up and you cannot redirect stdout from it. Now it has been fixed.


  • Previously kernel built on big endian host, e.g. PowerPC, cannot boot properly. This was because elf2flt didn't do endianess tranform from host to bfin target. Now it has been fixed.

Build Script

  • Previously there would be an problem when testing toolchain on a very fast host because the tcp port of a disconnected connection cannot be reused until a long timeout. A check has been added to BuildToolchain's -T option to assure that /proc/sys/net/ipv4/tcp_tw_recycle has been set to 1 on both host and target, which will recycle the tcp ports immediately.
  • Fix an issue of invocation of old sed, which does not like {}.


This release contains:

  • bfin-gcc-3.4.05r4-1.i386.rpm
    • rpm of the pre-compiled Blackfin 2005R4 release toolchain
  • bfin-gcc-3.4.05r4-1.src.rpm
    • source rpm of the Blackfin 2005R4 release toolchain (kernel source, which we used to build the binary toolchain, is also included)
  • bfin-gcc-3.4.05r4-1.tar.gz
    • compressed archive of the source of Blackfin 2005R4 release toolchain (only the toolchain source)
  • bfin-binary.tar.gz
    • compressed archive of the pre-compiled Blackfin 2005R4 release toolchain
  • test_tool_scripts.tar.gz
    • some useful test scripts
  • toolchain_test_results_2005R4.tar.gz
    • The test result sum and log files of Blackfin 2005R4 release toolchain
  • toolchain_releasenotes_2005R4.pdf
    • the release notes of this release


Test Results

The tests are run twice. Once on the host (bfin-elf with newlib testing on the simulator) and another running on the Blackfin hardware (bfin-uclinux with uClibc on uClinux). For details on the testing, see how Testing the Toolchain was done. Differences between running on uclinux/uclibc and simulator/new-lib usually means an issue in the kernel or library not in the toolchain.

=== gcc Summary ===         uClinux    Simulator
# of expected passes         24580      24577
# of unexpected failures     33         25
# of unexpected successes    1          1
# of expected failures       67         67
# of unresolved testcases    33         33
# of untested testcases      7          7
# of unsupported tests       381        381

=== g++ Summary ===         uClinux    Simulator
# of expected passes         9718       9727
# of unexpected failures     15         10
# of unexpected successes    2          2
# of expected failures       72         72
# of unresolved testcases    14         14
# of unsupported tests       90         90

=== gdb Summary ===         uClinux    Simulator
# of expected passes         9242      9016
# of unexpected failures     106       64
# of expected failures       34        41
# of known failures          27        27
# of unresolved testcases    12        9
# of untested testcases      8         5
# of unsupported tests       21        32

=== binutils Summary ===    uClinux    Simulator
# of expected passes        23         33
# of unexpected failures    2
# of unresolved testcases   2

=== gas Summary ===         uClinux    Simulator
# of expected passes        59         79