WIP BROKEN Attempt to build memtest_shared with LTO: works for the static build but not the dynamic build.

This commit is contained in:
Lionel Debroux 2022-12-11 18:22:24 +01:00
parent e99ce97648
commit ce62772c3f
2 changed files with 35 additions and 23 deletions

View File

@ -38,7 +38,7 @@ startup32:
# Save the boot params pointer. # Save the boot params pointer.
movl %esi, (boot_params_addr - startup32)(%ebx) movl %esi, (boot_params_addr_ - startup32)(%ebx)
# Use the startup stack until we pick the correct one. # Use the startup stack until we pick the correct one.
@ -46,21 +46,21 @@ startup32:
# Initialise the pml4 and pdp tables. # Initialise the pml4 and pdp tables.
leal (pml4 - startup32)(%ebx), %ecx leal (pml4_ - startup32)(%ebx), %ecx
leal (pdp - startup32)(%ebx), %edx leal (pdp_ - startup32)(%ebx), %edx
movl %edx, %eax movl %edx, %eax
addl $0x3, %eax addl $0x3, %eax
movl %eax, 0(%ecx) movl %eax, 0(%ecx)
leal (pd0 - startup32)(%ebx), %eax leal (pd0_ - startup32)(%ebx), %eax
addl $0x3, %eax addl $0x3, %eax
movl %eax, 0(%edx) movl %eax, 0(%edx)
leal (pd1 - startup32)(%ebx), %eax leal (pd1_ - startup32)(%ebx), %eax
addl $0x3, %eax addl $0x3, %eax
movl %eax, 8(%edx) movl %eax, 8(%edx)
leal (pd2 - startup32)(%ebx), %eax leal (pd2_ - startup32)(%ebx), %eax
addl $0x3, %eax addl $0x3, %eax
movl %eax, 16(%edx) movl %eax, 16(%edx)
leal (pd3 - startup32)(%ebx), %eax leal (pd3_ - startup32)(%ebx), %eax
addl $0x3, %eax addl $0x3, %eax
movl %eax, 24(%edx) movl %eax, 24(%edx)
@ -122,7 +122,7 @@ startup64:
# Save the boot params pointer. # Save the boot params pointer.
movq %rsi, boot_params_addr(%rip) movq %rsi, boot_params_addr_(%rip)
jmp startup jmp startup
@ -136,7 +136,7 @@ efi_handover:
# Save the boot params pointer. # Save the boot params pointer.
movq %rax, boot_params_addr(%rip) movq %rax, boot_params_addr_(%rip)
# The 64-bit entry point for AP boot and for restart after relocation. # The 64-bit entry point for AP boot and for restart after relocation.
@ -164,21 +164,21 @@ startup:
# Initialise the pml4 and pdp tables. # Initialise the pml4 and pdp tables.
leaq pml4(%rip), %rcx leaq pml4_(%rip), %rcx
leaq pdp(%rip), %rdx leaq pdp_(%rip), %rdx
movq %rdx, %rax movq %rdx, %rax
addq $0x3, %rax addq $0x3, %rax
movq %rax, 0(%rcx) movq %rax, 0(%rcx)
leaq pd0(%rip), %rax leaq pd0_(%rip), %rax
addq $0x3, %rax addq $0x3, %rax
movq %rax, 0(%rdx) movq %rax, 0(%rdx)
leaq pd1(%rip), %rax leaq pd1_(%rip), %rax
addq $0x3, %rax addq $0x3, %rax
movq %rax, 8(%rdx) movq %rax, 8(%rdx)
leaq pd2(%rip), %rax leaq pd2_(%rip), %rax
addq $0x3, %rax addq $0x3, %rax
movq %rax, 16(%rdx) movq %rax, 16(%rdx)
leaq pd3(%rip), %rax leaq pd3_(%rip), %rax
addq $0x3, %rax addq $0x3, %rax
movq %rax, 24(%rdx) movq %rax, 24(%rdx)
@ -453,14 +453,14 @@ gdt_descr:
.quad 0 # addr: filled in at run time .quad 0 # addr: filled in at run time
.align 4 .align 4
.globl gdt // .globl gdt
gdt: gdt:
.quad 0x0000000000000000 # NULL descriptor .quad 0x0000000000000000 # NULL descriptor
.quad 0x0000000000000000 # not used .quad 0x0000000000000000 # not used
.quad 0x00209a0000000000 # 0x10 64-bit code at 0x000000 .quad 0x00209a0000000000 # 0x10 64-bit code at 0x000000
.quad 0x0000920000000000 # 0x18 64-bit data at 0x000000 .quad 0x0000920000000000 # 0x18 64-bit data at 0x000000
.globl gdt_end // .globl gdt_end
gdt_end: gdt_end:
.data .data
@ -492,6 +492,7 @@ gdt_end:
.align 4096 .align 4096
.globl pml4 .globl pml4
pml4: pml4:
pml4_:
.quad 0 # filled in at run time .quad 0 # filled in at run time
# Page Directory Pointer Table: # Page Directory Pointer Table:
@ -500,6 +501,7 @@ pml4:
.align 4096 .align 4096
.globl pdp .globl pdp
pdp: pdp:
pdp_:
.quad 0 # filled in at run time .quad 0 # filled in at run time
.quad 0 # filled in at run time .quad 0 # filled in at run time
.quad 0 # filled in at run time .quad 0 # filled in at run time
@ -514,21 +516,25 @@ pdp:
.align 4096 .align 4096
.globl pd0 .globl pd0
pd0: pd0:
pd0_:
ptes64 0x0000000000000000 ptes64 0x0000000000000000
.align 4096 .align 4096
.globl pd1 .globl pd1
pd1: pd1:
pd1_:
ptes64 0x0000000040000000 ptes64 0x0000000040000000
.align 4096 .align 4096
.globl pd2 .globl pd2
pd2: pd2:
pd2_:
ptes64 0x0000000080000000 ptes64 0x0000000080000000
.align 4096 .align 4096
.globl pd3 .globl pd3
pd3: pd3:
pd3_:
ptes64 0x00000000C0000000 ptes64 0x00000000C0000000
.previous .previous
@ -561,7 +567,7 @@ data32 lgdt ap_gdt_descr - ap_trampoline
# Set the page directory base address. # Set the page directory base address.
movl %ebx, %eax movl %ebx, %eax
addl $(pml4 - startup), %eax addl $(pml4_ - startup), %eax
movl %eax, %cr3 movl %eax, %cr3
# Enable PAE. # Enable PAE.
@ -608,6 +614,7 @@ ap_trampoline_end:
.align 4 .align 4
.globl boot_params_addr .globl boot_params_addr
boot_params_addr_:
boot_params_addr: boot_params_addr:
.quad 0 .quad 0

