Binary release v4.20221214.0
This commit is contained in:
parent
78c7656938
commit
b428d05268
BIN
BOOTAA64.EFI
BIN
BOOTAA64.EFI
Binary file not shown.
BIN
BOOTIA32.EFI
BIN
BOOTIA32.EFI
Binary file not shown.
BIN
BOOTX64.EFI
BIN
BOOTX64.EFI
Binary file not shown.
Binary file not shown.
BIN
limine-cd.bin
BIN
limine-cd.bin
Binary file not shown.
@ -14,6 +14,8 @@
|
||||
|
||||
#include "limine-hdd.h"
|
||||
|
||||
static bool quiet = false;
|
||||
|
||||
static int set_pos(FILE *stream, uint64_t pos) {
|
||||
if (sizeof(long) >= 8) {
|
||||
return fseek(stream, (long)pos, SEEK_SET);
|
||||
@ -202,7 +204,9 @@ static bool device_init(void) {
|
||||
|
||||
block_size = guesses[i];
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Physical block size of %zu bytes.\n", block_size);
|
||||
}
|
||||
|
||||
cache_state = CACHE_CLEAN;
|
||||
cached_block = 0;
|
||||
@ -286,7 +290,9 @@ static void free_undeploy_data(void) {
|
||||
}
|
||||
|
||||
static bool store_undeploy_data(const char *filename) {
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Storing undeploy data to file: `%s`...\n", filename);
|
||||
}
|
||||
|
||||
FILE *udfile = fopen(filename, "wb");
|
||||
if (udfile == NULL) {
|
||||
@ -321,7 +327,9 @@ error:
|
||||
}
|
||||
|
||||
static bool load_undeploy_data(const char *filename) {
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Loading undeploy data from file: `%s`...\n", filename);
|
||||
}
|
||||
|
||||
FILE *udfile = fopen(filename, "rb");
|
||||
if (udfile == NULL) {
|
||||
@ -449,7 +457,9 @@ static void undeploy(void) {
|
||||
fprintf(stderr, "ERROR: Undeploy data index %zu failed to write. Undeploy may be incomplete!\n", i);
|
||||
break;
|
||||
}
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Warning: Undeploy data index %zu failed to write, retrying...\n", i);
|
||||
}
|
||||
if (!device_flush_cache()) {
|
||||
fprintf(stderr, "ERROR: Device cache flush failure. Undeploy may be incomplete!\n");
|
||||
}
|
||||
@ -463,8 +473,10 @@ static void undeploy(void) {
|
||||
fprintf(stderr, "ERROR: Device cache flush failure. Undeploy may be incomplete!\n");
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Undeploy data restored successfully. Limine undeployed!\n");
|
||||
}
|
||||
}
|
||||
|
||||
#define device_read(BUFFER, LOC, COUNT) \
|
||||
do { \
|
||||
@ -490,6 +502,8 @@ static void usage(const char *name) {
|
||||
printf(" Set the input (for --undeploy) or output file\n");
|
||||
printf(" name of the file which contains undeploy data\n");
|
||||
printf("\n");
|
||||
printf(" --quiet Do not print verbose diagnostic messages\n");
|
||||
printf("\n");
|
||||
printf(" --help | -h Display this help message\n");
|
||||
printf("\n");
|
||||
#ifdef IS_WINDOWS
|
||||
@ -519,18 +533,20 @@ int main(int argc, char *argv[]) {
|
||||
if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
|
||||
usage(argv[0]);
|
||||
return EXIT_SUCCESS;
|
||||
} else if (strcmp(argv[i], "--quiet") == 0) {
|
||||
quiet = true;
|
||||
} else if (strcmp(argv[i], "--force-mbr") == 0) {
|
||||
if (force_mbr) {
|
||||
if (force_mbr && !quiet) {
|
||||
fprintf(stderr, "Warning: --force-mbr already set.\n");
|
||||
}
|
||||
force_mbr = 1;
|
||||
} else if (strcmp(argv[i], "--undeploy") == 0) {
|
||||
if (undeploy_mode) {
|
||||
if (undeploy_mode && !quiet) {
|
||||
fprintf(stderr, "Warning: --undeploy already set.\n");
|
||||
}
|
||||
undeploy_mode = true;
|
||||
} else if (memcmp(argv[i], "--undeploy-data-file=", 21) == 0) {
|
||||
if (undeploy_file != NULL) {
|
||||
if (undeploy_file != NULL && !quiet) {
|
||||
fprintf(stderr, "Warning: --undeploy-data-file already set. Overriding...\n");
|
||||
}
|
||||
undeploy_file = argv[i] + 21;
|
||||
@ -585,10 +601,12 @@ int main(int argc, char *argv[]) {
|
||||
lb_size = lb_guesses[i];
|
||||
if (!force_mbr) {
|
||||
gpt = 1;
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Deploying to GPT. Logical block size of %" PRIu64 " bytes.\n",
|
||||
lb_guesses[i]);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Device has a valid GPT, refusing to force MBR.\n");
|
||||
fprintf(stderr, "ERROR: Device has a valid GPT, refusing to force MBR.\n");
|
||||
goto cleanup;
|
||||
}
|
||||
break;
|
||||
@ -597,14 +615,18 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
struct gpt_table_header secondary_gpt_header;
|
||||
if (gpt) {
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Secondary header at LBA 0x%" PRIx64 ".\n",
|
||||
ENDSWAP(gpt_header.alternate_lba));
|
||||
}
|
||||
device_read(&secondary_gpt_header, lb_size * ENDSWAP(gpt_header.alternate_lba),
|
||||
sizeof(struct gpt_table_header));
|
||||
if (!strncmp(secondary_gpt_header.signature, "EFI PART", 8)) {
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Secondary header valid.\n");
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Secondary header not valid, aborting.\n");
|
||||
fprintf(stderr, "ERROR: Secondary header not valid, aborting.\n");
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
@ -719,8 +741,10 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
if (mbr && !any_active) {
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "No active partition found, some systems may not boot.\n");
|
||||
fprintf(stderr, "Setting partition 1 as active to work around the issue...\n");
|
||||
}
|
||||
hint8 = 0x80;
|
||||
device_write(&hint8, 446, sizeof(uint8_t));
|
||||
}
|
||||
@ -767,14 +791,18 @@ int main(int argc, char *argv[]) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "GPT partition specified. Deploying there instead of embedding.\n");
|
||||
}
|
||||
|
||||
stage2_loc_a = ENDSWAP(gpt_entry.starting_lba) * lb_size;
|
||||
stage2_loc_b = stage2_loc_a + stage2_size_a;
|
||||
if (stage2_loc_b & (lb_size - 1))
|
||||
stage2_loc_b = (stage2_loc_b + lb_size) & ~(lb_size - 1);
|
||||
} else {
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "GPT partition NOT specified. Attempting GPT embedding.\n");
|
||||
}
|
||||
|
||||
int64_t max_partition_entry_used = -1;
|
||||
for (int64_t i = 0; i < (int64_t)ENDSWAP(gpt_header.number_of_partition_entries); i++) {
|
||||
@ -810,7 +838,9 @@ int main(int argc, char *argv[]) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "New maximum count of partition entries: %zu.\n", new_partition_entry_count);
|
||||
}
|
||||
|
||||
// Zero out unused partitions
|
||||
void *empty = calloc(1, ENDSWAP(gpt_header.size_of_partition_entry));
|
||||
@ -863,11 +893,15 @@ int main(int argc, char *argv[]) {
|
||||
sizeof(struct gpt_table_header));
|
||||
}
|
||||
} else {
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Deploying to MBR.\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Stage 2 to be located at 0x%" PRIx64 " and 0x%" PRIx64 ".\n",
|
||||
stage2_loc_a, stage2_loc_b);
|
||||
}
|
||||
|
||||
// Save original timestamp
|
||||
device_read(timestamp, 218, 6);
|
||||
@ -902,11 +936,13 @@ int main(int argc, char *argv[]) {
|
||||
if (!device_flush_cache())
|
||||
goto cleanup;
|
||||
|
||||
if (!quiet) {
|
||||
fprintf(stderr, "Reminder: Remember to copy the limine.sys file in either\n"
|
||||
" the root, /boot, /limine, or /boot/limine directories of\n"
|
||||
" one of the partitions on the device, or boot will fail!\n");
|
||||
|
||||
fprintf(stderr, "Limine deployed successfully!\n");
|
||||
}
|
||||
|
||||
ok = EXIT_SUCCESS;
|
||||
|
||||
|
Binary file not shown.
2324
limine-hdd.h
2324
limine-hdd.h
File diff suppressed because it is too large
Load Diff
BIN
limine-pxe.bin
BIN
limine-pxe.bin
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#define LIMINE_VERSION "4.20221204.0"
|
||||
#define LIMINE_VERSION "4.20221214.0"
|
||||
|
||||
int main(void) {
|
||||
puts(LIMINE_VERSION);
|
||||
|
BIN
limine.sys
BIN
limine.sys
Binary file not shown.
Loading…
Reference in New Issue
Block a user