forked from OSchip/llvm-project
173 lines
4.3 KiB
ReStructuredText
173 lines
4.3 KiB
ReStructuredText
=============================
|
|
String Functions in LLVM-libc
|
|
=============================
|
|
|
|
-------
|
|
Summary
|
|
-------
|
|
|
|
This site tracks the status of the implementation of string functions in LLVM
|
|
Libc. This includes a few extra functions that are not in string.h, such as
|
|
functions converting strings to numbers.
|
|
|
|
---------------
|
|
Source location
|
|
---------------
|
|
|
|
- The main source for string functions is located at:
|
|
``libc/src/string``.
|
|
|
|
- The source for string conversion functions is located at:
|
|
``libc/src/stdlib`` and
|
|
``libc/src/__support``.
|
|
|
|
- The tests are located at:
|
|
``libc/test/src/string``,
|
|
``libc/test/src/stdlib``, and
|
|
``libc/test/src/__support``
|
|
respectively.
|
|
|
|
---------------------
|
|
Implementation Status
|
|
---------------------
|
|
|
|
Primary memory functions
|
|
========================
|
|
|
|
.. TODO(gchatelet): add details about the memory functions.
|
|
|
|
|
|
============= =========
|
|
Function Name Available
|
|
============= =========
|
|
bzero YES
|
|
bcmp YES
|
|
memcpy YES
|
|
memset YES
|
|
memcmp YES
|
|
memmove YES
|
|
============= =========
|
|
|
|
|
|
Other Raw Memory Functions
|
|
==========================
|
|
|
|
============= =========
|
|
Function Name Available
|
|
============= =========
|
|
memchr YES
|
|
memrchr YES
|
|
memccpy YES
|
|
mempcpy YES
|
|
============= =========
|
|
|
|
String Memory Functions
|
|
=======================
|
|
|
|
============= =========
|
|
Function Name Available
|
|
============= =========
|
|
stpcpy YES
|
|
stpncpy YES
|
|
strcpy YES
|
|
strncpy YES
|
|
strcat YES
|
|
strncat YES
|
|
strdup YES
|
|
strndup YES
|
|
============= =========
|
|
|
|
String Examination Functions
|
|
============================
|
|
|
|
============= =========
|
|
Function Name Available
|
|
============= =========
|
|
strlen YES
|
|
strnlen YES
|
|
strcmp YES
|
|
strncmp YES
|
|
strchr YES
|
|
strrchr YES
|
|
strspn YES
|
|
strcspn YES
|
|
strpbrk YES
|
|
strstr YES
|
|
strtok YES
|
|
strtok_r YES
|
|
============= =========
|
|
|
|
String Conversion Functions
|
|
============================
|
|
|
|
These functions are not in strings.h, but are still primarily string
|
|
functions, and are therefore tracked along with the rest of the string
|
|
functions.
|
|
|
|
The String to float functions were implemented using the Eisel-Lemire algorithm
|
|
(read more about the algorithm here: `The Eisel-Lemire ParseNumberF64 Algorithm
|
|
<https://nigeltao.github.io/blog/2020/eisel-lemire.html>`_). This improved
|
|
the performance of string to float and double, and allowed it to complete this
|
|
comprehensive test 15% faster than glibc: `Parse Number FXX Test Data
|
|
<https://github.com/nigeltao/parse-number-fxx-test-data>`_. The test was done
|
|
with LLVM-libc built on 2022-04-14 and Debian GLibc version 2.33-6. The targets
|
|
``libc_str_to_float_comparison_test`` and
|
|
``libc_system_str_to_float_comparison_test`` were built and run on the test data
|
|
10 times each, skipping the first run since it was an outlier.
|
|
|
|
|
|
============= =========
|
|
Function Name Available
|
|
============= =========
|
|
atof YES
|
|
atoi YES
|
|
atol YES
|
|
atoll YES
|
|
strtol YES
|
|
strtoll YES
|
|
strtoul YES
|
|
strtoull YES
|
|
strtof YES
|
|
strtod YES
|
|
strtold YES
|
|
strtoimax YES
|
|
strtoumax YES
|
|
============= =========
|
|
|
|
String Error Functions
|
|
======================
|
|
|
|
============= =========
|
|
Function Name Available
|
|
============= =========
|
|
strerror
|
|
strerror_s
|
|
strerrorlen_s
|
|
============= =========
|
|
|
|
Localized String Functions
|
|
==========================
|
|
|
|
These functions require locale.h, and will be added when locale support is
|
|
implemented in LLVM-libc.
|
|
|
|
============= =========
|
|
Function Name Available
|
|
============= =========
|
|
strcoll
|
|
strxfrm
|
|
============= =========
|
|
|
|
---------------------------
|
|
\<name\>_s String Functions
|
|
---------------------------
|
|
|
|
Many String functions have an equivalent _s version, which is intended to be
|
|
more secure and safe than the previous standard. These functions add runtime
|
|
error detection and overflow protection. While they can be seen as an
|
|
improvement, adoption remains relatively low among users. In addition, they are
|
|
being considered for removal, see
|
|
`Field Experience With Annex K — Bounds Checking Interfaces
|
|
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm>`_. For these reasons,
|
|
there is no ongoing work to implement them.
|