63 lines
2.4 KiB
Text
63 lines
2.4 KiB
Text
|
|
||
|
skiboot changes:
|
||
|
|
||
|
- Added malloc lock
|
||
|
- Added a few functions
|
||
|
- Malloc will always 4 byte align everything
|
||
|
- Added asserts, requires core to provide abort()
|
||
|
|
||
|
WARNINGS:
|
||
|
|
||
|
- don't use free() on the result of memalign() (should be fixable)
|
||
|
|
||
|
Previous notes:
|
||
|
|
||
|
Standard C library for the SLOF firmware project
|
||
|
================================================
|
||
|
|
||
|
To use this library, link your target against the "libc.a" archive.
|
||
|
|
||
|
However, there are some prerequisites before you can use certain parts of the
|
||
|
library:
|
||
|
|
||
|
1) If you want to use malloc() and the like, you have to supply an implemen-
|
||
|
tation of sbrk() in your own code. malloc() uses sbrk() to get new, free
|
||
|
memory regions.
|
||
|
|
||
|
Prototype: void *sbrk(int incr);
|
||
|
Description: sbrk() increments the available data space by incr bytes and
|
||
|
returns a pointer to the start of the new area.
|
||
|
|
||
|
See the man-page of sbrk for details about this function.
|
||
|
|
||
|
2) Before you can use the stdio output functions like printf(), puts() and the
|
||
|
like, you have to provide a standard write() function in your code.
|
||
|
printf() and the like use write() to print out the strings to the standard
|
||
|
output.
|
||
|
|
||
|
Prototype: ssize_t write(int fd, const void *buf, size_t cnt);
|
||
|
Description: Write cnt byte from the buffer buf to the stream associated
|
||
|
with the file descriptor fd.
|
||
|
|
||
|
The stdio functions will print their output to the stdout channel which is
|
||
|
assigned with the file descriptor 1 by default. Note that the stdio
|
||
|
functions will not use open() before calling write(), so if the stdout
|
||
|
cannel needs to be opened first, you should do that in your start-up code
|
||
|
before using the libc functions for the first time.
|
||
|
|
||
|
3) Before you can use the stdio input functions like scanf() and the
|
||
|
like, you have to provide a standard read() function in your code.
|
||
|
scanf() and the like use read() to get the characters from the standard
|
||
|
input.
|
||
|
|
||
|
Prototype: ssize_t read(int fd, void *buf, size_t cnt);
|
||
|
Description: Read cnt byte from the stream associated with the file
|
||
|
descriptor fd and put them into the buffer buf.
|
||
|
|
||
|
The stdio functions will get their input from the stdin channel which is
|
||
|
assigned with the file descriptor 0 by default. Note that the stdio
|
||
|
functions will not use open() before calling read(), so if the stdin
|
||
|
cannel needs to be opened first, you should do that in your start-up code
|
||
|
before using the libc functions for the first time.
|
||
|
|