ツールチェーン更新履歴
s005 (ARM)
armcc に似た stdio 等の排他制御スタブを実装しました。
libgcc の一部にも使用されます。
詳細は sourcemutex_stub.c を参照してください。
SOLID の DLL をサポート。
位置独立な libXXX_s.a ライブラリ、specs ファイル、リンカスクリプトを追加。
s は shared の意味で、Linux などでは libgcc_s.so のような拡張子になりますが
SOLID の DLL では static link なので .a です。
SOLID IDE のためのファイルを追加。(platform/)
libc
__aeabi_memset を __aebi_memset と typo していたバグを修正。
localtime(_r) の tm_mday と tm_yday のバグを修正。
C11 の aligned_alloc を追加。
GNU sed を追加し、makefile を簡略化。
misc
man/library_overview_ja.xls を xlsx 形式に変更。
bin/gnu_demangle(64).dll を削除。
ctime/gmtime/localtime/mktime/utime のエラーハンドリングを修正。
random_device の runtime_error を修正(生成するのは疑似乱数なので仕様的には変わらず未サポートとなります。)
Clang の内部的な変更。(IDE 内部でのみ使用。)
ベアメタル環境対応のための新規ターゲットサポート
Cortex-M4/M4F (ARMv7-M / FPv4-SP-D16-M)
Cortex-M7/M7F (ARMv7-EM / FPv5-DP-D16-M)
Cortex-R5/R7/R8 (ARMv7-R)
省メモリ環境向けのコンパクトな libc をサポート。
制限
C89 までサポート。
ASCII のみ。
wchar 未サポート。
locale は "C" のみ。
VLINK(stdio.h)はあくまでもデバッグ用でマルチスレッド未サポート。
malloc は簡素な K&R malloc で、メモリが断片化するほどの頻繁 な使用は想定していません。
C++ を使えるような環境に向けたものではないので、非推奨。
libc と libgcc 以外のライブラリとの互換性は保たれています。(上記サポート仕様外の関数はダミー実装で正常動作しません。)
使用方法
コンパイル時に -D_USE_LIBC_TINY を指定。
リンク時に
-specs=%GCCDIR%\lib\%GCC_DEFAULT%\tiny.specs
を指定。明示的に指定する場合のライブラリ名は libc_tiny.a と libgcc_tiny.a (-lc_tiny -lgcc_tiny)
s002 (ARM)
ソフトウェアアップデート
GCC 4.9.4 -> 6.4.0
GMP 6.1.2
MPFR 3.1.5 -> 4.0.1
MPC 1.0.3 -> 1.1.0
libiconv 1.14 -> 1.15
libelf 0.8.13
binutils 2.27 -> 2.28.1
GDB 7.12.1 -> 8.1
termcap 1.3.1
GNU make 4.2.1
Clang 4.0.0 -> 6.0.0
C は gnu11、 C++ は gnu++14 規格がデフォルトになりました。(GCC 4.x までは gnu89、gnu++98 がデフォルト。)
列挙型が 32 bit 固定になりました。(-fno-short-enums)
float-abi=hard をサポートしました。
fstat() に fd として stdin/stdout/stderr を渡した時にメモリアクセス違反が発生する不具合を修正しました。
(fwrite() など、fstat() を内部で使用する stdio.h のファイル関連関数にも影響があります。)
time.h
欠けていた標準関数を実装しました。
未サポートの関数をヘッダからコメントアウトしました。
time_t の開始年を DOS Time (1980) から UNIX Time (1970) に変更しました。
stat, fstat, lstat, utime のタイムスタンプ(秒の値)が正しくない不具合を修正しました。(MS-DOS 形式の秒の値は 2 で割った値でした。)
stdout が常にバッファリングされてしまい 'n' が来ても fflush() されない不具合を修正しました。
stdio が常にリンクされコードサイズが肥大してしまう不具合を修正しました。
dlmalloc の malloc_stats() は fprintf() を使用するため廃止されました。
abort() 内部の fprintf() を write() に置き換えました。
write() 内部の printf() を削除しました。
stdio を使用する ssp ライブラリを libc から分離しました。
不要な関数、データの削除
VLINK 有効時
ファイルの最大 open 数(_FD_MAX) を 100 から 20 に削減しました。
_LF_flg を廃止しました。ロングファイルネームサポートは常に有効です。
(変数自体は残っているので既存の crt との互換性は保たれています。)
その他(内部実装)
arm_neon.h を Clang で使用するとエラーになる問題を修正しました。
整数型のみサポートする
*iprintf/*iscanf
関数を追加しました(newlib 拡張)詳細は stdio.h を参照してください。
ただし、これは C99 までの仕様をフルサポートするため、スタック消費量がほとんど変わらず、内部で malloc() も使用するため、省メモリ環境においては SOLID が提供する同名の機能制限版関数の使用を推奨します。(SOLID とは別に、newlib との互換性のために追加された関数。)
s001 (ARM)
最初のリリース