Added normal mode command `chainloader' as module chain.mod, which
depends on normal.mod and _chain.mod.
* conf/i386-pc.rmk (pkgdata_MODULES): Add `chain.mod'.
(chain_mod_SOURCES, chain_mod_CFLAGS): Variables added.
* include/grub/i386/pc/loader.h (grub_rescue_cmd_chainloader):
Deleted prototype.
* loader/i386/pc/chainloader.c (grub_rescue_cmd_chainloader): All
but arguments parsing moved to ...
(grub_chainloader_cmd): ... here. New function.
* include/grub/i386/pc/chainloader.h: New file.
* loader/i386/pc/chainloader_normal.c: Likewise.
All symbols prefixed with PUPA_ and pupa_ are renamed to GRUB_
and grub_, respectively. Because the conversion is trivial and
mechanical, I omit the details here. Please refer to the CVS
if you need more information.
* include/pupa/normal.h: New file.
* include/pupa/setjmp.h: Likewise.
* include/pupa/i386/setjmp.h: Likewise.
* normal/cmdline.c: Likewise.
* normal/command.c: Likewise.
* normal/main.c: Likewise.
* normal/menu.c: Likewise.
* normal/i386/setjmp.S: Likewise.
* loader/i386/pc/linux.c (pupa_rescue_cmd_linux): Made global.
(pupa_rescue_cmd_initrd): Likewise.
* loader/i386/pc/chainloader.c (pupa_rescue_cmd_chainloader):
Likewise.
* kern/i386/pc/startup.S (translation_table): New variable.
(translate_keycode): New function.
(pupa_console_getkey): Call translate_keycode.
* kern/rescue.c (attempt_normal_mode): New function.
(pupa_enter_rescue_mode): Attempt to execute the normal mode. If
it failed, print a message.
* kern/mm.c (pupa_real_malloc): Print more information when a
free magic is broken.
(pupa_free): If the first free header is not free actually, set
it to P.
* kern/main.c (pupa_load_normal_mode): Just load the module
"normal".
(pupa_main): Don't print the message
"Entering into rescue mode..." here.
* include/pupa/i386/pc/loader.h (pupa_rescue_cmd_initrd):
Declared.
(pupa_rescue_cmd_initrd): Likewise.
(pupa_rescue_cmd_initrd): Likewise.
* include/pupa/symbol.h (FUNCTION): Specify the type.
(VARIABLE): Likewise.
* include/pupa/err.h (pupa_err_t): Added
PUPA_ERR_UNKNOWN_COMMAND.
* include/pupa/dl.h (pupa_dl_set_prefix): Exported.
(pupa_dl_get_prefix): Likewise.
* conf/i386-pc.rmk (pkgdata_MODULES): Added normal.mod.
Added _chain.mod and _linux.mod instead of chain.mod and
linux.mod.
(chain_mod_SOURCES): Renamed to ...
(_chain_mod_SOURCES): ... this.
(chain_mod_CFLAGS): Renamed to ...
(_chain_mod_CFLAGS): ... this.
(linux_mod_SOURCES): Renamed to ...
(_linux_mod_SOURCES): ... this.
(linux_mod_CFLAGS): Renamed to ...
(_linux_mod_CFLAGS): ... this.
(normal_mod_SOURCES): New variable.
(normal_mod_CFLAGS): Likewise.
(normal_mod_ASFLAGS): Likewise.
2003-01-18 Yoshinori K. Okuji <okuji@enbug.org>
* kern/rescue.c (pupa_rescue_cmd_rmmod): Call pupa_dl_unload, if
possible.
* kern/dl.c (pupa_dl_ref): Refer dependending modules
recursively.
(pupa_dl_unref): Unrefer depending modules recursively.
Don't call pupa_dl_unload implicitly, because PUPA can crash if
a module is unloaded before one depending on that module is
unloaded.
(pupa_dl_unload): Unload depending modules explicitly,
if possible.
* include/pupa/i386/pc/linux.h: New file.
* loader/i386/pc/linux.c: Likewise.
* loader/i386/pc/chainloader.c (pupa_chainloader_boot_sector):
Removed.
(pupa_chainloader_unload): Return PUPA_ERR_NONE.
(pupa_rescue_cmd_chainloader): Read the image to 0x7C00 instead
of PUPA_CHAINLOADER_BOOT_SECTOR.
* kern/i386/pc/startup.S: Include pupa/machine/linux.h.
(pupa_linux_prot_size): New variable.
(pupa_linux_tmp_addr): Likewise.
(pupa_linux_real_addr): Likewise.
(pupa_linux_boot_zimage): New function.
(pupa_linux_boot_bzimage): Likewise.
* kern/i386/pc/init.c (struct mem_region): New structure.
(MAX_REGIONS): New macro.
(mem_regions): New variable.
(num_regions): Likewise.
(pupa_os_area_addr): Likewise.
(pupa_os_area_size): Likewise.
(pupa_lower_mem): Likewise.
(pupa_upper_mem): Likewise.
(add_mem_region): New function.
(compact_mem_regions): Likewise.
(pupa_machine_init): Set PUPA_LOWER_MEM and PUPA_UPPER_MEM to
the size of the conventional memory and that of so-called upper
memory (before the first memory hole).
Instead of adding each found region to free memory, use
add_mem_region and add them after removing overlaps.
Also, add only 1/4 of the upper memory to free memory. The rest
is used for loading OS images. Maybe this is ad hoc, but this
makes it much easier to relocate OS images when booting.
* kern/rescue.c (pupa_rescue_cmd_module): Removed.
(pupa_enter_rescue_mode): Don't register initrd and module.
* kern/mm.c: Include pupa/dl.h.
* kern/main.c: Include pupa/file.h and pupa/device.h.
* kern/loader.c (pupa_loader_load_module_func): Removed.
(pupa_loader_load_module): Likewise.
* kern/dl.c (pupa_dl_load): Use the suffix ``.mod'' instead of
``.o''.
* include/pupa/i386/pc/loader.h (pupa_linux_prot_size): Declared.
(pupa_linux_tmp_addr): Likewise.
(pupa_linux_real_addr): Likewise.
(pupa_linux_boot_zimage): Likewise.
(pupa_linux_boot_bzimage): Likewise.
* include/pupa/i386/pc/init.h (pupa_lower_mem): Declared.
(pupa_upper_mem): Likewise.
(pupa_gate_a20): Don't export, because turning off Gate A20 in a
module is too dangerous.
* include/pupa/loader.h (pupa_os_area_addr): Declared.
(pupa_os_area_size): Likewise.
(pupa_loader_set): Remove the first argument. Loader doesn't
manage modules or initrd any longer.
(pupa_loader_load_module): Removed.
* conf/i386-pc.rmk (pkgdata_MODULES): Added linux.mod.
(linux_mod_SOURCES): New variable.
(linux_mod_CFLAGS): Likewise.
* util/i386/pc/pupa-setup.c: Include pupa/machine/kernel.h.
(setup): Configure the installed partition information and the
dl prefix.
* loader/i386/pc/chainloader.c (my_mod): New variable.
(pupa_chainloader_unload): New function.
(pupa_rescue_cmd_chainloader): Refer itself.
(PUPA_MOD_INIT): Save its own module in MY_MOD.
* kern/i386/pc/startup.S (install_partition): Removed.
(version_string): Likewise.
(config_file): Likewise.
(pupa_install_dos_part): New variable.
(pupa_install_bsd_part): Likewise.
(pupa_prefix): Likewise.
(pupa_chainloader_real_boot): Call pupa_dl_unload_all.
* kern/i386/pc/init.c: Include pupa/machine/kernel.h, pupa/dl.h
and pupa/misc.h.
(make_install_device): New function.
(pupa_machine_init): Set the dl prefix.
* kern/rescue.c: Include pupa/rescue.h and pupa/dl.h.
(buf): Renamed to ...
(linebuf): ... this.
(pupa_rescue_cmd_prefix): New function.
(pupa_rescue_cmd_insmod): Likewise.
(pupa_rescue_cmd_rmmod): Likewise.
(pupa_rescue_cmd_lsmod): Likewise.
(pupa_enter_rescue_mode): Register new commands: prefix, insmod,
rmmod and lsmod.
* kern/mm.c (pupa_memalign): If failed even after invalidating
disk caches, unload unneeded modules and retry.
* kern/misc.c (pupa_memmove): New function.
(pupa_memcpy): Removed.
(pupa_strcpy): New function.
(pupa_itoa): Made static.
* kern/dl.c (pupa_dl_iterate): New function.
(pupa_dl_ref): Likewise.
(pupa_dl_unref): Likewise.
(pupa_dl_unload): Return if succeeded or not.
(pupa_dl_unload_unneeded): New function.
(pupa_dl_unload_all): Likewise.
(pupa_dl_init): Renamed to ...
(pupa_dl_set_prefix): ... this.
(pupa_dl_get_prefix): New function.
* include/pupa/i386/pc/kernel.h: Include pupa/types.h.
(PUPA_KERNEL_MACHINE_INSTALL_DOS_PART): New macro.
(PUPA_KERNEL_MACHINE_INSTALL_BSD_PART): Likewise.
(PUPA_KERNEL_MACHINE_PREFIX): Likewise.
(pupa_install_dos_part): Declared.
(pupa_install_bsd_part): Likewise.
(pupa_prefix): Likewise.
(pupa_boot_drive): Likewise.
* include/pupa/types.h: Fix a typo.
* include/pupa/misc.h (pupa_memcpy): New macro. Just an alias to
pupa_memmove.
(pupa_memmove): Declared.
(pupa_strcpy): Likewise.
* include/pupa/dl.h (PUPA_MOD_INIT): Change the prototype. Now
pupa_mod_init takes one argument, its own module.
(pupa_dl_unload_unneeded): Declared.
(pupa_dl_unload_all): Likewise.
(pupa_dl_ref): Likewise.
(pupa_dl_unref): Likewise.
(pupa_dl_iterate): Likewise.
(pupa_dl_init): Renamed to ...
(pupa_dl_set_prefix): ... this.
(pupa_dl_get_prefix): Declared.
* fs/fat.c [!PUPA_UTIL] (my_mod): New variable.
(pupa_fat_dir) [!PUPA_UTIL]: Prevent the fat module from being
unloaded.
(pupa_fat_open) [!PUPA_UTIL]: Refer itself if succeeded.
(pupa_fat_close) [!PUPA_UTIL]: Unrefer itself.
* configure.ac (tmp_CFLAGS): Added -Wshadow, -Wpointer-arith,
-Wmissing-prototypes, -Wundef and -Wstrict-prototypes.