Support v2 xnu boot arguments.
* grub-core/loader/i386/xnu.c (grub_cpu_xnu_fill_devicetree): New argument fsbfreq_out. (grub_xnu_set_video): Receive an argument grub_xnu_boot_params_common. (grub_xnu_boot): Support v2 arguments. Disable PIC so that APIC can be used. * grub-core/loader/machoXX.c (grub_macho_load): New argument darwin_version. * grub-core/loader/xnu.c (grub_xnu_darwin_version): New variable. * include/grub/i386/xnu.h (grub_xnu_boot_params_common): New struct. (grub_xnu_boot_params): Rename to ... (grub_xnu_boot_params_v1): ...this. Use grub_xnu_boot_params_common. (grub_xnu_boot_params_v2): New struct.
This commit is contained in:
parent
dc693fe67c
commit
83ddae2333
7 changed files with 154 additions and 52 deletions
|
@ -164,7 +164,7 @@ SUFFIX (grub_macho_size) (grub_macho_t macho, grub_macho_addr_t *segments_start,
|
|||
/* Load every loadable segment into memory specified by `_load_hook'. */
|
||||
grub_err_t
|
||||
SUFFIX (grub_macho_load) (grub_macho_t macho, const char *filename,
|
||||
char *offset, int flags)
|
||||
char *offset, int flags, int *darwin_version)
|
||||
{
|
||||
auto int NESTED_FUNC_ATTR do_load(grub_macho_t _macho,
|
||||
struct grub_macho_cmd *hdr0,
|
||||
|
@ -201,6 +201,23 @@ SUFFIX (grub_macho_load) (grub_macho_t macho, const char *filename,
|
|||
|
||||
return 1;
|
||||
}
|
||||
if (darwin_version)
|
||||
{
|
||||
const char *ptr = offset + hdr->vmaddr;
|
||||
const char *end = ptr + min (hdr->filesize, hdr->vmsize)
|
||||
- (sizeof ("Darwin Kernel Version ") - 1);
|
||||
for (; ptr < end; ptr++)
|
||||
if (grub_memcmp (ptr, "Darwin Kernel Version ",
|
||||
sizeof ("Darwin Kernel Version ") - 1) == 0)
|
||||
{
|
||||
ptr += sizeof ("Darwin Kernel Version ") - 1;
|
||||
*darwin_version = 0;
|
||||
end += (sizeof ("Darwin Kernel Version ") - 1);
|
||||
while (ptr < end && grub_isdigit (*ptr))
|
||||
*darwin_version = (*ptr++ - '0') + *darwin_version * 10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hdr->filesize < hdr->vmsize)
|
||||
|
@ -209,6 +226,9 @@ SUFFIX (grub_macho_load) (grub_macho_t macho, const char *filename,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (darwin_version)
|
||||
*darwin_version = 0;
|
||||
|
||||
grub_macho_cmds_iterate (macho, do_load, 0);
|
||||
|
||||
return grub_errno;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue