Node:Porting to Unix, Previous:Hierarchy Conventions, Up:Porting
Most Unix systems are fundamentally very similar. There are variations between different machines, and variations in what facilities are provided by the kernel. But the interface to the operating system facilities is, for the most part, pretty uniform and simple.
The code for Unix systems is in the directory unix
, at the top
level of the sysdeps
hierarchy. This directory contains
subdirectories (and subdirectory trees) for various Unix variants.
The functions which are system calls in most Unix systems are
implemented in assembly code, which is generated automatically from
specifications in files named syscalls.list
. There are several
such files, one in sysdeps/unix
and others in its subdirectories.
Some special system calls are implemented in files that are named with a
suffix of .S
; for example, _exit.S
. Files ending in
.S
are run through the C preprocessor before being fed to the
assembler.
These files all use a set of macros that should be defined in
sysdep.h
. The sysdep.h
file in sysdeps/unix
partially defines them; a sysdep.h
file in another directory must
finish defining them for the particular machine and operating system
variant. See sysdeps/unix/sysdep.h
and the machine-specific
sysdep.h
implementations to see what these macros are and what
they should do.
The system-specific makefile for the unix
directory
(sysdeps/unix/Makefile
) gives rules to generate several files
from the Unix system you are building the library on (which is assumed
to be the target system you are building the library for). All
the generated files are put in the directory where the object files are
kept; they should not affect the source tree itself. The files
generated are ioctls.h
, errnos.h
, sys/param.h
, and
errlist.c
(for the stdio
section of the library).