ライブラリの仕様(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(), strerror_r(), signal(), raise()

      time.h

      clock(), difftime(), mktime(), time(), asctime(), ctime(), ctime_r(), gmtime(), localtime(), 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.hprintf() やファイル関係の関数、tmpnam() など。

    • stdlib.hgetenv(), setenv() など。

      system() は未サポート。

    • time.hclock(), 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.hfegetround() で現行の丸めモードを取得してください。

  • 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(), strerror_r(), signal(), raise()

      time.h

      clock(), difftime(), mktime(), time(), asctime(), ctime(), ctime_r(), gmtime(), localtime(), 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.hprintf() やファイル関係の関数、tmpnam() など。

    • stdlib.hgetenv(), setenv() など。

      system() は未サポート。

    • time.hclock(), 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 キーワード。