GNU C Library

Скриншот программы:
GNU C Library
Детали программы:
Версия: 2.28 обновление
Дата загрузки: 16 Aug 18
Разработчик: Roland McGrath
Тип распространения: Бесплатная
Популярность: 16

Rating: 3.0/5 (Total Votes: 2)

Библиотека GNU C - это бесплатное и мощное библиотечное программное обеспечение с открытым исходным кодом для любого дистрибутива GNU / Linux. Он также известен как Glibc и требуется какой-либо UNIX-подобной компьютерной операционной системой. Библиотека GNU C отвечает за определение системных вызовов, а также различных других базовых функций, таких как malloc, open, exit, printf и т. Д.


Используется по умолчанию во всех операционных системах на базе ядра Linux

Библиотека GNU C установлена ​​и используется по умолчанию во всей операционной системе Linux на базе ядра, разработанной с нуля, чтобы выступать в качестве основной библиотеки C в системах GNU и любой другой операционной системы, работающей от ядра Linux.


Предназначен для переноски

Glibc - это высокопроизводительная библиотека C, полностью написанная на языке программирования C. Он предназначен для переносимости, интернационализации и проектирования для поддержки всех соответствующих стандартов, включая POSIX.1-2008 и ISO C11.


Поддерживает функции хорошо известных вариантов UNIX

В то время как библиотека GNU C имеет полностью интернационализированный интерфейс, она пытается поддерживать функции известных UNIX-вариантов, таких как BSD и System V, благодаря встроенным режимам совместимости.

Начало работы с библиотекой GNU C

Хотя библиотека GNU C по умолчанию установлена ​​практически во всех операционных системах GNU / Linux, вы также можете ее переустановить самостоятельно, используя исходный пакет, распространяемый на своем веб-сайте или в Softoware, бесплатно. Для начала загрузите и сохраните архив в своем домашнем каталоге.

Распакуйте архив с помощью утилиты диспетчера архива, откройте окно терминала, перейдите в место, где были извлечены архивные файлы, запустите & lsquo; ./ configure & rsquo; для настройки программы (см. команду & lsquo; ./ configure --help & rsquo; для различных опций оптимизации).

Затем запустите & lsquo; make & rsquo; команду для компиляции библиотеки, которая может быть установлена ​​в системном масштабе, запустив любую из «& lsquo; make install & rsquo; или «sudo make install & rsquo; команд, в зависимости от вашего корня или привилегированного пользователя.

Что нового в этой версии:

  • https://sourceware.org/ml/libc-announce/2018/msg00000.html

Что нового в версии 2.27:

  • https://sourceware.org/ml/libc-announce/2018/msg00000.html

