Julius Werner has submitted this change. ( https://review.coreboot.org/c/coreboot/+/86142?usp=email )
Change subject: libpayload: Unify selfboot() implementations ......................................................................
libpayload: Unify selfboot() implementations
selfboot() doesn't really need to be architecture dependent. All architectures are essentially doing the same thing with a normal function call, only x86_32 needs an extra attribute. arm64 and x86 also previously haven't been passing the coreboot table pointer, even though they should. This patch fixes that.
Change-Id: If14040e38d968b5eea31cd6cd25efb1845a7b081 Signed-off-by: Julius Werner jwerner@chromium.org Reviewed-on: https://review.coreboot.org/c/coreboot/+/86142 Reviewed-by: Yu-Ping Wu yupingso@google.com Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M payloads/libpayload/arch/arm/Makefile.mk M payloads/libpayload/arch/arm64/Makefile.mk D payloads/libpayload/arch/arm64/selfboot.c M payloads/libpayload/arch/x86/Makefile.mk D payloads/libpayload/arch/x86/selfboot.c M payloads/libpayload/libc/Makefile.mk R payloads/libpayload/libc/selfboot.c 7 files changed, 8 insertions(+), 78 deletions(-)
Approvals: Yu-Ping Wu: Looks good to me, approved build bot (Jenkins): Verified
diff --git a/payloads/libpayload/arch/arm/Makefile.mk b/payloads/libpayload/arch/arm/Makefile.mk index 47c271b..3308135 100644 --- a/payloads/libpayload/arch/arm/Makefile.mk +++ b/payloads/libpayload/arch/arm/Makefile.mk @@ -39,7 +39,6 @@ libc-y += virtual.c libc-y += exception_asm.S exception.c libc-y += cache.c cpu.S -libc-y += selfboot.c
# Will fall back to default_memXXX() in libc/memory.c if GPL not allowed. libc-$(CONFIG_LP_GPL) += memcpy.S memset.S memmove.S diff --git a/payloads/libpayload/arch/arm64/Makefile.mk b/payloads/libpayload/arch/arm64/Makefile.mk index d6cc51e..a4fda1d 100644 --- a/payloads/libpayload/arch/arm64/Makefile.mk +++ b/payloads/libpayload/arch/arm64/Makefile.mk @@ -36,7 +36,6 @@ libc-y += memcpy.S memset.S memmove.S libc-y += exception_asm.S exception.c libc-y += cache.c cpu.S -libc-y += selfboot.c libc-y += mmu.c
libgdb-y += gdb.c diff --git a/payloads/libpayload/arch/arm64/selfboot.c b/payloads/libpayload/arch/arm64/selfboot.c deleted file mode 100644 index 5c3e445..0000000 --- a/payloads/libpayload/arch/arm64/selfboot.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2014 Google Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <libpayload.h> - -void selfboot(void *entry) -{ - void (*entry_func)(void) = entry; - entry_func(); -} diff --git a/payloads/libpayload/arch/x86/Makefile.mk b/payloads/libpayload/arch/x86/Makefile.mk index 35e69cb..b2aaacc 100644 --- a/payloads/libpayload/arch/x86/Makefile.mk +++ b/payloads/libpayload/arch/x86/Makefile.mk @@ -40,7 +40,7 @@ libc-y += main.c sysinfo.c libc-y += timer.c coreboot.c util.S libc-y += virtual.c -libc-y += selfboot.c cache.c +libc-y += cache.c libc-y += exception.c libc-y += delay.c libc-$(CONFIG_LP_ARCH_X86_32) += exec.c diff --git a/payloads/libpayload/arch/x86/selfboot.c b/payloads/libpayload/arch/x86/selfboot.c deleted file mode 100644 index 5c3e445..0000000 --- a/payloads/libpayload/arch/x86/selfboot.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2014 Google Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <libpayload.h> - -void selfboot(void *entry) -{ - void (*entry_func)(void) = entry; - entry_func(); -} diff --git a/payloads/libpayload/libc/Makefile.mk b/payloads/libpayload/libc/Makefile.mk index 3d070eb..063118a 100644 --- a/payloads/libpayload/libc/Makefile.mk +++ b/payloads/libpayload/libc/Makefile.mk @@ -38,6 +38,7 @@ libc-$(CONFIG_LP_LIBC) += coreboot.c libc-$(CONFIG_LP_LIBC) += fmap.c libc-$(CONFIG_LP_LIBC) += fpmath.c +libc-$(CONFIG_LP_LIBC) += selfboot.c
ifeq ($(CONFIG_LP_VBOOT_LIB),y) libc-$(CONFIG_LP_LIBC) += lp_vboot.c diff --git a/payloads/libpayload/arch/arm/selfboot.c b/payloads/libpayload/libc/selfboot.c similarity index 89% rename from payloads/libpayload/arch/arm/selfboot.c rename to payloads/libpayload/libc/selfboot.c index 70cc79e..3e226b4 100644 --- a/payloads/libpayload/arch/arm/selfboot.c +++ b/payloads/libpayload/libc/selfboot.c @@ -1,5 +1,5 @@ /* - * Copyright 2014 Google Inc. + * Copyright 2025 Google LLC * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,10 +31,9 @@
void selfboot(void *entry) { - __asm__ __volatile__( - "mov r0, %[cb_header_ptr]\n" - "bx %[entry]\n" - :: [cb_header_ptr]"r"(cb_header_ptr), [entry]"r"(entry) - : "r0" - ); +#if CONFIG(LP_ARCH_X86_32) + __attribute__((__regparm__(0))) +#endif + void (*entry_func)(void *arg) = entry; + entry_func(cb_header_ptr); }