nanoMIPS GNU Toolchain v2019.03-07
Published on February 07, 2021
Introduction
The nanoMIPS Toolchain includes example code, source code, and documentation to facilitate development of bare metal applications on nanoMIPS simulators and development boards. These toolchains provide compilers, linkers, libraries and utilities for building applications to run on nanoMIPS cores.
Component Description
- GCC Bare Metal Toolchain
This is a software engineer's cross-development system for nanoMIPS processors, intended for statically linked embedded applications running on bare metal CPUs or light-weight operating systems. - GCC Linux (MUSL) Toolchain
For compiling Linux applications for Linux running on nanoMIPS cores.
Release Notes
This is a re-branding of Wave Computing's previous nanoMIPS GNU toolchain release, v2019.03-06
New Features
- Add support for overlays in GOLD linker.
Bug Fixes
- Fix decoding rule for the SAVE[32] instruction in GDB simulator.
- Enable GDB to correctly single-step over certain nanoMIPS control transfer (BBEQZC, BBNEZC, BEQC[16], BEQC[16], JALRC[16], JRC[16], BRSC) and frame handling (RESTORE.JRC[16], RESTORE.JRC[32], SAVE[32]) instructions.
- Fix misaligned output from assembler when handling jumptable relaxation with table alignment directives. This only affects very large jumptables where 16-bit signed/unsigned offsets are insufficient to cover all the jump vectors.
Other Changes
- Improve link speed for section pattern matching by reducing the number of string operations.
- Treat calls to library functions as absolute regardless if PIC option for bare-metal toolchain. This is trivially predicated on bare-metal links being static.
- Improve scheduling of multi-word loads and stores (LWM/SWM instructions) in the compiler for better performance.
Known issues
- movep optimization produces incorrect code in some cases (FIXME - more details from DraganM). It can still be disabled by using the compiler option -mno-opt-movep or restricted by -mno-movep-follow-copy-chains.
Documentation
FIXME Links to docs by MIPS Tech, needs to be replaced with re-generated MediaTek docs.
- Getting Started Guide, v1.02
- nanoMIPS ABI Supplement, v1.03
- Programmer's Guide, v1.04
- nanoMIPS ABI Porting Guide, v1.02
- Tuning memcpy for MIPS Cores - whitepaper, v0.2
Component Versions
Component | Based on upstream version |
---|---|
binutils | 2.28 |
GCC | 6.3.0 |
musl | 1.1.16 |
newlib | 2.5.0 |
GDB | 8.0 |
QEMU | 2.5.0 |
gold | 2.30 |
smallClib | Internal |
Python | 2.7.16 |
Downloads
Prebuilt Binaries
Variant | Size | Checksum |
---|---|---|
Bare Metal Toolchain | ||
Linux x86 (.tar.gz) | [121M] | 79eadef300d3fc0b98050e684743ee37 d1c0570581afac3d25d767ac3756df86545eef1677446190a5bc8e15c6de613f |
Windows x86 (.tar.gz) | [91M] | 06295369564c14471081d27ec50d8f43 71b219a34b2a770f54bea05fb71c3310a09f7e9938ad90166fa1c7d5e3c93a00 |
Linux x64 (.tar.gz) | [118M] | 952481837a9bb5a8dfb002c7c0c64a56 a5a5313bb63b418549e807d38cce068b817f115bf9455ccab6d9975710e3075f |
Windows 64 (.tar.gz) | [94M] | aa59f5170f1873c3d8002a4eb9c43fb4 6ee4a79dc54c4ee0511edd2d8a0e8ff2c92f08a3302dbcb7a57b941359a26512 |
MUSL/Linux Toolchain | ||
Linux x86 (.tar.gz) | [130M] | ba501ac62abf454dc976f3db1e055586 88d7f3534c895a31df547699cdf53c67a593bf0f947750ffb34cdc52360e187c |
Windows x86 (.tar.gz) | [106M] | 2d4a0f3ed72fb4405cd4f190e89141b5 b771c420edbd506d89a00f78b413a58eced5281f1fc30dff2d0a3b50f5173102 |
Linux x64 (.tar.gz) | [129M] | 70c835b634478b1dc82e0efa09de9e60 057037ac8a320a0d8b5743d9154846614c3bd669107053597d67f886cc17301a |
Windows 64 (.tar.gz) | [109M] | 3ebde00dc5ac09a7486a01094c284bfb 2a61b20b8e892668a9c08de319eacf8e9936409d2f32d61f2f0877b0009f59a9 |
Source Components
Source Package | Size | Checksum |
---|---|---|
binutils-2019.03-06-trial-1.src.tar.gz | [51M] | md5: bfe2dba67215a48ae79f7ab13c9f8bde sha256: ec791160c84eaa8a25fedbda83d4221678dc74e8d60c4abd84d87f2773dc8a6f |
gdb-2019.03-06-trial-1.src.tar.gz | [51M] | md5: deb1c06177f3911ab7b76d5ff4006679 sha256: 715573adfe61a7d2b3bb6ee688c02ec6eff708f6050a111695d82d7c64f97056 |
gold-2019.03-06-trial-1.src.tar.gz | [52M] | md5: 4936ec3ad183fd1c45c16f177558a0a7 sha256: 09d9738ebaa41f1d4fce8ce597d84cfc2391a4a299e71974cc079db82c4639fb |
newlib-2019.03-06-trial-1.src.tar.gz | [19M] | md5: aeeea2ef744e792ef0aa308ae2e0ab1f sha256: 9a6af4581be8d3fdaeb40a432f59ed99485ff40a0bcf7bdfe58c6fef0021eadc |
gcc-2019.03-06-trial-1.src.tar.gz | [112M] | md5: ea69e8fed0bcdaf9598c0fdc676950bb sha256: 12442b4abce26f2d385f54061a71fc56786de97958ed67423c18ebbd231cd813 |
smallclib-2019.03-06-trial-1.src.tar.gz | [1M] | md5: 7d6705b17da76d6a56e012a272a34ad2 sha256: 9bbb9309c5b428308b3d6fad4cdc35134463b0e7b084b8121a31f5335d94883a |
qemu-2019.03-06-trial-1.src.tar.gz | [11M] | md5: c42f056ef388530f17e8c5fc933c3601 sha256: 2cfd22441813b163168a8baaaa414a743502bac51d61dbad8a7077eb03dc1255 |
musl-2019.03-06-trial-1.src.tar.gz | [1M] | md5: 5e5d8d2b574a13bac921c0df7d7b6d96 sha256: abe15d1e27fc306d246b29c6c398859e52c9d333b308b43c07a13e5a75e479ec |
packages-2019.03-06-trial-1.src.tar.gz | [189M] | md5: 787547bba2667ab42b028aa512d72a42 sha256: ebab8ac045258aa9d2443a44a0ff3b6c510fa6c5f3170cad0ae75047cbebcef9 |
python-2019.03-06-trial-1.src.tar.gz | [16M] | md5: 9406af6bc6bcd61cbbcd6a8962b605af sha256: 806b40988fb359e837bf020a8996df97b427720b5bdd3620f4fa441721584222 |
License Agreements
License Categories
The components included in this toolchain fall under multiple license agreements:
- GPL v2 - QEMU, Linux
- GPL v3.1 - GNU toolchain, gdb, gmp, mpfr, libiconv
- LGPL v3 - mpc
- MIT / BSD style Licenses - Newlib, smallclib, tinyclib, libgloss/MIPS HAL, musl-libc, libffi, expat, ncurses
- zlib - zlib-libpng license
- PSFL v2 - python
The software included in this product contains copyrighted software that is licensed under the GPLv3. A copy of that license is included in the source. You may obtain the complete Corresponding Source code above.
Licenses for each component are installed as part of the package, are listed in the getting started guide and can be referred to again after the install.
Disclaimer of Warranties and Limitation of Liability
FIXME
License Agreements
GPL v3.1
The source code is distributed under the GNU General Public License version 3,
with the addition under section 7 of an exception described in the "GCC
Runtime Library Exception, version 3.1" as follows (or see the file
COPYING.RUNTIME):
GCC RUNTIME LIBRARY EXCEPTION
Version 3.1, 31 March 2009
Copyright (C) 2009 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
This GCC Runtime Library Exception ("Exception") is an additional
permission under section 7 of the GNU General Public License, version
3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
bears a notice placed by the copyright holder of the file stating that
the file is governed by GPLv3 along with this Exception.
When you use GCC to compile a program, GCC may combine portions of
certain GCC header files and runtime libraries with the compiled
program. The purpose of this Exception is to allow compilation of
non-GPL (including proprietary) programs to use, in this way, the
header files and runtime libraries covered by this Exception.
- Definitions.
A file is an "Independent Module" if it either requires the Runtime
Library for execution after a Compilation Process, or makes use of an
interface provided by the Runtime Library, but is not otherwise based
on the Runtime Library.
"GCC" means a version of the GNU Compiler Collection, with or without
modifications, governed by version 3 (or a specified later version) of
the GNU General Public License (GPL) with the option of using any
subsequent versions published by the FSF.
"GPL-compatible Software" is software whose conditions of propagation,
modification and use would permit combination with GCC in accord with
the license of GCC.
"Target Code" refers to output from any compiler for a real or virtual
target processor architecture, in executable form or suitable for
input to an assembler, loader, linker and/or execution
phase. Notwithstanding that, Target Code does not include data in any
format that is used as a compiler intermediate representation, or used
for producing a compiler intermediate representation.
The "Compilation Process" transforms code entirely represented in
non-intermediate languages designed for human-written code, and/or in
Java Virtual Machine byte code, into Target Code. Thus, for example,
use of source code generators and preprocessors need not be considered
part of the Compilation Process, since the Compilation Process can be
understood as starting with the output of the generators or
preprocessors.
A Compilation Process is "Eligible" if it is done using GCC, alone or
with other GPL-compatible software, or if it is done without using any
work based on GCC. For example, using non-GPL-compatible Software to
optimize any GCC intermediate representations would not qualify as an
Eligible Compilation Process.
- Grant of Additional Permission.
You have permission to propagate a work of Target Code formed by
combining the Runtime Library with Independent Modules, even if such
propagation would otherwise violate the terms of GPLv3, provided that
all Target Code was generated by Eligible Compilation Processes. You
may then convey such a combination under terms of your choice,
consistent with the licensing of the Independent Modules.
- No Weakening of GCC Copyleft.
The availability of this Exception does not imply any general
presumption that third-party software is unaffected by the copyleft
requirements of the license of GCC.
NewLib, SmallClib,TinyClib and Musl
These libraries are licensed under a collection of code, copyright held by multiple
contributors and distributed under an umbrella of permissive MIT and BSD-like free
licenses. The complete license text is provided in the binary distribution
under [Toolchain_Root]/share/copying
COPYING.NEWLIB
COPYING.MUSL
COPYING.CLIB