| Welcome to Bionic, Android's small and custom C library for the Android |
| platform. |
| |
| Bionic is mainly a port of the BSD C library to our Linux kernel with the |
| following additions/changes: |
| |
| - no support for locales |
| - no support for wide chars (i.e. multi-byte characters) |
| - its own smallish implementation of pthreads based on Linux futexes |
| - support for x86, ARM and ARM thumb CPU instruction sets and kernel interfaces |
| |
| Bionic is released under the standard 3-clause BSD License |
| |
| Bionic doesn't want to implement all features of a traditional C library, we only |
| add features to it as we need them, and we try to keep things as simple and small |
| as possible. Our goal is not to support scaling to thousands of concurrent threads |
| on multi-processors machines; we're running this on cell-phones, damnit !! |
| |
| Note that Bionic doesn't provide a libthread_db or a libm implementation. |
| |
| |
| Adding new syscalls: |
| ==================== |
| |
| Bionic provides the gensyscalls.py Python script to automatically generate syscall |
| stubs from the list defined in the file SYSCALLS.TXT. You can thus add a new syscall |
| by doing the following: |
| |
| - edit SYSCALLS.TXT |
| - add a new line describing your syscall, it should look like: |
| |
| return_type syscall_name(parameters) syscall_number |
| |
| - in the event where you want to differentiate the syscall function from its entry name, |
| use the alternate: |
| |
| return_type funcname:syscall_name(parameters) syscall_number |
| |
| - additionally, if the syscall number is different between ARM and x86, use: |
| |
| return_type funcname[:syscall_name](parameters) arm_number,x86_number |
| |
| - a syscall number can be -1 to indicate that the syscall is not implemented on |
| a given platform, for example: |
| |
| void __set_tls(void*) arm_number,-1 |
| |
| |
| the comments in SYSCALLS.TXT contain more information about the line format |
| |
| You can also use the 'checksyscalls.py' script to check that all the syscall |
| numbers you entered are correct. It does so by looking at the values defined in |
| your Linux kernel headers. The script indicates where the values are incorrect |
| and what is expected instead. |