Due to limitations in certain compilers in reported architecture
support the kernel needs to be compiled (to assembler) with one
architecture and assembled with another architecture.
Unfortunately when generating the kernel_final.s file the
architecture passed for compilation gets inserted as a '.arch'
directive. This directive overrides the architecture later
passed to the assembler.
This commit is an ugly work around that just strips out any
.arch directives from the assembler file
These defines were added to the Makefile so that standalone debug builds
would have printing/debug support. However, in the case of a non standalone
kernel build these are redefinitions, which is fine except for
CONFIG_USER_STACK_TRACE_LENGTH, which is possibly getting defined as
something different reuslting in a compilation warning.
This commit moves these definitions to open occur if a standalone
build is actually happening.
Originally building the kernel was largely considered to be done in
one of two ways
1. Release build with no assertions, no debug symbols and no printing.
This was generally considered to be a 'verified' build
2. Debug build with assertions, debug symbols and printing
Since then various options were added, such as the 'code injection'
option, which we wanted on builds that did not have assertions or
other options that affected performance. As such it did not depend
upon a debug build and had large warning signs saying that enabling
this in a release build would not give you a verified or trusted
kernel.
Most recently the ability to print from the kernel in release mode
was added. For the same reason that tying the ability to print with
the performance reduction of various debugging was not always desireable.
This change attempts to unify the current state and have a single top
level option to enable a 'verification friendly' build. All other
options (assertions, printing, code injection) then depend upon
this configuration not being set.
Previously the external build system was relied upon for disablingdisabling sse.
This is not desirable as it has the affect of disabling sse for the entire user
level build. Instead, since we only want to disable it for the kernel, we will
disable it here in the kernel Makefile
Prior to this commit only the removal of some files was echoed during
`make clean`. This can be quite confusing, especially when some of the hidden
removed files have the same names as the echoed ones (e.g. syscall.h). This
commit now hides nothing during removal
Configuring standalone kernel builds (such as those used by verification)
has been done in a completely different way to how the kernel is
configured for project builds. As the kernel gains additional options
it becomes difficult to maintain standalone kernel builds without
tediously exporting these additional options, such tedious work is
what autoconf.h is meant to address
The new configuration strategy requires a include/plat/PLAT/autoconf.h
file to exist for any platform that wants to hae standalone builds
performed on it. This configuration also becomes the *verified*
configuration, and makes it clear for projects to build the kernel
in the verified configuration.
IA32 is 32bit version of the x86 architecture. Whilst only IA32
is supported, much of the code is generic x86. Using a generic
x86 architecture will aid in future 64bit support
This commit involves the PAE paging itself, refactoring the
vspace code to extra what is common between PAE and 32bit paging,
as well as some renaming to not call the root paging structure
a PD
Prior to this commit there was an unfortunate disagreement between the seL4
project build system and the kernel's Makefile. V=3 was interpreted as maximum
verbosity by the project build system and minimum verbosity by the kernel's
Makefile. This commit makes V=3 the maximum verbosity for both.
JIRA: VER-159