Commit Graph

55 Commits

Author SHA1 Message Date
marcel
5d3af2c5ab Revamp of the syscall path, exception and context handling. The
prime objectives are:
o  Implement a syscall path based on the epc inststruction (see
   sys/ia64/ia64/syscall.s).
o  Revisit the places were we need to save and restore registers
   and define those contexts in terms of the register sets (see
   sys/ia64/include/_regset.h).

Secundairy objectives:
o  Remove the requirement to use contigmalloc for kernel stacks.
o  Better handling of the high FP registers for SMP systems.
o  Switch to the new cpu_switch() and cpu_throw() semantics.
o  Add a good unwinder to reconstruct contexts for the rare
   cases we need to (see sys/contrib/ia64/libuwx)

Many files are affected by this change. Functionally it boils
down to:
o  The EPC syscall doesn't preserve registers it does not need
   to preserve and places the arguments differently on the stack.
   This affects libc and truss.
o  The address of the kernel page directory (kptdir) had to
   be unstaticized for use by the nested TLB fault handler.
   The name has been changed to ia64_kptdir to avoid conflicts.
   The renaming affects libkvm.
o  The trapframe only contains the special registers and the
   scratch registers. For syscalls using the EPC syscall path
   no scratch registers are saved. This affects all places where
   the trapframe is accessed. Most notably the unaligned access
   handler, the signal delivery code and the debugger.
o  Context switching only partly saves the special registers
   and the preserved registers. This affects cpu_switch() and
   triggered the move to the new semantics, which additionally
   affects cpu_throw().
o  The high FP registers are either in the PCB or on some
   CPU. context switching for them is done lazily. This affects
   trap().
o  The mcontext has room for all registers, but not all of them
   have to be defined in all cases. This mostly affects signal
   delivery code now. The *context syscalls are as of yet still
   unimplemented.

Many details went into the removal of the requirement to use
contigmalloc for kernel stacks. The details are mostly CPU
specific and limited to exception_save() and exception_restore().
The few places where we create, destroy or switch stacks were
mostly simplified by not having to construct physical addresses
and additionally saving the virtual addresses for later use.

Besides more efficient context saving and restoring, which of
course yields a noticable speedup, this also fixes the dreaded
SMP bootup problem as a side-effect. The details of which are
still not fully understood.

This change includes all the necessary backward compatibility
code to have it handle older userland binaries that use the
break instruction for syscalls. Support for break-based syscalls
has been pessimized in favor of a clean implementation. Due to
the overall better performance of the kernel, this will still
be notived as an improvement if it's noticed at all.

Approved by: re@ (jhb)
2003-05-16 21:26:42 +00:00
phk
bb6f66c94d Bump the config version to force people to upgrade their config(8)
so the fix for emitting multiple instances of .o files will prevent
link errors on LINT.
2003-04-15 21:29:11 +00:00
ru
5e7c82c69f Standardize handling of locore.[sS] etc. files.
Submitted by:	jake, bde, ru
2003-02-28 21:59:14 +00:00
marcel
4e38a7aca1 Build the kernel with -mconstant-gp. This means that function calls,
with the exception of indirect function calls, are assumed to be
intra load module and thus that GP will be the same. This avoids
saving, setting and restoring GP for each function call and
reduces the kernel with ~320KB. There's obviously a performance
benefit as well.

Note that since we generally don't know if calls will be intra or
inter load module when we're compiling kernel modules, -mconstant-gp
cannot be used for modules.
2002-10-13 07:07:51 +00:00
jake
3172b6f1b7 Moved the rule for locore.o from kern.post.mk to Makefile.$ARCH. 2002-07-31 14:59:05 +00:00
bde
d738702902 Moved the setting of all profiling-related variables except the key one
(PROFLEVEL) to kern.pre.mk so that it is easier to manage.  Bumped config
version to match.

Moved the check for cputype being configured to a less bogus place in
mkmakefile.c.
2002-07-13 19:36:14 +00:00
marcel
0042ddf6d7 Remove CWARNFLAGS and add GCC3. We handle GCC3.x specific flags
centrally now that we have GCC3 in the tree. The GCC3 variable
is a helper during the switch.
2002-05-19 03:41:48 +00:00
peter
57e0a89504 Now that we can thorougly self compile the kernel, stop hard coding the
cross compiler names.
2002-04-07 04:34:21 +00:00
obrien
97d5f630ad Remove the setting of 'FMT'. We now do ELF by default, so only bother
to increase the lenght of the command line if needed.  The setting of FMT
also gets in the cross bootstrapping way for new platforms.
2002-03-24 17:45:46 +00:00
peter
dfa232c8e1 Use the FreeBSD cross tools instead of the linux ones. 2002-03-19 10:52:44 +00:00
peter
cf06489c2d Commit some infrastructure for turning on -Werror for kernel compiles.
It doesn't actually do it yet though.  This adds a flag to config so
that we can exclude certain vendor files from this even when the rest
of the kernel has it on.  make -DNO_WERROR would also bypass all of it.
2002-02-20 23:35:56 +00:00
peter
dd0f3c5ca2 Proper fix for old config setting maxusers to 8. 2001-12-14 09:39:29 +00:00
imp
75efe8b3d0 Move kern.post.mk to last line, now that it appears safe 2001-11-11 20:33:02 +00:00
imp
6242c9dd61 Factor the common parts of the Makefile.foo files. This introduces two
new files: kern.pre.mk, which contains most of the definitions, and
kern.post.mk, which contains most of the rules.