View File

@ -1,4 +1,4 @@
AS = as -64 AS = gcc
CC = gcc CC = gcc
OBJCOPY = objcopy OBJCOPY = objcopy
@ -11,7 +11,7 @@ else
endif endif
CFLAGS = -std=gnu11 -Wall -Wextra -Wshadow -m64 -march=x86-64 -mno-mmx -mno-sse -mno-sse2 \ CFLAGS = -std=gnu11 -Wall -Wextra -Wshadow -m64 -march=x86-64 -mno-mmx -mno-sse -mno-sse2 \
-fpic -fno-builtin -ffreestanding -fomit-frame-pointer -fno-stack-protector \ -fpic -fno-builtin -ffreestanding -fomit-frame-pointer -fno-stack-protector -flto \
-DARCH_BITS=64 -DARCH_BITS=64
ifeq ($(DEBUG), 1) ifeq ($(DEBUG), 1)
@ -157,9 +157,14 @@ FORCE:
# Link it statically once so I know I don't have undefined symbols and # Link it statically once so I know I don't have undefined symbols and
# then link it dynamically so I have full relocation information. # then link it dynamically so I have full relocation information.
memtest_shared: $(OBJS) $(MS_LDS) Makefile memtest_shared: $(OBJS) ldscripts/memtest_shared.lds Makefile
$(LD) --warn-constructors --warn-common -static -T $(MS_LDS) -o $@ $(OBJS) && \ $(CC) -fpic -flto -ffreestanding -nostdlib -Wl,--warn-constructors -Wl,--warn-common -static -T $(MS_LDS) -o $@ $(OBJS) && \
$(LD) -shared -Bsymbolic -T $(MS_LDS) -o $@ $(OBJS) cp memtest_shared memtest_shared2 && \
echo STEP2 && \
$(CC) -fpic -flto -r -o $@.o $(OBJS) && \
cp memtest_shared.o memtest_shared3 && \
echo STEP3 && \
$(CC) -fpic -flto -nostdlib -shared -Bsymbolic -T $(MS_LDS) -o $@ memtest_shared.o
memtest_shared.bin: memtest_shared memtest_shared.bin: memtest_shared
$(OBJCOPY) -O binary $< memtest_shared.bin $(OBJCOPY) -O binary $< memtest_shared.bin