mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-21 14:59:34 +00:00
Merge mainline into bidi
This commit is contained in:
commit
f651947b58
79 files changed
+4334
-3313
No files matched your search
@@ -90,8 +90,7 @@ grub_cmd_blocklist (grub_command_t cmd __attribute__ ((unused)),
|
||||
return grub_error (GRUB_ERR_BAD_DEVICE,
|
||||
"this command is available only for disk devices");
|
||||
|
||||
if (file->device->disk->partition)
|
||||
part_start = grub_partition_get_start (file->device->disk->partition);
|
||||
part_start = grub_partition_get_start (file->device->disk->partition);
|
||||
|
||||
file->read_hook = read_blocklist;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#include <grub/symbol.h>
|
||||
|
||||
#define INT13H_OFFSET(x) ((x) - EXT_C(grub_drivemap_handler))
|
||||
#define INT13H_OFFSET(x) ((x) - LOCAL (base))
|
||||
|
||||
.code16
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
/* The replacement int13 handler. Preserve all registers. */
|
||||
FUNCTION(grub_drivemap_handler)
|
||||
LOCAL (base):
|
||||
/* Save %dx for future restore. */
|
||||
push %dx
|
||||
/* Push flags. Used to simulate interrupt with original flags. */
|
||||
@@ -35,12 +36,7 @@ FUNCTION(grub_drivemap_handler)
|
||||
/* Map the drive number (always in DL). */
|
||||
push %ax
|
||||
push %bx
|
||||
#ifdef APPLE_CC
|
||||
grub_drivemap_mapstart_ofs = INT13H_OFFSET(EXT_C(grub_drivemap_mapstart))
|
||||
movw $grub_drivemap_mapstart_ofs, %bx
|
||||
#else
|
||||
movw $INT13H_OFFSET(EXT_C(grub_drivemap_mapstart)), %bx
|
||||
#endif
|
||||
movw $INT13H_OFFSET(LOCAL (mapstart)), %bx
|
||||
|
||||
more_remaining:
|
||||
movw %cs:(%bx), %ax
|
||||
@@ -66,12 +62,7 @@ not_found:
|
||||
popf
|
||||
pushf
|
||||
|
||||
#ifdef APPLE_CC
|
||||
grub_drivemap_oldhandler_ofs = INT13H_OFFSET (EXT_C (grub_drivemap_oldhandler))
|
||||
lcall *%cs:grub_drivemap_oldhandler_ofs
|
||||
#else
|
||||
lcall *%cs:INT13H_OFFSET (EXT_C (grub_drivemap_oldhandler))
|
||||
#endif
|
||||
lcall *%cs:INT13H_OFFSET (LOCAL (oldhandler))
|
||||
|
||||
push %bp
|
||||
mov %sp, %bp
|
||||
@@ -94,11 +85,7 @@ norestore:
|
||||
popf
|
||||
pushf
|
||||
|
||||
#ifdef APPLE_CC
|
||||
lcall *%cs:grub_drivemap_oldhandler_ofs
|
||||
#else
|
||||
lcall *%cs:INT13H_OFFSET (EXT_C (grub_drivemap_oldhandler))
|
||||
#endif
|
||||
lcall *%cs:INT13H_OFFSET (LOCAL (oldhandler))
|
||||
|
||||
push %bp
|
||||
mov %sp, %bp
|
||||
@@ -111,9 +98,13 @@ norestore:
|
||||
/* Far pointer to the old handler. Stored as a CS:IP in the style of real-mode
|
||||
IVT entries (thus PI:SC in mem). */
|
||||
VARIABLE(grub_drivemap_oldhandler)
|
||||
LOCAL (oldhandler):
|
||||
.word 0x0, 0x0
|
||||
|
||||
/* This label MUST be at the end of the copied block, since the installer code
|
||||
reserves additional space for mappings at runtime and copies them over it. */
|
||||
.align 2
|
||||
.align 2
|
||||
|
||||
VARIABLE(grub_drivemap_mapstart)
|
||||
LOCAL (mapstart):
|
||||
.byte 0
|
||||
+3
-8
@@ -235,10 +235,8 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
||||
/* One more sanity check. Re-read all sectors by blocklists, and compare
|
||||
those with the data read via a file. */
|
||||
disk = file->device->disk;
|
||||
if (disk->partition)
|
||||
part_start = grub_partition_get_start (disk->partition);
|
||||
else
|
||||
part_start = 0;
|
||||
|
||||
part_start = grub_partition_get_start (disk->partition);
|
||||
|
||||
buf = grub_envblk_buffer (envblk);
|
||||
for (p = blocklists, index = 0; p; index += p->length, p = p->next)
|
||||
@@ -268,10 +266,7 @@ write_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
||||
|
||||
buf = grub_envblk_buffer (envblk);
|
||||
disk = file->device->disk;
|
||||
if (disk->partition)
|
||||
part_start = grub_partition_get_start (disk->partition);
|
||||
else
|
||||
part_start = 0;
|
||||
part_start = grub_partition_get_start (disk->partition);
|
||||
|
||||
index = 0;
|
||||
for (p = blocklists; p; index += p->length, p = p->next)
|
||||
|
||||
Reference in new issue
Block a user