I've tested this on i386 and pc98.  I have had feedback on the sparc64
port, but no reports from anybody on alpha, ia64 or powerpc.  I
appologize in advance if I've broken you.

Reviewed by: jake, jhb, arch@
2001-11-02 21:34:20 +00:00
brian
6e6ddbcf2e Only overwrite ${DESTDIR}${KODIR}.old/${KERNEL_KO} if we haven't
booted from it when doing an installkernel.

Only change kern.bootfile from ${DESTDIR}${KODIR}/${KERNEL_KO}
to ${DESTDIR}${KODIR}.old/${KERNEL_KO}, and only when we're renaming
a booted ${DESTDIR}${KODIR}/${KERNEL_KO} kernel.
2001-11-01 02:17:49 +00:00
dfr
3b0536cd34 Use -ffreestanding instead of -fno-builtin. That's the officially blessed
way of saying that its not linking with libc.

Submitted by: peter
2001-10-30 09:37:00 +00:00
dfr
af121d89ff Adjust for building with gcc 3.0.1. 2001-10-30 09:09:13 +00:00
des
eb0ad6222d Support the "install.debug" and "reinstall.debug" targets for kernel modules.
Small tweaks to kldxref may be necessary to avoid the surprising (but harm-
less) behaviour of 'kldload foo' loading foo.ko.debug instead of foo.ko if
it is present in the kernel directory.

