x86/build: Don't convert boot/{cmdline,head}.bin back to .S

There's no point wasting time converting binaries back to asm source.  Just
use .incbin directly.  Explain in head.S what these binaries are.

Also, explicitly align the blobs.  They contain 4-byte objects, and happen to
be 4-byte aligned currently because of the position of `lret` and the size of
cmdline.S but this is incredibly fragile.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2022-08-12 18:48:34 +01:00
1 parent 1af4e0189f
commit 1ab7c128d9
2 files changed
+11 -11

No files matched your search

+3 -9
View File
@@ -7,10 +7,8 @@ targets += $(head-srcs:.S=.o)
head-srcs := $(addprefix $(obj)/, $(head-srcs))
ifdef building_out_of_srctree
$(obj)/head.o: CFLAGS-y += -iquote $(obj)
endif
$(obj)/head.o: $(head-srcs)
$(obj)/head.o: AFLAGS-y += -Wa$(comma)-I$(obj)
$(obj)/head.o: $(head-srcs:.S=.bin)
CFLAGS_x86_32 := $(subst -m64,-m32 -march=i686,$(XEN_TREEWIDE_CFLAGS))
$(call cc-options-add,CFLAGS_x86_32,CC,$(EMBEDDED_EXTRA_CFLAGS))
@@ -27,14 +25,10 @@ $(head-srcs:.S=.o): XEN_CFLAGS := $(CFLAGS_x86_32) -fpic
LDFLAGS_DIRECT-$(call ld-option,--warn-rwx-segments) := --no-warn-rwx-segments
LDFLAGS_DIRECT += $(LDFLAGS_DIRECT-y)
$(head-srcs): %.S: %.bin
(od -v -t x $< | tr -s ' ' | awk 'NR > 1 {print s} {s=$$0}' | \
sed 's/ /,0x/g' | sed 's/,0x$$//' | sed 's/^[0-9]*,/ .long /') >$@
%.bin: %.lnk
$(OBJCOPY) -j .text -O binary $< $@
%.lnk: %.o $(src)/build32.lds
$(LD) $(subst x86_64,i386,$(LDFLAGS_DIRECT)) -N -T $(filter %.lds,$^) -o $@ $<
clean-files := cmdline.S reloc.S *.lnk *.bin
clean-files := *.lnk *.bin
+8 -2
View File
@@ -777,11 +777,17 @@ trampoline_setup:
/* Jump into the relocated trampoline. */
lret
/*
* cmdline and reloc are written in C, and linked to be 32bit PIC with
* entrypoints at 0 and using the stdcall convention.
*/
ALIGN
cmdline_parse_early:
#include "cmdline.S"
.incbin "cmdline.bin"
ALIGN
reloc:
#include "reloc.S"
.incbin "reloc.bin"
ENTRY(trampoline_start)
#include "trampoline.S"
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.