build: Get build-id from linker instead of generating a random one
This commit is contained in:
parent
2caf1eaec0
commit
0c073fcc44
@ -50,8 +50,6 @@ endif
|
||||
COM_OUTPUT = false
|
||||
E9_OUTPUT = false
|
||||
|
||||
BUILD_ID := $(shell dd if=/dev/urandom count=8 bs=1 2>/dev/null | od -An -t x4 | sed 's/^ /0x/g;s/ //g')
|
||||
|
||||
WERROR = -Werror
|
||||
CFLAGS ?= -O3 -g -pipe -Wall -Wextra $(WERROR)
|
||||
|
||||
@ -71,7 +69,6 @@ INTERNAL_CFLAGS := \
|
||||
-mno-sse \
|
||||
-mno-sse2 \
|
||||
-MMD \
|
||||
-DBUILD_ID=$(BUILD_ID) \
|
||||
-DLIMINE_VERSION='"$(LIMINE_VERSION)"' \
|
||||
-DLIMINE_COPYRIGHT='"$(LIMINE_COPYRIGHT)"' \
|
||||
-DCOM_OUTPUT=$(COM_OUTPUT) \
|
||||
@ -141,7 +138,8 @@ INTERNAL_LDFLAGS := \
|
||||
ifeq ($(TARGET), bios)
|
||||
INTERNAL_LDFLAGS += \
|
||||
-melf_i386 \
|
||||
-static
|
||||
-static \
|
||||
--build-id=sha1
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET), uefi)
|
||||
@ -246,15 +244,43 @@ $(BUILDDIR)/limine_stage2only.elf: $(OBJ)
|
||||
$(TOOLCHAIN_LD) $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker_stage2only.ld -o $@ || \
|
||||
( echo "This error may mean that stage 2 was trying to use stage 3 symbols before loading stage 3" && \
|
||||
false )
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s2.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s2.bin build-id.s2.o
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s3.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s3.bin build-id.s3.o
|
||||
$(TOOLCHAIN_LD) $(BUILDDIR)/build-id.s2.o $(BUILDDIR)/build-id.s3.o $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker_stage2only.ld -o $@
|
||||
|
||||
$(BUILDDIR)/limine_nomap.elf: $(OBJ) $(BUILDDIR)/tinf/tinfgzip.o $(BUILDDIR)/tinf/tinflate.o $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o $(BUILDDIR)/stage2.map.o
|
||||
$(TOOLCHAIN_LD) $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker_nomap.ld -o $@
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s2.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s2.bin build-id.s2.o
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s3.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s3.bin build-id.s3.o
|
||||
$(TOOLCHAIN_LD) $(BUILDDIR)/build-id.s2.o $(BUILDDIR)/build-id.s3.o $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker_nomap.ld -o $@
|
||||
|
||||
$(BUILDDIR)/limine.elf: $(OBJ) $(BUILDDIR)/tinf/tinfgzip.o $(BUILDDIR)/tinf/tinflate.o $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o $(BUILDDIR)/stage2.map.o $(BUILDDIR)/full.map.o
|
||||
$(TOOLCHAIN_LD) $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker.ld -o $@
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s2.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s2.bin build-id.s2.o
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s3.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s3.bin build-id.s3.o
|
||||
$(TOOLCHAIN_LD) $(BUILDDIR)/build-id.s2.o $(BUILDDIR)/build-id.s3.o $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker.ld -o $@
|
||||
|
||||
$(BUILDDIR)/limine_dbg.elf: $(OBJ) $(BUILDDIR)/tinf/tinfgzip.o $(BUILDDIR)/tinf/tinflate.o $(BUILDDIR)/font.o $(BUILDDIR)/sys/smp_trampoline.o $(BUILDDIR)/stage2.map.o $(BUILDDIR)/full.map.o
|
||||
$(TOOLCHAIN_LD) $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker_dbg.ld -o $@
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s2.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s2.bin build-id.s2.o
|
||||
$(TOOLCHAIN_OBJCOPY) -O binary --only-section=.note.gnu.build-id $@ $(BUILDDIR)/build-id.s3.bin
|
||||
cd "$(BUILDDIR)" && \
|
||||
$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) build-id.s3.bin build-id.s3.o
|
||||
$(TOOLCHAIN_LD) $(BUILDDIR)/build-id.s2.o $(BUILDDIR)/build-id.s3.o $^ $(LDFLAGS) $(INTERNAL_LDFLAGS) -Tlinker_dbg.ld -o $@
|
||||
|
||||
endif
|
||||
|
||||
|
@ -21,8 +21,6 @@
|
||||
#include <drivers/disk.h>
|
||||
#include <sys/idt.h>
|
||||
|
||||
extern uint64_t stage3_build_id;
|
||||
|
||||
struct volume *boot_volume;
|
||||
|
||||
#if bios == 1
|
||||
@ -32,6 +30,8 @@ static bool stage3_found = false;
|
||||
|
||||
extern symbol stage3_addr;
|
||||
extern symbol limine_sys_size;
|
||||
extern symbol build_id_s2;
|
||||
extern symbol build_id_s3;
|
||||
|
||||
static bool stage3_init(struct volume *part) {
|
||||
struct file_handle *stage3;
|
||||
@ -54,7 +54,7 @@ static bool stage3_init(struct volume *part) {
|
||||
|
||||
fclose(stage3);
|
||||
|
||||
if (BUILD_ID != stage3_build_id) {
|
||||
if (memcmp(build_id_s2 + 16, build_id_s3 + 16, 20) != 0) {
|
||||
print("limine.sys build ID mismatch.\n");
|
||||
return false;
|
||||
}
|
||||
|
@ -126,9 +126,6 @@ void uefi_entry(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
|
||||
#endif
|
||||
|
||||
#if bios == 1
|
||||
__attribute__((section(".stage3_build_id")))
|
||||
uint64_t stage3_build_id = BUILD_ID;
|
||||
|
||||
__attribute__((section(".stage3_entry")))
|
||||
#endif
|
||||
__attribute__((noreturn))
|
||||
|
@ -17,6 +17,11 @@ SECTIONS
|
||||
*.s2.o(.text*)
|
||||
}
|
||||
|
||||
.stage2.build-id : {
|
||||
build_id_s2 = .;
|
||||
*build-id.s2.o(*)
|
||||
}
|
||||
|
||||
.stage2.data : {
|
||||
*.s2.o(.data*)
|
||||
*.s2.o(.rodata*)
|
||||
@ -26,10 +31,14 @@ SECTIONS
|
||||
.stage3.text : {
|
||||
stage3_addr = .;
|
||||
*(.stage3_entry*)
|
||||
*(.stage3_build_id*)
|
||||
*(.text*)
|
||||
}
|
||||
|
||||
.stage3.build-id : {
|
||||
build_id_s3 = .;
|
||||
*build-id.s3.o(*)
|
||||
}
|
||||
|
||||
.stage3.data : {
|
||||
*(.data*)
|
||||
*(.rodata*)
|
||||
@ -37,6 +46,10 @@ SECTIONS
|
||||
limine_sys_size = . - 0x8000;
|
||||
}
|
||||
|
||||
.note.gnu.build-id : {
|
||||
*(.note.gnu.build-id)
|
||||
}
|
||||
|
||||
.bss : {
|
||||
bss_begin = .;
|
||||
*(COMMON)
|
||||
|
@ -17,6 +17,11 @@ SECTIONS
|
||||
*.s2.o(.text*)
|
||||
}
|
||||
|
||||
.stage2.build-id : {
|
||||
build_id_s2 = .;
|
||||
*build-id.s2.o(*)
|
||||
}
|
||||
|
||||
.stage2.data : {
|
||||
*.s2.o(.data*)
|
||||
*.s2.o(.rodata*)
|
||||
@ -26,10 +31,14 @@ SECTIONS
|
||||
.stage3.text : {
|
||||
stage3_addr = .;
|
||||
*(.stage3_entry*)
|
||||
*(.stage3_build_id*)
|
||||
*(.text*)
|
||||
}
|
||||
|
||||
.stage3.build-id : {
|
||||
build_id_s3 = .;
|
||||
*build-id.s3.o(*)
|
||||
}
|
||||
|
||||
.stage3.data : {
|
||||
*(.data*)
|
||||
*(.rodata*)
|
||||
@ -37,6 +46,10 @@ SECTIONS
|
||||
limine_sys_size = . - 0x8000;
|
||||
}
|
||||
|
||||
.note.gnu.build-id : {
|
||||
*(.note.gnu.build-id)
|
||||
}
|
||||
|
||||
.bss : {
|
||||
bss_begin = .;
|
||||
*(COMMON)
|
||||
|
@ -17,6 +17,11 @@ SECTIONS
|
||||
*.s2.o(.text*)
|
||||
}
|
||||
|
||||
.stage2.build-id : {
|
||||
build_id_s2 = .;
|
||||
*build-id.s2.o(*)
|
||||
}
|
||||
|
||||
.stage2.data : {
|
||||
*.s2.o(.data*)
|
||||
*.s2.o(.rodata*)
|
||||
@ -26,10 +31,14 @@ SECTIONS
|
||||
.stage3.text : {
|
||||
stage3_addr = .;
|
||||
*(.stage3_entry*)
|
||||
*(.stage3_build_id*)
|
||||
*(.text*)
|
||||
}
|
||||
|
||||
.stage3.build-id : {
|
||||
build_id_s3 = .;
|
||||
*build-id.s3.o(*)
|
||||
}
|
||||
|
||||
.stage3.data : {
|
||||
*(.data*)
|
||||
*(.rodata*)
|
||||
@ -37,6 +46,10 @@ SECTIONS
|
||||
limine_sys_size = . - 0x8000;
|
||||
}
|
||||
|
||||
.note.gnu.build-id : {
|
||||
*(.note.gnu.build-id)
|
||||
}
|
||||
|
||||
.bss : {
|
||||
bss_begin = .;
|
||||
*(COMMON)
|
||||
|
@ -17,17 +17,30 @@ SECTIONS
|
||||
*.s2.o(.text*)
|
||||
}
|
||||
|
||||
.stage2.build-id : {
|
||||
build_id_s2 = .;
|
||||
*build-id.s2.o(*)
|
||||
}
|
||||
|
||||
.stage2.data : {
|
||||
*.s2.o(.data*)
|
||||
*.s2.o(.rodata*)
|
||||
stage2_map = .;
|
||||
stage3_addr = .;
|
||||
*(.stage3_build_id*)
|
||||
full_map = .;
|
||||
limine_sys_size = .;
|
||||
getchar_internal = .;
|
||||
}
|
||||
|
||||
.stage3.build-id : {
|
||||
build_id_s3 = .;
|
||||
*build-id.s3.o(*)
|
||||
}
|
||||
|
||||
.note.gnu.build-id : {
|
||||
*(.note.gnu.build-id)
|
||||
}
|
||||
|
||||
.bss : {
|
||||
bss_begin = .;
|
||||
*(COMMON)
|
||||
|
Loading…
Reference in New Issue
Block a user