Approved by:	a week of silence on -arch
MFC after:	2 weeks
2001-10-27 00:52:50 +00:00
ru
6993f2ea20 Finish the asbestos suited move of $mach/conf/*.$mach to conf/*.$mach.
Fix some more typos.
2001-10-26 10:33:45 +00:00
mp
e6b6c884ab Make override of nm consistent across all platforms and sort the overrides.
Reminded by:	obrien
2001-10-19 22:19:06 +00:00
brian
ddef7c98c5 Change kern.bootfile when mv'ing the kernel
Not tested by: brian
2001-10-17 18:04:13 +00:00
dfr
251ae3c2b1 Allow C++ comments in headers - the EFI headers are full of them. 2001-09-15 12:28:02 +00:00
dfr
7b40715e82 * Enable dynamically linked kernel. This involves adding a self-relocator
to locore to process the @fptr relocations in the dynamic executable.
* Don't initialise the timer until *after* we install the timecounter to
  avoid a race between timecounter initialisation and hardclock.
* Tidy up bootinfo somewhat including adding sanity checks for when the
  kernel is loaded without a recognisable bootinfo.
2001-09-13 12:39:15 +00:00
dfr
550fb30486 Rename kernel entry point from locorestart to __start. 2001-09-10 15:34:00 +00:00
peter
e031b90e2a Enable hardwiring of things like tunables from embedded enironments
that do not start from loader(8).
2001-08-27 05:11:53 +00:00
peter
4f359512bf In order to bring about the end of the universe, delete the lines:
# DO NOT DELETE THIS LINE -- make depend uses it
2001-08-15 00:33:55 +00:00
sheldonh
09f2ade6f1 When building a debugging kernel with modules, build modules with
debugging support as well.

This relies on support added in rev 1.105 to kmod.mk.

Requested by:	peter
2001-08-02 10:56:59 +00:00
peter
2165eda637 param.c no longer gets special treatment. Use the source tree version. 2001-07-26 23:04:46 +00:00
imp
5ac44852df Bump config version. 2001-07-02 05:36:32 +00:00
imp
c5f2abfa6d Move kernel compile directory from sys/compile/FOO to
sys/compile/${MACHINE}/FOO.

Reviewed by: arch, obrien, peter and
	the USENIX terminal room secret kernel cabal
2001-06-30 06:29:47 +00:00
peter
f10fa038c1 With this commit, I hereby pronounce gensetdefs past its use-by date.
Replace the a.out emulation of 'struct linker_set' with something
a little more flexible.  <sys/linker_set.h> now provides macros for
accessing elements and completely hides the implementation.

The linker_set.h macros have been on the back burner in various
forms since 1998 and has ideas and code from Mike Smith (SET_FOREACH()),
John Polstra (ELF clue) and myself (cleaned up API and the conversion
of the rest of the kernel to use it).

The macros declare a strongly typed set.  They return elements with the
type that you declare the set with, rather than a generic void *.

For ELF, we use the magic ld symbols (__start_<setname> and
__stop_<setname>).  Thanks to Richard Henderson <rth@redhat.com> for the
trick about how to force ld to provide them for kld's.

For a.out, we use the old linker_set struct.

NOTE: the item lists are no longer null terminated.  This is why
the code impact is high in certain areas.

The runtime linker has a new method to find the linker set
boundaries depending on which backend format is in use.

linker sets are still module/kld unfriendly and should never be used
for anything that may be modular one day.

Reviewed by:	eivind
2001-06-13 10:58:39 +00:00
peter
0d48700820 Move the -I../../../include or -I/usr/include to the last entry on the
cc arguments.  Otherwise ipfilter's bogus #include lines will compile
reference /usr/include/netinet/ip_frag.h etc.
2001-06-12 06:06:18 +00:00
jlemon
1c01a56a7d Relocate IPFilter from sys/netinet to sys/contrib/ipfilter. 2001-06-07 04:06:21 +00:00
msmith
2e3b439906 New files and layout for the ACPI CA 20010518 update. 2001-05-29 20:05:35 +00:00
obrien
9ae1854b2c Add back in the bits to remove any existing "schg" flags as we have
kernel's out in wild that still have these flags set.
2001-04-29 01:53:57 +00:00
obrien
a15a0c029e Don't install KO's with the "schg" flag.
We are way too inconsistent with our setting of the "schg" flag, and in
our default install, it doesn't really offer any additional security.

Reviewed by:	arch@
2001-04-25 20:56:15 +00:00
imp
3a77c500a9 Ignore chflags errors. This makes installing to nfs mounted target
directories work.
2001-04-25 06:19:58 +00:00
imp
a24ec299ea Add support for MODULES_OVERRIDE. This is a list of modules to build
instead of all of them.  You can put this in /etc/make.conf or in
makeoptions.

Reviewed by: arch@

# docs to follow.
2001-04-02 08:52:05 +00:00
obrien
99daa32404 Restore the careful preservation of .depend (rev 1.78 of Makefile.i386)
that I removed in my last commit dealing with `make depend' bogons.
This commit has some races, but hopefully they are too short to matter.
Unfortuneatly, neither .newdep nor .olddep is removed by `make clean'.

Submitted by:	bde
2001-03-24 08:44:28 +00:00
kris
b38db8f922 Use CPUTYPE to add appropriate compiler flags to COPTFLAGS for kernel
builds.  This may be disabled using the NO_CPU_COPTFLAGS variable.

Reviewed by:	arch
2001-03-12 07:47:09 +00:00
peter
3dba1d1543 Add a 'clobber' target.. Like 'clean' but it takes out even the config
generated stuff, leaving only 'version' in the build dir.
2001-02-27 08:13:32 +00:00
obrien
8befe8802d Fix make depend' => make kernel-depend'. Using the dependancy file
when rebuilding it is just Wrong.
2001-02-12 05:55:33 +00:00
marcel
93f1d42808 Improve kernel bootstrapping:
o  Use objdump instead of gensetdefs(1) to build the linker sets.
o  Allow overriding of nm and objdump in resp. genassym.sh and
   gensetdefs.pl for non-native toolchains.

Reviewed by: arch
Perl improvements: Jos Backus <josb@cncdsl.com>, benno
2001-01-28 06:39:56 +00:00
jhb
ffbcfd67f3 Change the reinstall.debug target to depend on
{kernel,modules}-reinstall.debug rather than {kernel,modules}-reinstall.
Otherwise, the '.debug' portion of the target is lost, and you end up
reinstalling the non debug version instead of the debug version.
2001-01-19 19:43:45 +00:00
peter
18e1e35a25 Corresponding version bump for config with the DEV_FOO replacement for
the NFOO count option.
2001-01-19 12:50:16 +00:00
obrien
82a38e65b4 Back out the modules `make obj' speedup.
I cannot find a way to do this with the more esoteric source dir schemes
I thought of.
2000-12-24 13:29:58 +00:00
obrien
2d19e2b1b2 Use the canonical spelling for the path to sys. 2000-12-22 10:05:07 +00:00
obrien
37eea88efd Greatly speed up the modules `make obj' phase. 2000-12-21 20:21:24 +00:00
marcel
7955e3e2cb Sync-up so that buils actually work again. 2000-12-10 04:31:16 +00:00
peter
87f2317296 Make the xxxFILES= list generation generic. This makes it easier to add
things like MFILES= or CONFFILES= without having to modify config code.
2000-11-25 03:25:34 +00:00