Libpayload

From coreboot
Revision as of 07:55, 7 March 2008 by Whiterocker (talk | contribs) (Start libc coverage table)
Jump to navigation Jump to search

The wiki is being retired!

Documentation is now handled by the same processes we use for code: Add something to the Documentation/ directory in the coreboot repo, and it will be rendered to https://doc.coreboot.org/. Contributions welcome!

Overview

Currently a concept rather than shipping code, libpayload is a coreboot subproject that intends to provide a lightweight implementation of common and useful functions for coreboot payloads. The benefits of linking a coreboot payload against libpayload are:

  • payloads do not have to implement and maintain low-level code for I/O, common functions, etc,
  • payloads can be recompiled and deployed for CPU architectures supported by coreboot in the future,
  • libpayload functions tested and scrutinized outside payload development,
  • payloads themselves may be partly host-tested, e.g. against an emulation libpayload,
  • leads to the possibility of payloads using dynamic linking, reducing total payload footprint.

just give us a main() and a pocket full of dreams and we'll do the rest

Feature Wish List

  • Basics
    • coreboot services and structures (e.g. read CMOS, device tree)
    • subset of C-library functions (e.g. printf, puts, getch)
    • light ncurses from the Google Summer Of Code project
  • Fancies
    • directFB
    • TWIN

Libc Coverage

Function/Macro/Variable Status
assert.h
assert( ) (macro) no
ctype.h
int isalnum(int character) no
int isalpha(int character) no
int iscntrl(int character) no
int isdigit(int character) no
int isgraph(int character) no
int islower(int character) no
int isprint(int character) no
int ispunct(int character) no
int isspace(int character) no
int isupper(int character) no
int isxdigit(int character) no
errno.h
errno (global) no
float.h
limits.h
locale.h
char *setlocale(int category, const char *locale) no
struct lconv *localeconv(void) no
math.h
TODO
setjmp.h
TODO
signal.h
TODO
stdarg.h
TODO
stddef.h
TODO
stdio.h
TODO
stdlib.h
TODO
string.h
TODO
time.h
TODO


No Support
Partial Support
Full Support


Usage Example

hello_payload.c:

#include <stdio.h>

int main( void )
{
    printf( "Hello, world!\n" );
    return 0;
}

build:

libpayload-gcc -o hello_payload hello_payload.c