From ea7868016d1af38884a46a92dd70a1c254eee604 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Fri, 3 Jan 2020 19:59:42 +0000 Subject: [PATCH] mips: csu: fix compilation w/ LLVM GCC issues the warning, but with LLVM it is fatal- no matching .cprestore with .cpload. Reserve some place on the stack and and add the proper .cprestore to pair it with. nop added in the !o32 branch to fill out delay slot instruction, just in case. Reviewed by: arichardson Differential Revision: https://reviews.freebsd.org/D21697 --- lib/csu/mips/crt.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/csu/mips/crt.h b/lib/csu/mips/crt.h index 1d967b73ffe4..4dac617c239f 100644 --- a/lib/csu/mips/crt.h +++ b/lib/csu/mips/crt.h @@ -34,10 +34,14 @@ "bal 1f \n" \ "nop \n" \ "1: \n" \ - ".cpload $ra \n" \ + ".cpload $ra \n" \ + "addu $sp, $sp, -8 \n" \ ".set reorder \n" \ + ".cprestore 4 \n" \ ".local " __STRING(func) "\n" \ - "jal " __STRING(func) + "jal " __STRING(func) "\n" \ + "nop \n" \ + "addu $sp, $sp, 8 \n" #else #define INIT_CALL_SEQ(func) \ ".set noreorder \n" \ @@ -48,6 +52,7 @@ ".cpsetup $ra, $v0, 1b \n" \ ".local " __STRING(func) "\n" \ "jal " __STRING(func) + "nop \n" \ #endif #endif