Что нового в версии:

  • Минимальная версия ядра Linux, с которой можно использовать эту версию библиотеки GNU C, составляет 3,2, за исключением i [4567] 86 и x86_64, где хватает ядра Linux версии 2.6.32 или новее (на архитектурах, которым уже требуется ядро версии более поздние, чем 3.2, эти требования остаются без изменений). Linux 3.2 или более поздние заголовки ядра необходимы для всех архитектур.
  • Язык pap_AN удален. Это устарело долгое время. Он был заменен на pap_AW & amp; pap_CW, оба из которых уже давно включены в предыдущие выпуски.
  • Функции readdir_r и readdir64_r устарели. Вместо этого рекомендуется использовать readdir и readdir64.
  • Тип "union wait" был удален. Это было устарело в начале 1990-х годов и никогда не было частью POSIX. Код приложения должен использовать тип int вместо «ожидания соединения».
  • Новое приложение NSS добавляется для облегчения администрирования больших распределенных систем. Действие MERGE позволяет объединить удаленные пользовательские хранилища, такие как LDAP, в локальные магазины пользователей, такие как / etc / groups, для обеспечения простых в использовании, обновленных и управляемых наборов объединенных учетных данных. Новое действие можно использовать, настроив его в файле /etc/nsswitch.conf: group: files [SUCCESS = merge] nis Реализовано Стивеном Галлахером (Red Hat).
  • Устаревшая переменная __malloc_initialize_hook была удалена из API.
  • Удалена длинная неиспользуемая опция localedef -old-style. За 16 лет он ничего не сделал. Сценарии, использующие этот параметр, могут безопасно отказаться от него.
  • nextupl, nextup, nextupf, nextdownl, nextdown и nextdownf добавляются в libm. Они определены в TS 18661 и IEEE754-2008. Следующие функции возвращают следующее представимое значение в направлении положительной бесконечности, а функции nextdown возвращают следующее представимое значение в направлении отрицательной бесконечности. В настоящее время они включены как расширения GNU.
  • Изменения, связанные с безопасностью:
  • Исправлена ​​ненужная копия стека в _nss_dns_getnetbyname_r. Это может привести к переполнению стека при вызове getnetbyname с слишком длинным именем. (CVE-2016-3075)
  • Ранее getaddrinfo копировал большие объемы адресных данных в стек, даже после того, как исправление для CVE-2013-4458 было применено, что потенциально может привести к переполнению стека. getaddrinfo теперь использует распределение кучи вместо этого. Сообщается Майклом Петланом. (CVE-2016-3706)
  • Функция glob пострадали от переполнения буфера на основе стека, когда он был вызван с флагом GLOB_ALTDIRFUNC и столкнулся с длинным именем файла. Об этом сообщил Александр Черепанов. (CVE-2016-1234)
  • Клиент RPC Sun RPC может исчерпывать все доступное пространство стека при наводнении обработанными сообщениями ICMP и UDP. Сообщается Плагином Алжи Эрнандеса для GCC. (CVE-2016-4429)
  • Код управления сервером имен IPv6 в libresolv может привести к утечке памяти для каждого создаваемого потока, выполняет поиск неудачных имен и завершает работу. Со временем это может привести к отказу в обслуживании из-за исчерпания памяти. Сообщается Маттиасом Шиффером. (CVE-2016-5417)
  • В этой версии разрешены следующие ошибки:
  • <>[1170] localedata: ne_NP: обновить файл определения языка локализации непальский [3629]: описание stpcpy в string.texi относится к MS-DOG вместо MS-DOS. [6527] malloc: [powerpc] Недостаток Malloc для PowerPC [6796] math: fdim () не устанавливает errno при переполнении [10354] libc: posix_spawn следует использовать vfork () в большем количестве случаев, чем в настоящее время [11213] localedata: localedata: добавить комментарий об авторских правах к файлам локали [12143] localedata: chr_US: new Cherokee locale [12450] localedata: sgs_LT: new locale [12676] localedata: ln_CD: new locale [13237] localedata: LC_ADDRESS.country_name: обновить все локали с последней версией CLDR data [13304] math: fma, fmaf, fmal производят неправильные результаты [14259] build: --localedir arg для configure игнорируется [14499] nptl: Does posix_spawn вызывает обработчики onfork / use vfork? [14750] libc: Условие гонки в использовании posix_spawn vfork против обработчиков сигналов [14934] localedata: es_CL: неправильный первый день недели chilean locale [15262] localedata: LC_MESSAGES.yesexpr / noexpr: непоследовательное использование romanisation [15263] localedata: LC_MESSAGES.yesexpr / noexpr: несогласованное использование 1/0 и +/- [15264] localedata: LC_MESSAGES.yesstr / nostr: отсутствует во многих локалях [15368] nptl: raise () не является безопасным для асинхронного сигнала [15479] math: ceil, floor, round и trunc raise inexact exception [15578] localedata: kk_KZ: различные обновления [16003] localdata: pap_AN: punt old locale [16137] localedata: iw_IL: punt old locale [16190] localedata: eo: new esperanto locale [16374] localedata: lv_LV: изменить символ валюты в LC_MONETARY на евро [16742] malloc: состояние гонки: pthread_atfork () вызывается перед первым malloc () приводит к неожиданному срабатыванию блокировки / взаимоблокировки [16975] localedata: LC_MESSAGES.yesexpr / noexpr: пересмотреть капитализацию во всех локалях [16983] localedata: postal_fmt не разрешает модификаторы% l и% n [17565] localedata : pt_PT: wrong (work-) week start [17899] math: [powerpc] floorl возвращает отрицательный ноль с FE_DOWNWARD [17950] build: сбой сборки с -msse [18205] localedata: be_BY *: wrong first_weekday и first_workday [18433] libc : posix_spawn не возвращается правильно после отказа выполнить [18453] localedata: charmaps / IBM875: неправильные коды [18712] строка: bits / string2.h несовместимо с -O2 -Werror = упакованными -Wsystem-заголовками [18896] localedata: he_IL: улучшения для валюты [18911] localedata: ro_RO: Исправление имени дня недели для «вторника» в данных румынского языка [18960] locale: s390: _nl_locale_subfreeres использует larl opcode на несогласованном символе [19056] libc: Deprecate readdir_r [19133] localedata: pt_ *: days & amp; месяцы должны быть строчными в португальском языке [19198] localedata: nl_NL: небольшие улучшения для голландских локальных сетей [19257]: утечка памяти в потоке в __res_vinit с серверами имен IPv6 (CVE-2016-5417) [19269] build: tst-audit4 и tst-audit10 с ошибкой gcc-6 на машине non avx [19400] locale: Отсутствует язык в «iso-639.def», тривиальное исправление в описании [19431] malloc: Тупик между fflush, getdelim и fork [19505] libc: Неверные проверки подлинности дескриптора файла в posix_spawn_file_actions_add {open, close, dup2} [19509] dynamic-link: dlsym, dlvsym не сообщают об ошибках через dlerror при использовании RTLD_NEXT [19512] locale: Stale `#ifndef HAVE_BUILTIN_EXPECT 'в` intl / {gettextP , loadinfo}.h '[19534] libc: execle, execlp может использовать malloc [19568] localedata: * _CH: швейцарские локали имеют непоследовательное начало недели [19573] сеть: res_nclose и __res_maybe_init не согласны с инициализацией сервера имен, нарушая Hesiod [19575] localedata: Status из таблиц GB18030 [19581] localedata: строка sr_ * date_fmt содержит дополнительную строку новой строки [19583]: флаг SSSE3_Fast_Copy_Backward должен быть включен для ядра ядра экскаватора AMD [19592] math: [ldbl-128ibm] недопустим в режимах округления без дефолта [19593] ] math: [ldbl-128ibm] truncl неверен в режимах округления без дефолта [19594] math: [ldbl-128ibm] roundl неверен в режимах округления без дефолта [19595] math: [ldbl-128ibm] fmodl неверен для результатов в субнормальных двойной диапазон [19602] math: [ldbl-128ibm] fmodl обработка равных аргументов с нулевой нулевой ошибкой неверна [19603] math: [ldbl-128ibm] остаток, неправильная обработка неправильного знака refquol в тестах равенства [19610] dynamic-link: ldconfig - X удаляет устаревшие символические ссылки [19613] libc: s390x (64-битное) расширение макроса WCOREDUMP и другие [19633] locale: strfmon_l применяет глобальную локаль к форматированию чисел [19642] сеть: утечка памяти в getnameinfo [19648] libc: test-skeleton.c: Не устанавливайте RLIMIT_DATA [19653] libc: Потенциал для разыменования указателя NULL (CWE-476) в glibc-2.22 [19654] math: [x86_64] Необходим тест для исправления BZ # 19590 [19671] localedata: Отсутствует проверка соответствия для malloc () в 'tst-fmon.c' & amp; 'tst-numeric.c' [19674] math: [ldbl-128ibm] powl некорректная обработка переполнения [19677] math: [ldbl-128ibm] тест остаточного равенства неверен для нулевой низкой части [19678] math: [ldbl-128ibm] nextafterl , nexttowardl неправильный знак нулевого результата [19679] dynamic-link: gcc-4.9.3 Обработка исключений C ++, из-за невыложенного стека [19726] locale: Преобразование UCS4LE в INTERNAL с помощью iconv () не обновляет указатели и длины в случае ошибки , [19727] locale: Преобразование из / в UTF-xx с помощью iconv () не всегда сообщает об ошибках в значениях суррогатов UTF-16.[19755] nscd: отказ nscd-утверждения в gc [19758] dynamic-link: Typo в EXTRA_LD_ENVVARS для x86-64 [19759] libc: mempcpy не должен быть встроен [19762] dynamic-link: HAS_CPU_FEATURE / HAS_ARCH_FEATURE просты в использовании [ 19765] libc: s390 нуждается в оптимизированной mempcpy [19779] glob: glob: переполнение буфера с GLOB_ALTDIRFUNC из-за неправильного допущения NAME_MAX (CVE-2016-1234) [19783] build: benchtests не поддерживают --enable-hardcoded-path -in-tests [19787] network: Отсутствующие и неправильные проверки на усечение в getnameinfo [19790] math: [ldbl-128ibm] nearintl неверно в режимах округления без дефолта [19791] network: Ошибка утверждения в res_query.c с un-connectable name адреса сервера [19792] libc: MIPS: backtrace дает бесконечную обратную трассировку с makecontext [19822] math: libm.поэтому установите clobbers старую версию [19825] network: resolv: send_vc может вернуть неинициализированные данные во втором ответе на сеть getaddrinfo [19830]: nss_dns: следует проверять длину RDATA на длину буфера [19831] network: nss_dns: getaddrinfo возвращает неинициализированные данные при столкновении с A / AAAA записи недопустимого размера [19837] nss: nss_db: нет повторений для некоторых длинных строк с большим буфером [19848] math: powl (10, n) для n = -4, -5, -6, -7 выключено более чем 1 ULP [19853] stdio: Печать IBM long double в десятичной форме с высокой точностью иногда некорректна [19860] build: x86_64: компилировать ошибки для tst-audit10 и tst-auditmod10b [19861] nptl: libpthread IFUNC resolver for fork может привести к сбою сети [19862]: resolv, nss_dns: удалить оставшееся ведение журнала непредвиденных типов записей [19865] сеть: сбой утверждения или утечка памяти в _nss_dns_getcanonname_r [19868] network: nss_dns: нетто-код не пропускает записи, отличные от PTR [ 19879] network: nss_dns: переполнение стека в getnetbyname implementa (CVE-2016-3075) [19881]: улучшите строку x86-64 memset [19907]: неправильные тесты memcpy [19916] dynamic-link: S390: fprs / vrs не сохраняются / не восстанавливаются при разрешении символов [19925] libc : termios.h XCASE namespace [19928] string: memmove-vec-unaligned-erms.S медленный с большим размером данных [19929] libc: limits.h Пространство имен NL_NMAX [19931] stdio: утечка памяти в vfprintf [19957] libc: clone (CLONE_VM) доступ к недопустимой родительской памяти [19963] localedata: en_IL: Новая локаль [19989] ] stdio: stdio.h cuserid namespace [19994] network: getaddrinfo не восстанавливает флаг RES_USE_INET6 в gethosts [19996] locale: langinfo.h nl_langinfo_l namespace [20005] stdio: fflush в файле, открывшемся с помощью fmemopen, сбрасывает позицию до 0 [20010] network: getaddrinfo: переполнение стека в переносе хоста (CVE-2016-3706) [20012] stdio: libio: fmemopen append mode failure [20014] stdio: stdio.h пространство имен для pre-threads POSIX [20017] network: resolv: Использовать gmtime_r вместо gmtime в p_secstodate [20023] libc: fcntl.h timespec namespace [20024] math: [x86_64] vectorized sincos разбивает стек [20031] network: nss_hesiod: Переполнение переполнения в get_txt_records [20041] time: sys / time.h timespec namespace [20043] libc: unistd.h отсутствует cuserid для UNIX98 и до [20044] libc: unistd .h отсутствует pthread_atfork для UNIX98 [20051] libc: ttyslot в неправильном заголовке в неправильных условиях [20054] libc: gethostname не объявлено для XPG4 [20055] libc: termios.h отсутствует tcgetsid для XPG4 [20072] dynamic-link: x86 init_cpu_features вызывается дважды в статическом исполняемом файле [20073] libc: sys / stat.h fchmod namespace [20074] libc: stdlib.h rand_r namespace [20076] libc: sys / stat .h отсутствует S_IFSOCK, S_ISSOCK для XPG4 [20094] libc: stdlib.h не должен объявлять grantpt, ptsname, unlockpt для XPG3 [20111] libc: struct sockaddr_storage не может быть скопировано в совокупности [20112] network: sunrpc: stack (frame) overflow в Sun RPC clntudp_call (CVE-2016-4429) [20115] string: Дополнительное выравнивание в memset-vec-unaligned-erms.S [20119] libc: Неверная маска для типов уровней процессоров из CPUID [20139] Динамическая ссылка: верхняя часть zmm обнуляется, если Glibc построен с AS, не поддерживающим AVX512 [20151] math: [ldbl-128 / ldbl-128ibm] j0l, j1l, y0l, y1l return sNaN для аргумента sNaN [20153] math: [ldbl-128ibm] sqrtl (sNaN) возвращает sNaN [20156] math: [ldbl-128ibm] ceill, rintl и т. д. return sNaN для аргумента sNaN [20157] math: [powerpc] fabsl (sNaN) ошибочно вызывает «недопустимый» [20160] math: [p owerpc] ceil, rint и т. д.return sNaN для входа sNaN [20178] libc: posix_spawn {p} не следует вызывать exit [20191] stdio: libio: vtables hardening [20195] string: обнаружение FMA4 требует выполнения CPUID с регистром eax = 0x80000001 [20198] libc: quick_exit неправильно уничтожает Объекты потока C ++ 11. [20205] math: [i386 / x86_64] nextafterl неверные приращения отрицательных субнормальных значений [20212] math: acos (sNaN) возвращает sNaN [20213] math: asin (sNaN) возвращает sNaN [20214] сеть: синхронизация заголовка Linux с linux / in6. h и ipv6.h снова.[20218] math: [i386] asinhl (sNaN) возвращает sNaN [20219] math: [i386] atanhl (sNaN) возвращает sNaN [20222] stdio: fopencookie: указатели функции привязки [20224] math: [i386] cbrtl (sNaN) возвращает sNaN [20225] math: ldexp, scalbn, scalbln return sNaN для входа sNaN [20226] math: [i386 / x86_64] expl, exp10l, expm1l return sNaN для входа sNaN [20227] math: [i386 / x86_64] logl (sNaN ) возвращает sNaN [20228] math: [i386 / x86_64] log10l (sNaN) возвращает sNaN [20229] math: [i386 / x86_64] log1pl (sNaN) возвращает sNaN [20232] math: [ldbl-128] expm1l (sNaN) возвращает sNaN [20233] math: [ldbl-128ibm] expm1l (sNaN) возвращает sNaN [20234] math: [ldbl-128ibm] log1pl (sNaN) возвращает sNaN [20235] math: [i386 / x86_64] log2l (sNaN) возвращает sNaN [ 20237] nss: nss_db: get * ent segfaults без предшествующего набора * ent [20240] math: modf (sNaN) возвращает sNaN [20248] libc: debug / tst-longjump_chk2 вызывает printf из обработчика сигнала [20250] math: frexp (sNaN ) возвращает sNaN [20252] math: atan2 (sNaN, qNaN) не может поднять «недействительный» [20255] ma th: [i386] fdim, fdimf return с избыточным диапазоном и точностью / двойным округлением [20256] math: [i386 / x86_64] fdiml возвращает sNaN для входа sNaN [20260] string: ../sysdeps/x86/bits/string.

    h: 1092: 3: ошибка: индекс массива ниже границ массива [-Werror = array-bounds] [20262] nis: _nss_nis_initgroups_dyn всегда возвращает NSS_STATUS_NOTFOUND [20263] nptl: надежные блокировки взаимного доступа, если другие запросы потока timedlock (только arm / linux) [20277] libc: $ dp корректно инициализируется в sysdeps / hppa / start.S [20284] malloc: malloc: Коррумпированное предотвращение арены вызывает ненужные резервные копии mmap [20296] math: [i386 / x86_64] scalbl возвращает sNaN для sNaN, отсутствующие «недопустимые» исключения [20314] nptl: make [4]: ​​*** [/usr/include/stdlib.h] Ошибка 1 [20316] localedata: id_ID: Februari вместо строки Pebruari [20327]: POWER8 strcasecmp возвращает неверный результат [20347] math: Failure: Test: j0_downward (0xap + 0) [20348] libc: FAIL: misc / tst-preadvwritev64 [20349] libc: 64-битное значение передается по-разному в p {readv, writev} {64} [20350] libc: нет теста для p {read, write} 64 [20357] math: неправильный результат cos для 1.5174239687223976 [20384] сборка: не запускайте тесты libmvec-sincos-avx * на не avx m achines

