ライブラリの仕様(AArch64)

exeGCC for SOLID s006 (AArch64)ライブラリ仕様

ライブラリの共通設定

全てのライブラリは以下の設定でビルドされています。 設定が異なるユーザープログラムとライブラリをリンクした際の動作は保証されません。

  • char 型は signed。(-fsigned-char)

  • C は gnu11、 C++ は gnu++14 規格。

C11/C++14 標準関数サポート

  • ライブラリとスタートアップ

    • 初期の A53 エラッタ未対応です。

      -mfix-cortex-a53-835769-mfix-cortex-a53-843419 オプションは付いてません。

    • LP64 ABI と unaligned data access 設定のみサポート。

    • large code model

      デフォルトの -mcmodel=small では、コードとデータを 4GB 範囲に収める必要がありますが、 large は常にフルアドレスで参照するため、無制限です。そのため若干のオーバーヘッドがあります。

  • libc と libm は NetBSD-9.1 ベース

    注釈

    BSD 独自の関数はサポート範囲外です。ヘッダには存在しますが、実体が存在しない関数も多数あります。

    • KMCによる標準関数の実装

      abort, exit, perror, setjmp, longjmp, strerror(_r), signal, raise

      time.h

      clock, difftime, mktime, time, asctime, ctime(_r), gmtime, localtime(_r), strftime

      • time_t は 64 bit です。

      • clock はダミー実装です。初回の呼び出しは必ず 0 になり、2 回目以降は 10msec 精度カウンタの前回呼び出し時との差分を返します。

      • time_t はうるう秒未考慮です。

  • ロケールは "C" のみサポート

    • setlocale() は常に "C" を返し、一切 current locale を変更しません。

    • *_l (locale) 関数は、対応する *_l の無い関数と同じ挙動となります。

  • OS の機能を使用するような関数は、VLINK 有効時のみサポート

    • signal.h はダミー関数です。

      signal, raise

    • __SOFTFP__ 時 fenv.h feraiseexcept は例外を発生させません。

    • stdio.h の printf やファイル関係の関数、tmpnam など。

    • stdlib.h の getenv, setenv など。

      system は未サポート。

    • time.h の clock, time, utime

    • 以下の非標準関数(KMC による実装)

      rename, getcwd, getwd, open, creat, close, lseek, read, write, unlink, tell, dup, dup2, access, chdir, rmdir, findfirst, findnext, stat, fstat, lstat, mkdir, chmod, mktemp, sleep, usleep

      • stat, fstat, lstat, utime の制限

        MS-DOS Data and Time (FILETIME) を使用しているので、保証されるのは 1980/1/1-2107/12/31 の範囲です。

      • usleep の制限

        millisecond 精度です。

未サポートの機能

  • GCC の float.h の制限で FLT_ROUNDS は常に 1 (nearest) となります。fenv.h の fegetround() で現行の丸めモードを取得してください。

  • SVE 拡張

  • long double

    math.h, complex.h ヘッダの *l 関数など。

    例: long double sinl(long double x)

    nexttoward, nexttowardf, nexttowardl

  • C11

    • uchar.h

    • time.h

      struct timespec, timespec_get

    • stdio.h

      fopen mode "x"

      Remove gets

      Annex * [Optional]

    • C++11

      random ヘッダ

      random_device

    • マルチスレッド

      • C11

        stdatomic.h, thread.h ヘッダ [Optional]

      • C++11

        thread, mutex, future, condition_variable ヘッダ。

      • TLS (Thread Local Storage)

        GCC 拡張の __thread, C11 の _Thread_local, C++11 の thread_local キーワード。


exeGCC for SOLID s005 (AArch64)ライブラリ仕様

ライブラリの共通設定

全てのライブラリは以下の設定でビルドされています。 設定が異なるユーザープログラムとライブラリをリンクした際の動作は保証されません。

  • char 型は signed。(-fsigned-char)

  • C は gnu11、 C++ は gnu++14 規格。

C11/C++14 標準関数サポート

  • ライブラリとスタートアップ

    • 初期の A53 エラッタ未対応です。

      -mfix-cortex-a53-835769 と -mfix-cortex-a53-843419 オプションは付いてません。

    • LP64 ABI と unaligned data access 設定のみサポート。

    • large code model

      デフォルトの -mcmodel=small では、コードとデータを 4GB 範囲に収める必要がありますが、 large は常にフルアドレスで参照するため、無制限です。そのため若干のオーバーヘッドがあります。

  • libc と libm は NetBSD-7.0 ベース

    注釈

    非標準の関数や BSD 由来の関数は、ヘッダには存在しますが、実体が存在しない関数も多数あります。

    • KMCによる標準関数の実装

      abort, exit, perror, setjmp, longjmp, strerror(_r), signal, raise

      time.h

      clock, difftime, mktime, time, asctime, ctime(_r), gmtime, localtime(_r), strftime

      • time.h の仕様

      • time_t は 64 bit です。

      • clock はダミー実装です。初回の呼び出しは必ず 0 になり、2 回目以降は 10msec 精度カウンタの前回呼び出し時との差分を返します。

      • time_t はうるう秒未考慮です。

  • ロケールは "C" のみサポート

    • *_l (locale) 関数は、対応する *_l の無い関数と同じ挙動となります。

  • OS の機能を使用するような関数は、VLINK 有効時のみサポート

    • signal.h はダミー関数です。

      signal, raise

    • __SOFTFP__ 時 fenv.h feraiseexcept は例外を発生させません。

    • stdio.h の printf やファイル関係の関数、tmpnam など。

    • stdlib.h の getenv, setenv など。

      system は未サポート。

    • time.h の clock, time, utime

    • 以下の非標準関数(KMC による実装)

      rename, getcwd, getwd, open, creat, close, lseek, read, write, unlink, tell, dup, dup2, access, chdir, rmdir, findfirst, findnext, stat, fstat, lstat, mkdir, chmod, mktemp, sleep, usleep

      • stat, fstat, lstat, utime の制限

        MS-DOS Data and Time (FILETIME) を使用しているので、保証されるのは 1980/1/1-2107/12/31 の範囲です。

      • usleep の制限

        millisecond 精度です。

未サポートの機能

  • long double

    math.h, complex.h ヘッダの *l 関数など。

    例: long double sinl(long double x)

    nexttoward, nexttowardf, nexttowardl

  • C99

    • math.h

      fma, fmaf, fmal

  • C11

    • uchar.h

    • time.h

      struct timespec, timespec_get

    • stdio.h

      fopen mode "x"

      Remove gets

      Annex * [Optional]

    • C++11

      random ヘッダ

      random_device

    • マルチスレッド

      • C11

        stdatomic.h, thread.h ヘッダ [Optional]

      • C++11

        thread, mutex, future, condition_variable ヘッダ。

      • TLS (Thread Local Storage)

        GCC 拡張の __thread, C11 の _Thread_local, C++11 の thread_local キーワード。