Code Compaction of an Operating System Kernel
Haifeng He,
John Trimble,
Somu Perinayagam,
Saumya Debray,
Gregory Andrews
Department of Computer Science
University of Arizona
Tucson, AZ 85721, U.S.A.
Abstract
General-purpose operating systems, such as Linux, are increasingly being
used in embedded systems. Computational resources are usually limited,
and embedded processors often have a limited amount of memory.
This makes code size especially important.
This paper describes techniques for automatically reducing the
memory footprint of general-purpose operating systems on embedded
platforms. The problem is complicated by the fact that kernel code tends to
be quite different from ordinary application code,
including the presence of a significant amount of hand-written assembly
code, multiple entry points, implicit control flow paths involving interrupt
handlers, and frequent indirect control flow via function
pointers. We use a novel "approximate decompilation" technique to apply
source-level program analysis to hand-written assembly code. A prototype
implementation of our ideas on an Intel x86 platform, applied to a Linux
kernel that has been configured to exclude unnecessary code, obtains a code
size reduction of close to 24%.