misc: Misc stage 2 related improvements
This commit is contained in:
parent
3181293a04
commit
710757420b
|
@ -215,15 +215,15 @@ $(call MKESCAPE,$(BUILDDIR))/stage2.bin.gz: $(call MKESCAPE,$(BUILDDIR))/stage2.
|
||||||
gzip -n -9 < '$(call SHESCAPE,$<)' > '$(call SHESCAPE,$@)'
|
gzip -n -9 < '$(call SHESCAPE,$<)' > '$(call SHESCAPE,$@)'
|
||||||
|
|
||||||
$(call MKESCAPE,$(BUILDDIR))/stage2.bin: $(call MKESCAPE,$(BUILDDIR))/limine.sys
|
$(call MKESCAPE,$(BUILDDIR))/stage2.bin: $(call MKESCAPE,$(BUILDDIR))/limine.sys
|
||||||
dd if='$(call SHESCAPE,$<)' bs=$$(( 0x$$("$(CROSS_READELF)" -S '$(call SHESCAPE,$(BUILDDIR))/limine.elf' | $(GREP) .text.stage3 | $(SED) 's/^.*] //' | $(AWK) '{print $$3}' | $(SED) 's/^0*//') - 0x8000 )) count=1 of='$(call SHESCAPE,$@)' 2>/dev/null
|
dd if='$(call SHESCAPE,$<)' bs=$$(( 0x$$("$(CROSS_READELF)" -S '$(call SHESCAPE,$(BUILDDIR))/limine.elf' | $(GREP) '\.text\.stage3' | $(SED) 's/^.*] //' | $(AWK) '{print $$3}' | $(SED) 's/^0*//') - 0x8000 )) count=1 of='$(call SHESCAPE,$@)' 2>/dev/null
|
||||||
|
|
||||||
$(call MKESCAPE,$(BUILDDIR))/stage2.map.o: $(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf
|
$(call MKESCAPE,$(BUILDDIR))/stage2.map.o: $(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf
|
||||||
cd '$(call SHESCAPE,$(BUILDDIR))' && \
|
cd '$(call SHESCAPE,$(BUILDDIR))' && \
|
||||||
'$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' stage2 32 '\.text.stage2'
|
'$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' stage2 32 '\.text\.stage2'
|
||||||
$(CROSS_CC) $(CROSS_CFLAGS) -c '$(call SHESCAPE,$(BUILDDIR))/stage2.map.S' -o '$(call SHESCAPE,$@)'
|
$(CROSS_CC) $(CROSS_CFLAGS) -c '$(call SHESCAPE,$(BUILDDIR))/stage2.map.S' -o '$(call SHESCAPE,$@)'
|
||||||
rm -f '$(call SHESCAPE,$(BUILDDIR))/stage2.map.S' '$(call SHESCAPE,$(BUILDDIR))/stage2.map.d'
|
rm -f '$(call SHESCAPE,$(BUILDDIR))/stage2.map.S' '$(call SHESCAPE,$(BUILDDIR))/stage2.map.d'
|
||||||
|
|
||||||
$(call MKESCAPE,$(BUILDDIR))/full.map.o: $(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf
|
$(call MKESCAPE,$(BUILDDIR))/full.map.o: $(call MKESCAPE,$(BUILDDIR))/limine_nos3map.elf
|
||||||
cd '$(call SHESCAPE,$(BUILDDIR))' && \
|
cd '$(call SHESCAPE,$(BUILDDIR))' && \
|
||||||
'$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' full 32 '\.text'
|
'$(call SHESCAPE,$(SRCDIR))/gensyms.sh' '$(call SHESCAPE,$<)' full 32 '\.text'
|
||||||
$(CROSS_CC) $(CROSS_CFLAGS) -c '$(call SHESCAPE,$(BUILDDIR))/full.map.S' -o '$(call SHESCAPE,$@)'
|
$(CROSS_CC) $(CROSS_CFLAGS) -c '$(call SHESCAPE,$(BUILDDIR))/full.map.S' -o '$(call SHESCAPE,$@)'
|
||||||
|
@ -242,11 +242,26 @@ $(call MKESCAPE,$(BUILDDIR))/limine_stage2only.elf: $(OBJ_S2) ../libgcc-binaries
|
||||||
( echo "This error may mean that stage 2 was trying to use stage 3 symbols before loading stage 3" && \
|
( echo "This error may mean that stage 2 was trying to use stage 3 symbols before loading stage 3" && \
|
||||||
false )
|
false )
|
||||||
|
|
||||||
|
$(call MKESCAPE,$(BUILDDIR))/linker_nos2map.ld: linker_bios.ld.in
|
||||||
|
$(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))'
|
||||||
|
$(CROSS_CC) -x c -E -P -undef -DLINKER_NOMAP -DLINKER_NOS2MAP linker_bios.ld.in -o '$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld'
|
||||||
|
|
||||||
|
$(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf: $(OBJ) ../libgcc-binaries/libgcc-i686.a $(call MKESCAPE,$(BUILDDIR))/tinf/tinfgzip.o $(call MKESCAPE,$(BUILDDIR))/tinf/tinflate.o $(call MKESCAPE,$(BUILDDIR))/font.o
|
||||||
|
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld'
|
||||||
|
$(CROSS_LD) '$(call OBJESCAPE,$^)' $(CROSS_LDFLAGS) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld' -o '$(call SHESCAPE,$@)'
|
||||||
|
$(CROSS_OBJCOPY) -O binary --only-section=.note.gnu.build-id '$(call SHESCAPE,$@)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.bin'
|
||||||
|
cd '$(call SHESCAPE,$(BUILDDIR))' && \
|
||||||
|
$(CROSS_OBJCOPY) -I binary $(OBJCOPY2ELF_FLAGS) build-id.s2.bin build-id.s2.o
|
||||||
|
$(CROSS_OBJCOPY) -O binary --only-section=.note.gnu.build-id '$(call SHESCAPE,$@)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.bin'
|
||||||
|
cd '$(call SHESCAPE,$(BUILDDIR))' && \
|
||||||
|
$(CROSS_OBJCOPY) -I binary $(OBJCOPY2ELF_FLAGS) build-id.s3.bin build-id.s3.o
|
||||||
|
$(CROSS_LD) '$(call OBJESCAPE,$^)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.o' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.o' $(CROSS_LDFLAGS) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld' -o '$(call SHESCAPE,$@)'
|
||||||
|
|
||||||
$(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_bios.ld.in
|
$(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_bios.ld.in
|
||||||
$(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))'
|
$(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))'
|
||||||
$(CROSS_CC) -x c -E -P -undef -DLINKER_NOMAP linker_bios.ld.in -o '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld'
|
$(CROSS_CC) -x c -E -P -undef -DLINKER_NOMAP linker_bios.ld.in -o '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld'
|
||||||
|
|
||||||
$(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf: $(OBJ) ../libgcc-binaries/libgcc-i686.a $(call MKESCAPE,$(BUILDDIR))/tinf/tinfgzip.o $(call MKESCAPE,$(BUILDDIR))/tinf/tinflate.o $(call MKESCAPE,$(BUILDDIR))/font.o
|
$(call MKESCAPE,$(BUILDDIR))/limine_nos3map.elf: $(OBJ) ../libgcc-binaries/libgcc-i686.a $(call MKESCAPE,$(BUILDDIR))/tinf/tinfgzip.o $(call MKESCAPE,$(BUILDDIR))/tinf/tinflate.o $(call MKESCAPE,$(BUILDDIR))/font.o $(call MKESCAPE,$(BUILDDIR))/stage2.map.o
|
||||||
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld'
|
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld'
|
||||||
$(CROSS_LD) '$(call OBJESCAPE,$^)' $(CROSS_LDFLAGS) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' -o '$(call SHESCAPE,$@)'
|
$(CROSS_LD) '$(call OBJESCAPE,$^)' $(CROSS_LDFLAGS) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' -o '$(call SHESCAPE,$@)'
|
||||||
$(CROSS_OBJCOPY) -O binary --only-section=.note.gnu.build-id '$(call SHESCAPE,$@)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.bin'
|
$(CROSS_OBJCOPY) -O binary --only-section=.note.gnu.build-id '$(call SHESCAPE,$@)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.bin'
|
||||||
|
|
|
@ -78,14 +78,13 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
noreturn void entry(uint8_t boot_drive, int boot_from) {
|
noreturn void entry(uint8_t boot_drive, int boot_from) {
|
||||||
|
term_fallback();
|
||||||
|
|
||||||
// XXX DO NOT MOVE A20 ENABLE CALL
|
// XXX DO NOT MOVE A20 ENABLE CALL
|
||||||
if (!a20_enable()) {
|
if (!a20_enable()) {
|
||||||
term_fallback();
|
|
||||||
panic(false, "Could not enable A20 line");
|
panic(false, "Could not enable A20 line");
|
||||||
}
|
}
|
||||||
|
|
||||||
term_fallback();
|
|
||||||
|
|
||||||
init_e820();
|
init_e820();
|
||||||
init_memmap();
|
init_memmap();
|
||||||
|
|
||||||
|
@ -101,7 +100,7 @@ noreturn void entry(uint8_t boot_drive, int boot_from) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (boot_volume == NULL) {
|
if (boot_volume == NULL) {
|
||||||
panic(false, "Could not determine boot drive\n");
|
panic(false, "Could not determine boot drive");
|
||||||
}
|
}
|
||||||
|
|
||||||
volume_iterate_parts(boot_volume,
|
volume_iterate_parts(boot_volume,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <lib/misc.h>
|
#include <lib/misc.h>
|
||||||
#include <lib/print.h>
|
#include <lib/print.h>
|
||||||
|
|
||||||
bool verbose = true;
|
bool verbose = false;
|
||||||
bool quiet = false;
|
bool quiet = false;
|
||||||
bool serial = false;
|
bool serial = false;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,29 @@
|
||||||
#include <sys/cpu.h>
|
#include <sys/cpu.h>
|
||||||
#include <drivers/serial.h>
|
#include <drivers/serial.h>
|
||||||
|
|
||||||
|
#if defined (BIOS)
|
||||||
|
static void s2_print(const char *s, size_t len) {
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
struct rm_regs r = {0};
|
||||||
|
char c = s[i];
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
case '\n':
|
||||||
|
r.eax = 0x0e00 | '\r';
|
||||||
|
rm_int(0x10, &r, &r);
|
||||||
|
r = (struct rm_regs){0};
|
||||||
|
r.eax = 0x0e00 | '\n';
|
||||||
|
rm_int(0x10, &r, &r);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
r.eax = 0x0e00 | s[i];
|
||||||
|
rm_int(0x10, &r, &r);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static const char *base_digits = "0123456789abcdef";
|
static const char *base_digits = "0123456789abcdef";
|
||||||
|
|
||||||
#define PRINT_BUF_MAX 4096
|
#define PRINT_BUF_MAX 4096
|
||||||
|
@ -180,7 +203,15 @@ void vprint(const char *fmt, va_list args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
term_write((uint64_t)(uintptr_t)print_buf, print_buf_i);
|
#if defined (BIOS)
|
||||||
|
if (stage3_loaded) {
|
||||||
|
#endif
|
||||||
|
term_write((uint64_t)(uintptr_t)print_buf, print_buf_i);
|
||||||
|
#if defined (BIOS)
|
||||||
|
} else {
|
||||||
|
s2_print(print_buf, print_buf_i);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < print_buf_i; i++) {
|
for (size_t i = 0; i < print_buf_i; i++) {
|
||||||
#if defined (__x86_64__) || defined (__i386__)
|
#if defined (__x86_64__) || defined (__i386__)
|
||||||
|
|
|
@ -41,10 +41,9 @@ SECTIONS
|
||||||
getchar = .;
|
getchar = .;
|
||||||
menu = .;
|
menu = .;
|
||||||
term_write = .;
|
term_write = .;
|
||||||
term_vbe = .;
|
|
||||||
stage3_addr = .;
|
stage3_addr = .;
|
||||||
#else
|
#else
|
||||||
#ifdef LINKER_NOMAP
|
#ifdef LINKER_NOS2MAP
|
||||||
stage2_map = .;
|
stage2_map = .;
|
||||||
#else
|
#else
|
||||||
*(.stage2_map)
|
*(.stage2_map)
|
||||||
|
|
Loading…
Reference in New Issue