ack/lang/cem/libcc.ansi/core/README.md
David Given d1cdb07719 Realise that the libc core can safely call other libc core functions, even if
they're not defined in the core: so putw() can call stdio stuff, for example.
So the earlier concept of pureness isn't necessary. Rename accordingly.
2018-06-21 23:24:23 +02:00

765 B

This directory contains the libc core: functions here may depend on other libc functions only (so, no unistd.h stuff). Plats don't get to configure this, so nothing here should add any overhead if the function isn't linked.

Examples of what goes here:

  • strcmp() --- because it's pure code.
  • setjmp() --- in EM, it's portable.
  • assert() --- because it only calls other core functions (fputs() and abort()).

Examples of what doesn't go here:

  • malloc() --- because it calls the unistd.h function sbrk() (and so a plat might want to swap it out).
  • stdio --- because it calls the unistd.h functions read(), write() etc.
  • signal() --- because it can't be implemented portably and needs to go in the plat.