Что нового в версии 2.23:

  • CVE-2015-7547: glibc getaddrinfo () переполнение буфера на основе стека - Исправлено в ветке разработки для выпуска glibc 2.23.

Что нового в версии 2.21:

  • В этой версии разрешены следующие ошибки: 6652, 10672, 12674, 12847, 12926, 13862, 14132, 14138, 14171, 14498, 15215, 15378, 15884, 16009, 16418, 16191, 16469, 16576, 16617, 16618, 16619, 16657, 16740, 16857, 17192, 17266, 17273, 17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583, 17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633, 17634, 17635, 17647, 17653, 17657, 17658, 17664, 17665, 17668, 17682, 17702, 17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733, 17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782, 17791, 17793, 17796, 17797, 17801, 17803, 17806, 17834, 17844, 17848, 17868, 17869, 17870, 17885, 17892.
  • CVE-2015-1472 При определенных условиях wscanf может выделять слишком мало памяти для подлежащих проверке аргументов и переполнять выделенный буфер. Теперь реализация корректно вычисляет необходимый размер буфера при использовании malloc.
  • В общем коде C для всех машин был реализован новый алгоритм семафора. Предыдущие пользовательские сборки сборок семафора были трудно обосновать или обеспечить их безопасность. Новая версия семафора поддерживает машины с 64-битными или 32-разрядными атомными операциями. Новый алгоритм семафора используется sem_init, sem_open, sem_post, sem_wait, sem_timedwait, sem_trywait и sem_getvalue.
  • Port to Altera Nios II был внесен Mentor Graphics.
  • Оптимизированные реализации strcpy, stpcpy, strncpy, stpncpy, strcmp и strncmp для powerpc64 / powerpc64le. Реализовано Adhemerval Zanella (IBM).
  • Добавлена ​​поддержка исключения блокировки TSX мьютексов pthread на powerpc32, powerpc64 и powerpc64le. Это может улучшить масштабирование блокировки существующих программ в системах, поддерживающих HTM. Код блокировки блокировки разрешен только с помощью --enable-lock-elision = yes. Кроме того, реализация элитной реализации блокировки TSX для powerpc выдает прерывание транзакции в каждом системном вызове, чтобы избежать появления побочных эффектов вне транзакций.
  • Оптимизированные реализации strcpy, stpcpy, strchrnul и strrchr для AArch64. Внесено ARM Ltd.
  • i386 функции memcpy, оптимизированные с нестандартной загрузкой / хранением SSE2.
  • CVE-2104-7817 Функция wordexp может игнорировать флаг WRDE_NOCMD при определенных условиях ввода, что приводит к выполнению оболочки для замены команд, когда приложение не запрашивало ее. Реализация теперь проверяет WRDE_NOCMD непосредственно перед выполнением оболочки и возвращает ожидаемую ошибку WRDE_CMDSUB.
  • CVE-2012-3406 Функции printf-style могут работать в переполнении стека при обработке строк формата с большим количеством спецификаторов формата.
  • CVE-2014-9402 Реализация getnetbyname nss_dns может работать в бесконечном цикле, если в ответе DNS содержится запись PTR о неожиданном формате.
  • Минимальная версия GCC, которая может быть использована для создания этой версии библиотеки GNU C, - это GCC 4.6. Старые версии GCC и компиляторы, отличные от GNU, все еще могут использоваться для компиляции программ с использованием библиотеки GNU C.
  • Библиотека GNU C теперь построена с помощью -Werror по умолчанию. Это можно отключить, настроив с помощью --disable-werror.
  • Новые локали: tu_IN, bh_IN, raj_IN, ce_RU.
  • Устаревшая функция sigvec была удалена. Это был оригинальный интерфейс 4.2BSD, который вдохновил интерфейс Sigaction POSIX.1, которые программы используют в течение примерно 25 лет. Конечно, совместимость ABI для старых двоичных файлов с использованием sigvec остается неповрежденной.
  • Объединенный gettext 0.19.3 в подкаталог intl. Это исправляет строительство новыми версиями бизонов.
  • Поддержка расширений MIPS o32 FPXX, FP64A и FP64 ABI. В исходном MIPS o32 hard-float ABI требуется FPU, где регистры с двойной точностью накладывают два последовательных регистра с одной точностью. MIPS32R2 представил новый режим FPU (FR = 1), где регистры с двойной точностью расширяют соответствующие регистры с одной точностью, что несовместимо с ABI с жестким поплавком o32. MIPS SIMD ASE и архитектура MIPSR6 требуют использования FR = 1, что делает необходимым переход. Новые расширения o32 ABI позволяют пользователям переноситься с течением времени от исходного o32 ABI до обновленного ab32 o32 FP64. Для этого динамический компоновщик теперь отслеживает ABI любого загруженного объекта и проверяет совместимость новых объектов. Переходы режима также будут запрашиваться по мере необходимости, и неподдерживаемые объекты будут отклонены. Проверка ABI включает в себя как мягкие, так и жесткие ABI для o32, n32 и n64.

Комментарии к GNU C Library

Комментарии не найдены
добавить комментарий
Включите картинки!