diff --git a/ChangeLog b/ChangeLog index 502e25799..62df432ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,40 @@ +1999-09-23 OKUJI Yoshinori + + * stage2/builtins.c (debug_fs_print_func): Renamed to ... + (disk_read_print_func): ... this. + (fstest_func): Use DISK_READ_HOOK instead of DEBUG_FS. + (install_func): Rename debug_fs_savesect_func to + disk_read_savesect_func. + Rename debug_fs_blocklist_func to disk_read_blocklist_func. + Use DISK_READ_HOOK instead of DEBUG_FS. + (testload_func): Use DISK_READ_HOOK instead of DEBUG_FS. + * stage2/disk_io.c [!STAGE1_5] (debug_fs): Renamed to ... + [!STAGE1_5] (disk_read_hook): ... this. + [!STAGE1_5] (debug_fs_func): Renamed to ... + [!STAGE1_5] (disk_read_func): ... this. + (rawread) [!STAGE1_5]: Use DISK_READ_HOOK and DISK_READ_FUNC + instead of DEBUG_FS and DEBUG_FS_FUNC. + (grub_read) [!STAGE1_5]: Likewise. + (devread) [!STAGE1_5]: Use DISK_READ_HOOK instead of DEBUG_FS. + * stage2/fsys_ext2fs.c (ext2fs_read) [!STAGE1_5]: Use + DISK_READ_HOOK and DISK_READ_FUNC instead of DEBUG_FS and + DEBUG_FS_FUNC. + * stage2/fsys_ffs.c (ffs_read) [!STAGE1_5]: Likewise. + * stage2/fsys_minix.c (minix_read) [!STAGE1_5]: Likewise. + * stage2/shared.h [!STAGE1_5] (debug_fs): Renamed to ... + [!STAGE1_5] (disk_read_hook): ... this. + [!STAGE1_5] (debug_fs_func): Renamed to ... + [!STAGE1_5] (disk_read_func): ... this. + * docs/grub.texi: Likewise, replace debug_fs and debug_fs_func + with disk_read_hook and disk_read_func, respectively. + +1999-09-23 Pavel Roskin + + * stage2/builtins.c (install_func): New local function, + debug_fs_savesect_func. Use debug_fs_savesect_func to determine + the first sector of Stage2. Write Stage 1 after patching Stage + 2. + 1999-09-22 OKUJI Yoshinori * acinclude.m4 (grub_ASM_USCORE): Do not define HAVE_ASM_USCORE @@ -25,7 +62,7 @@ 1999-09-20 Edward Killips - * stage2/disk_io.c (set_partition_hidden_flag): Set/cleat the + * stage2/disk_io.c (set_partition_hidden_flag): Set/clear the hidden flag, whether the hidden flag is set or not. 1999-09-21 OKUJI Yoshinori diff --git a/docs/grub.texi b/docs/grub.texi index 8a9faec85..6e574669a 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -2859,9 +2859,9 @@ it being the same for later calls into the back-end code! @item filemax Should be the length of the file. -@item debug_fs_func -Should be set to the value of @samp{debug_fs} @emph{only} during reading -of data for the file, not any other fs data, inodes, FAT tables, +@item disk_read_func +Should be set to the value of @samp{disk_read_hook} @emph{only} during +reading of data for the file, not any other fs data, inodes, FAT tables, whatever, then set to @code{NULL} at all other times (it will be @code{NULL} by default). If this isn't done corrently, then the @command{testload} and @command{install} commands won't work diff --git a/stage2/builtins.c b/stage2/builtins.c index 3b040f492..39498b7ba 100644 --- a/stage2/builtins.c +++ b/stage2/builtins.c @@ -70,7 +70,7 @@ init_config (void) /* Print which sector is read when loading a file. */ static void -debug_fs_print_func (int sector) +disk_read_print_func (int sector) { grub_printf ("[%d]", sector); } @@ -411,14 +411,14 @@ static struct builtin builtin_fallback = static int fstest_func (char *arg, int flags) { - if (debug_fs) + if (disk_read_hook) { - debug_fs = NULL; + disk_read_hook = NULL; printf (" Filesystem tracing is now off\n"); } else { - debug_fs = debug_fs_print_func; + disk_read_hook = disk_read_print_func; printf (" Filesystem tracing is now on\n"); } @@ -727,11 +727,20 @@ install_func (char *arg, int flags) int write_stage2_sect = 0; int stage2_sect; char *ptr; - int installaddr, installlist, installsect; + int installaddr, installlist; + /* Save the first sector of Stage2 in STAGE2_SECT. */ + static void disk_read_savesect_func (int sector) + { + if (debug) + printf ("[%d]", sector); + + stage2_sect = sector; + } + /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */ - static void debug_fs_blocklist_func (int sector) + static void disk_read_blocklist_func (int sector) { if (debug) printf("[%d]", sector); @@ -752,7 +761,6 @@ install_func (char *arg, int flags) } *((unsigned short *) installlist) += 1; - installsect = sector; installaddr += 512; } @@ -895,8 +903,12 @@ install_func (char *arg, int flags) installlist = BOOTSEC_LOCATION + STAGE1_FIRSTLIST + 4; /* Read the first sector of Stage 2. */ + disk_read_hook = disk_read_savesect_func; if (! grub_read ((char *) SCRATCHADDR, SECTOR_SIZE) == SECTOR_SIZE) - return 1; + { + disk_read_hook = 0; + return 1; + } /* Check for the version of Stage 2. */ if (*((short *) (SCRATCHADDR + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION) @@ -921,8 +933,6 @@ install_func (char *arg, int flags) *((unsigned short *) (BOOTSEC_LOCATION + STAGE1_INSTALLADDR)) = installaddr; - stage2_sect = installsect; - if (*ptr == 'p') { write_stage2_sect = 1; @@ -945,30 +955,35 @@ install_func (char *arg, int flags) /* Read the whole of Stage 2. */ filepos = 0; - debug_fs = debug_fs_blocklist_func; + disk_read_hook = disk_read_blocklist_func; if (! grub_read ((char *) RAW_ADDR (0x100000), -1)) { - debug_fs = 0; + disk_read_hook = 0; return 1; } /* Clear the cache. */ buf_track = -1; - if (biosdisk (BIOSDISK_WRITE, - dest_drive, &dest_geom, - dest_sector, 1, (BOOTSEC_LOCATION >> 4)) - || (write_stage2_sect - && biosdisk (BIOSDISK_WRITE, - current_drive, &buf_geom, - stage2_sect, 1, SCRATCHSEG))) + /* Write the modified first sector of Stage2 to the disk. */ + if (write_stage2_sect + && biosdisk (BIOSDISK_WRITE, current_drive, &buf_geom, + stage2_sect, 1, SCRATCHSEG)) { errnum = ERR_WRITE; - debug_fs = 0; + disk_read_hook = 0; + return 1; + } + + if (biosdisk (BIOSDISK_WRITE, dest_drive, &dest_geom, + dest_sector, 1, (BOOTSEC_LOCATION >> 4))) + { + errnum = ERR_WRITE; + disk_read_hook = 0; return 1; } - debug_fs = 0; + disk_read_hook = 0; #ifndef NO_DECOMPRESSION no_decompression = 0; @@ -1320,7 +1335,7 @@ testload_func (char *arg, int flags) if (! grub_open (arg)) return 1; - debug_fs = debug_fs_print_func; + disk_read_hook = disk_read_print_func; /* Perform filesystem test on the specified file. */ /* Read whole file first. */ @@ -1376,7 +1391,7 @@ testload_func (char *arg, int flags) break; grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos); - debug_fs = 0; + disk_read_hook = 0; return 0; } diff --git a/stage2/disk_io.c b/stage2/disk_io.c index fa7d6dee3..09d15a2f0 100644 --- a/stage2/disk_io.c +++ b/stage2/disk_io.c @@ -26,8 +26,8 @@ #ifndef STAGE1_5 /* instrumentation variables */ -void (*debug_fs) (int) = NULL; -void (*debug_fs_func) (int) = NULL; +void (*disk_read_hook) (int) = NULL; +void (*disk_read_func) (int) = NULL; int print_possibilities; @@ -176,13 +176,13 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) /* * Instrumentation to tell which sectors were read and used. */ - if (debug_fs && debug_fs_func) + if (disk_read_hook && disk_read_func) { int sector_end = sector + ((num_sect < slen) ? num_sect : slen); int sector_num = sector; while (sector_num < sector_end) - (*debug_fs_func) (sector_num++); + (*disk_read_func) (sector_num++); } #endif /* STAGE1_5 */ @@ -225,7 +225,7 @@ devread (int sector, int byte_offset, int byte_len, char *buf) } #if !defined(STAGE1_5) - if (debug_fs && debug) + if (disk_read_hook && debug) printf ("<%d, %d, %d>", sector, byte_offset, byte_len); #endif /* !STAGE1_5 */ @@ -1360,7 +1360,7 @@ grub_read (char *buf, int len) size = len; #ifndef STAGE1_5 - debug_fs_func = debug_fs; + disk_read_func = disk_read_hook; #endif /* STAGE1_5 */ /* read current block and put it in the right place in memory */ @@ -1368,7 +1368,7 @@ grub_read (char *buf, int len) off, size, buf); #ifndef STAGE1_5 - debug_fs_func = NULL; + disk_read_func = NULL; #endif /* STAGE1_5 */ len -= size; diff --git a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c index f54de0742..35a3caa6b 100644 --- a/stage2/fsys_ext2fs.c +++ b/stage2/fsys_ext2fs.c @@ -431,14 +431,14 @@ ext2fs_read (char *buf, int len) size = len; #ifndef STAGE1_5 - debug_fs_func = debug_fs; + disk_read_func = disk_read_hook; #endif /* STAGE1_5 */ devread (map * (EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE), offset, size, buf); #ifndef STAGE1_5 - debug_fs_func = NULL; + disk_read_func = NULL; #endif /* STAGE1_5 */ buf += size; diff --git a/stage2/fsys_ffs.c b/stage2/fsys_ffs.c index af8842a01..93b581945 100644 --- a/stage2/fsys_ffs.c +++ b/stage2/fsys_ffs.c @@ -161,13 +161,13 @@ ffs_read (char *buf, int len) size = len; #ifndef STAGE1_5 - debug_fs_func = debug_fs; + disk_read_func = disk_read_hook; #endif /* STAGE1_5 */ devread (fsbtodb (SUPERBLOCK, map), off, size, buf); #ifndef STAGE1_5 - debug_fs_func = NULL; + disk_read_func = NULL; #endif /* STAGE1_5 */ buf += size; diff --git a/stage2/fsys_minix.c b/stage2/fsys_minix.c index 5a0646fb7..aca47c769 100644 --- a/stage2/fsys_minix.c +++ b/stage2/fsys_minix.c @@ -269,14 +269,14 @@ minix_read (char *buf, int len) size = len; #ifndef STAGE1_5 - debug_fs_func = debug_fs; + disk_read_func = disk_read_hook; #endif /* STAGE1_5 */ devread (map * (BLOCK_SIZE / DEV_BSIZE), offset, size, buf); #ifndef STAGE1_5 - debug_fs_func = NULL; + disk_read_func = NULL; #endif /* STAGE1_5 */ buf += size; diff --git a/stage2/shared.h b/stage2/shared.h index 6c2969cf8..d9609b8db 100644 --- a/stage2/shared.h +++ b/stage2/shared.h @@ -401,8 +401,8 @@ extern int compressed_file; #ifndef STAGE1_5 /* instrumentation variables */ -extern void (*debug_fs) (int); -extern void (*debug_fs_func) (int); +extern void (*disk_read_hook) (int); +extern void (*disk_read_func) (int); /* The flag for debug mode. */ extern int debug; /* Color settings */