The Android Open Source Project | a27d2ba | 2008-10-21 07:00:00 -0700 | [diff] [blame^] | 1 | Welcome to Bionic, Android small and custom C library for the Android platform |
| 2 | |
| 3 | Bionic is mainly a port of the BSD C library to our Linux kernel with the |
| 4 | following additions/changes: |
| 5 | |
| 6 | - no support for locales |
| 7 | - no support for wide chars (i.e. multi-byte characters) |
| 8 | - its own smallish implementation of pthreads based on Linux futexes |
| 9 | - support for x86, ARM and ARM thumb CPU instruction sets and kernel interfaces |
| 10 | |
| 11 | Bionic is released under the standard 3-clause BSD License |
| 12 | |
| 13 | Bionic doesn't want to implement all features of a traditional C library, we only |
| 14 | add features to it as we need them, and we try to keep things as simple and small |
| 15 | as possible. Our goal is not to support scaling to thousands of concurrent threads |
| 16 | on multi-processors machines; we're running this on cell-phones, damnit !! |
| 17 | |
| 18 | Note that Bionic doesn't provide a libthread_db or a libm implementation. |
| 19 | |
| 20 | |
| 21 | Adding new syscalls: |
| 22 | ==================== |
| 23 | |
| 24 | Bionic provides the gensyscalls.py Python script to automatically generate syscall |
| 25 | stubs from the list defined in the file SYSCALLS.TXT. You can thus add a new syscall |
| 26 | by doing the following: |
| 27 | |
| 28 | - edit SYSCALLS.TXT |
| 29 | - add a new line describing your syscall, it should look like: |
| 30 | |
| 31 | return_type syscall_name(parameters) syscall_number |
| 32 | |
| 33 | - in the event where you want to differentiate the syscall function from its entry name, |
| 34 | use the alternate: |
| 35 | |
| 36 | return_type funcname:syscall_name(parameters) syscall_number |
| 37 | |
| 38 | - additionally, if the syscall number is different between ARM and x86, use: |
| 39 | |
| 40 | return_type funcname[:syscall_name](parameters) arm_number,x86_number |
| 41 | |
| 42 | - a syscall number can be -1 to indicate that the syscall is not implemented on |
| 43 | a given platform, for example: |
| 44 | |
| 45 | void __set_tls(void*) arm_number,-1 |
| 46 | |
| 47 | |
| 48 | the comments in SYSCALLS.TXT contain more information about the line format |
| 49 | |
| 50 | You can also use the 'checksyscalls.py' script to check that all the syscall |
| 51 | numbers you entered are correct. It does so by looking at the values defined in |
| 52 | your Linux kernel headers. The script indicates where the values are incorrect |
| 53 | and what is expected instead. |