[coreboot-gerrit] Change in coreboot[master]: util/cbfstool: Move x86 Linux trampoline
Patrick Rudolph (Code Review)
gerrit at coreboot.org
Mon Feb 26 12:15:29 CET 2018
Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/23867
Change subject: util/cbfstool: Move x86 Linux trampoline
......................................................................
util/cbfstool: Move x86 Linux trampoline
Move linux trampoline code to support more than one architecture.
* Move the x86 trampoline to payloads/external/linux
* Add make rules to compile it only if the toolchain is present
* Add architecture independent Makefile for all trampolines
* Rename the trampoline to linux_trampoline_x86
Change-Id: I1d8630554e9fd845840de88142e5115c0bf92842
---
M Makefile.inc
A payloads/external/linux/Makefile
A payloads/external/linux/Makefile.inc
R payloads/external/linux/bzimage_loader.h
R payloads/external/linux/linux_trampoline.h
R payloads/external/linux/linux_trampoline_x86.S
A payloads/external/linux/linux_trampoline_x86.c
R payloads/external/linux/trampoline/x86/linux_trampoline.c
M util/cbfstool/Makefile
M util/cbfstool/Makefile.inc
M util/cbfstool/cbfs-payload-linux.c
11 files changed, 86 insertions(+), 18 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/67/23867/1
diff --git a/Makefile.inc b/Makefile.inc
index be658ef..d117d59 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -93,7 +93,7 @@
subdirs-y += $(wildcard src/arch/*)
subdirs-y += src/mainboard/$(MAINBOARDDIR)
subdirs-y += src/security
-subdirs-y += payloads payloads/external
+subdirs-y += payloads payloads/external payloads/external/linux
subdirs-y += site-local
subdirs-y += util/checklist util/testing
diff --git a/payloads/external/linux/Makefile b/payloads/external/linux/Makefile
new file mode 100644
index 0000000..0f5f2fd
--- /dev/null
+++ b/payloads/external/linux/Makefile
@@ -0,0 +1,18 @@
+.PHONY: clean
+clean:
+ $(RM) */linux_trampoline.c
+
+%.bin: %.elf
+ echo " OBJCOPY $@"
+ $(OBJCOPY) -Obinary -j .data $< $@
+ rm $<
+
+%.elf: %.S
+ echo " CC $@"
+ $(CC) $(CFLAGS) -o $@ $< -ffreestanding -nostdlib -nostdinc -Wl,--defsym=_start=0
+
+%.c: %.bin
+ echo " XXD $@"
+ echo "/* This file is automatically generated. Do not manually change */" > $@
+ xxd -c 16 -i $< >> $@
+ rm $<
diff --git a/payloads/external/linux/Makefile.inc b/payloads/external/linux/Makefile.inc
new file mode 100644
index 0000000..c0a2b0c
--- /dev/null
+++ b/payloads/external/linux/Makefile.inc
@@ -0,0 +1,37 @@
+################################################################################
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2009-2010 coresystems GmbH
+## Copyright (C) 2015 Google Inc.
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; version 2 of the License.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+
+######################################################################
+# set up payload config and version files for later inclusion
+
+linuxdir:=$(top)/payloads/external/linux
+
+ifneq ($(GCC_CC_x86_32),)
+$(linuxdir)/linux_trampoline_x86.c: $(linuxdir)/linux_trampoline_x86.S $(top)/src/arch/x86/include/*
+ $(MAKE) -C $(linuxdir) linux_trampoline_x86.c \
+ HOSTCC="$(HOSTCC)" \
+ CC="$(GCC_CC_x86_32)" \
+ OBJCOPY="$(OBJCOPY_x86_32)" \
+ CFLAGS="$(CFLAGS_x86_32) -I$(top)/src/arch/x86/include"
+else ifneq ($(GCC_CC_x86_64),)
+$(linuxdir)/linux_trampoline_x86.c: $(linuxdir)/linux_trampoline_x86.S $(top)/src/arch/x86/include/*
+ $(MAKE) -C $(linuxdir) linux_trampoline_x86.c \
+ HOSTCC="$(HOSTCC)" \
+ CC="$(GCC_CC_x86_64)" \
+ OBJCOPY="$(OBJCOPY_x86_64)" \
+ CFLAGS="$(CLFAGS_x86_64) -m32 -I$(top)/src/arch/x86/include"
+endif
diff --git a/util/cbfstool/linux.h b/payloads/external/linux/bzimage_loader.h
similarity index 97%
rename from util/cbfstool/linux.h
rename to payloads/external/linux/bzimage_loader.h
index 249c7d7..a01d3d7 100644
--- a/util/cbfstool/linux.h
+++ b/payloads/external/linux/bzimage_loader.h
@@ -188,3 +188,7 @@
u8 command_line[COMMAND_LINE_SIZE]; /* 0x800 */
u8 reserved17[1792]; /* 0x900 - 0x1000 */
};
+
+/* trampoline */
+extern unsigned char linux_trampoline_x86_bin[];
+extern unsigned int linux_trampoline_x86_bin_len;
diff --git a/util/cbfstool/linux_trampoline.h b/payloads/external/linux/linux_trampoline.h
similarity index 100%
rename from util/cbfstool/linux_trampoline.h
rename to payloads/external/linux/linux_trampoline.h
diff --git a/util/cbfstool/linux_trampoline.S b/payloads/external/linux/linux_trampoline_x86.S
similarity index 100%
rename from util/cbfstool/linux_trampoline.S
rename to payloads/external/linux/linux_trampoline_x86.S
diff --git a/payloads/external/linux/linux_trampoline_x86.c b/payloads/external/linux/linux_trampoline_x86.c
new file mode 100644
index 0000000..a60d747
--- /dev/null
+++ b/payloads/external/linux/linux_trampoline_x86.c
@@ -0,0 +1,16 @@
+/* This file is automatically generated. Do not manually change */
+unsigned char linux_trampoline_x86_bin[] = {
+ 0xfc, 0x31, 0xd2, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x01, 0x00, 0x01, 0xcb, 0x8b,
+ 0x01, 0x3d, 0x4c, 0x42, 0x49, 0x4f, 0x74, 0x07, 0x83, 0xc1, 0x10, 0x39, 0xcb, 0x75, 0xe9, 0x39,
+ 0xcb, 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, 0x8b, 0x59, 0x04, 0x01, 0xcb, 0x8b, 0x49, 0x14, 0x83,
+ 0x3b, 0x11, 0x75, 0x05, 0x8b, 0x4b, 0x08, 0xeb, 0xcf, 0x83, 0x3b, 0x01, 0x75, 0x33, 0x8b, 0x43,
+ 0x04, 0x83, 0xe8, 0x08, 0xc1, 0xe8, 0x02, 0x3d, 0xa0, 0x00, 0x00, 0x00, 0x7e, 0x05, 0xb8, 0xa0,
+ 0x00, 0x00, 0x00, 0x89, 0xc6, 0xbf, 0x05, 0x00, 0x00, 0x00, 0xf7, 0xf7, 0xa3, 0xe8, 0x01, 0x09,
+ 0x00, 0x89, 0xf0, 0x91, 0x8d, 0x73, 0x08, 0xbf, 0xd0, 0x02, 0x09, 0x00, 0xf3, 0xa5, 0x91, 0xeb,
+ 0x05, 0x83, 0x3b, 0x12, 0x75, 0x00, 0x03, 0x5b, 0x04, 0x49, 0x75, 0xb3, 0xb8, 0x00, 0x00, 0x04,
+ 0x00, 0x0f, 0x01, 0x00, 0x8b, 0x58, 0x02, 0xc7, 0x43, 0x10, 0xff, 0xff, 0x00, 0x00, 0xc7, 0x43,
+ 0x14, 0x00, 0x9b, 0xcf, 0x00, 0xc7, 0x43, 0x18, 0xff, 0xff, 0x00, 0x00, 0xc7, 0x43, 0x1c, 0x00,
+ 0x93, 0xcf, 0x00, 0xbe, 0x00, 0x00, 0x09, 0x00, 0xff, 0x25, 0x14, 0x02, 0x09, 0x00, 0xf4, 0xeb,
+ 0xfd
+};
+unsigned int linux_trampoline_x86_bin_len = 177;
diff --git a/util/cbfstool/linux_trampoline.c b/payloads/external/linux/trampoline/x86/linux_trampoline.c
similarity index 100%
rename from util/cbfstool/linux_trampoline.c
rename to payloads/external/linux/trampoline/x86/linux_trampoline.c
diff --git a/util/cbfstool/Makefile b/util/cbfstool/Makefile
index caa8c7d..76efcad 100644
--- a/util/cbfstool/Makefile
+++ b/util/cbfstool/Makefile
@@ -30,15 +30,6 @@
$(RM) $(objutil)/cbfstool/ifwitool $(ifwiobj)
$(RM) $(objutil)/cbfstool/cbfs-compression-tool $(cbfscompobj)
-linux_trampoline.c: linux_trampoline.S
- rm -f linux_trampoline.c
- $(CC) -m32 -o linux_trampoline linux_trampoline.S -ffreestanding -nostdlib -nostdinc -Wl,--defsym=_start=0
- $(OBJCOPY) -Obinary -j .data linux_trampoline trampoline
- echo "/* This file is automatically generated. Do not manually change */" > trampoline.c
- xxd -c 16 -i trampoline >> trampoline.c
- mv trampoline.c linux_trampoline.c
- rm linux_trampoline trampoline
-
.SILENT:
include Makefile.inc
diff --git a/util/cbfstool/Makefile.inc b/util/cbfstool/Makefile.inc
index 8e4d8b6..0575e1d 100644
--- a/util/cbfstool/Makefile.inc
+++ b/util/cbfstool/Makefile.inc
@@ -38,8 +38,9 @@
cbfsobj += kv_pair.o
cbfsobj += valstr.o
# linux as payload
-cbfsobj += linux_trampoline.o
+cbfsobj += linux_trampoline_x86.o
cbfsobj += cbfs-payload-linux.o
+
# compression algorithms
cbfsobj += $(compressionobj)
@@ -83,6 +84,7 @@
TOOLCPPFLAGS += -DNEED_VB2_SHA_LIBRARY
TOOLCPPFLAGS += -I$(VBOOT_SOURCE)/firmware/include
TOOLCPPFLAGS += -I$(VBOOT_SOURCE)/firmware/2lib/include
+TOOLCPPFLAGS += -I$(top)/payloads/external/linux
# UEFI header file support. It's not pretty, but that's what we currently
# have right now.
TOOLCPPFLAGS += -I$(top)/src
@@ -101,6 +103,10 @@
TOOLCFLAGS+=-std=c99
endif
+$(objutil)/cbfstool/linux_trampoline_%.o: $(top)/payloads/external/linux/linux_trampoline_%.c
+ printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
+ $(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
+
$(objutil)/cbfstool/%.o: $(objutil)/cbfstool/%.c
printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
$(HOSTCC) $(TOOLCPPFLAGS) $(TOOLCFLAGS) $(HOSTCFLAGS) -c -o $@ $<
diff --git a/util/cbfstool/cbfs-payload-linux.c b/util/cbfstool/cbfs-payload-linux.c
index 6b4bf27..9646384 100644
--- a/util/cbfstool/cbfs-payload-linux.c
+++ b/util/cbfstool/cbfs-payload-linux.c
@@ -19,11 +19,7 @@
#include "common.h"
#include "cbfs.h"
-#include "linux.h"
-
-/* trampoline */
-extern unsigned char trampoline[];
-extern unsigned int trampoline_len;
+#include "bzimage_loader.h"
/*
* Current max number of segments include:
@@ -97,8 +93,8 @@
static int bzp_add_trampoline(struct bzpayload *bzp)
{
- bzp_add_segment(bzp, &bzp->trampoline, trampoline,
- trampoline_len);
+ bzp_add_segment(bzp, &bzp->trampoline, linux_trampoline_x86_bin,
+ linux_trampoline_x86_bin_len);
return 0;
}
--
To view, visit https://review.coreboot.org/23867
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1d8630554e9fd845840de88142e5115c0bf92842
Gerrit-Change-Number: 23867
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <patrick.rudolph at 9elements.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180226/ed25d996/attachment-0001.html>
More information about the coreboot-gerrit
mailing list