To be able to do a hosted GCC cross-compiler/system-specific cross-compiler
===========================================================================
/* NB: functions don't *need* to be implemented, just prototyped */
sys/types.h: pid_t
errno.h: must exist
stdlib.h: abort(), atexit(), atoi(), free(), getenv(), malloc()
stdio.h: FILE, stderr, size_t, SEEK_SET, fflush(), fclose(), fopen(), fread(),
         fseek(), ftell(), fwrite(), setbuf(), fprintf(), vfprintf()
string.h: size_t, memcpy(), memset(), strcpy(), strlen()
time.h: must exist
unistd.h: pid_t, fork(), execv(), execve(), execvp()

/* NB: This list is ordered. i.e. cat needs stuff from asa to work! */

For sh
======

stdio.h
*******
fgets()

stdlib.h
********
exit()
free()
calloc()

unistd.h
********
chdir()
fork()
execvp()
getcwd()

sys/wait.h
**********
waitpid()

signal.h
********
signal()
SIG_DFL
SIG_IGN

For asa
=======

stdio.h
*******
fprintf()
fgetc()
fopen()
fclose()

For cal
=======

stdio.h
*******
fileno()

unistd.h
********
isatty()

For cat
=======

unistd.h
********
write()

For cksum
=========

stdio.h
*******
fseek()
SEEK_SET

For expand
==========

stdlib.h
********
malloc() (if not already implemented for calloc)

For link
========

unistd.h
********
link()

For ln
======

unistd.h
********
access()
unlink()
symlink()

fcntl.h
*******
AT_SYMLINK_FOLLOW
linkat()
AT_FDCWD

sys/stat.h
**********
struct stat
lstat()
S_ISLNK

string.h
********
strcpy()

For pwd
=======

stdlib.h
********
getenv();

For tty
=======

unistd.h
********
ttyname()