summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhang Nguyen <khang.nguyen.xw@renesas.com>2019-06-20 11:18:42 +0700
committerDuy Dang <duy.dang.yw@renesas.com>2019-09-23 11:17:01 +0700
commit2b6ce4eac8ae826fe3a0a2d2639b8a5ae6293903 (patch)
treec5cb4001acf7f94c2a0eb82b947c6889ff712a52
parenta5d400c1ba93c189d761a779a44e2200f273c336 (diff)
rcar-gen3: optee-os: Apply fix patch for compile error
This commit applies fix patch for the following error: | #define SYSCALL_ENTRY(_fn) { .fn = (syscall_t)_fn } | ^ | core/arch/arm/tee/arch_svc.c:128:2: note: in expansion of macro 'SYSCALL_ENTRY' | SYSCALL_ENTRY(syscall_rcar_asset_unpack), | ^~~~~~~~~~~~~ | CC out/arm-plat-rcar/core/arch/arm/tee/cache.o | cc1: all warnings being treated as errors Signed-off-by: Khang Nguyen <khang.nguyen.xw@renesas.com> Signed-off-by: Takamitsu Honda <takamitsu.honda.pv@renesas.com> Change-Id: Ia5f1a6825cd63d745263c746b3dba5b6156f6b02
-rw-r--r--meta-rcar-gen3/recipes-bsp/optee/optee-os/0001-core-define-syscall_t-as-void-void.patch75
-rw-r--r--meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bb4
2 files changed, 79 insertions, 0 deletions
diff --git a/meta-rcar-gen3/recipes-bsp/optee/optee-os/0001-core-define-syscall_t-as-void-void.patch b/meta-rcar-gen3/recipes-bsp/optee/optee-os/0001-core-define-syscall_t-as-void-void.patch
new file mode 100644
index 0000000..bad7b27
--- /dev/null
+++ b/meta-rcar-gen3/recipes-bsp/optee/optee-os/0001-core-define-syscall_t-as-void-void.patch
@@ -0,0 +1,75 @@
+From f6d17e33e7b95c90a2521cfd37cd5cb511909fc4 Mon Sep 17 00:00:00 2001
+From: Jerome Forissier <jerome.forissier@linaro.org>
+Date: Thu, 5 Jul 2018 13:07:52 +0200
+Subject: [PATCH] core: define syscall_t as void (*)(void)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+syscall_t is currently typedef'ed as TEE_Result (*)(void). It is used to
+represent a pointer to any system call, in the syscall table for instance.
+As such, the exact type behind syscall_t cannot reflect all the syscalls
+since they have different prototypes. The current declaration with a
+TEE_Result return type was probably chosen because it was a common
+characteristic of all syscalls to return a TEE_Result.
+
+However, this type causes compilation warnings with GCC 8.1:
+
+core/arch/arm/tee/arch_svc.c:43:36: warning: cast between incompatible function types from ‘void (*)(long unsigned int)’ to ‘TEE_Result (*)(void)’ {aka ‘unsigned int (*)(void)’} [-Wcast-function-type]
+ #define SYSCALL_ENTRY(_fn) { .fn = (syscall_t)_fn }
+ ^
+core/arch/arm/tee/arch_svc.c:50:2: note: in expansion of macro ‘SYSCALL_ENTRY’
+ SYSCALL_ENTRY(syscall_sys_return),
+ ^~~~~~~~~~~~~
+
+The solution is to use 'void (*)(void)' instead, as explained in the GCC
+documentation:
+
+ -Wcast-function-type
+
+ Warn when a function pointer is cast to an incompatible function
+ pointer. [...] The function type void (*) (void) is special and matches
+ everything, which can be used to suppress this warning. [...]
+
+Link: [1] https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
+Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
+Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
+---
+ core/arch/arm/tee/arch_svc.c | 2 +-
+ core/arch/arm/tee/arch_svc_private.h | 7 +++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/core/arch/arm/tee/arch_svc.c b/core/arch/arm/tee/arch_svc.c
+index eb142ec..b2dd193 100644
+--- a/core/arch/arm/tee/arch_svc.c
++++ b/core/arch/arm/tee/arch_svc.c
+@@ -208,7 +208,7 @@ void __weak tee_svc_handler(struct thread_svc_regs *regs)
+ }
+
+ if (scn > TEE_SCN_MAX)
+- scf = syscall_not_supported;
++ scf = (syscall_t)syscall_not_supported;
+ else
+ scf = tee_svc_syscall_table[scn].fn;
+
+diff --git a/core/arch/arm/tee/arch_svc_private.h b/core/arch/arm/tee/arch_svc_private.h
+index c0b3a73..695e733 100644
+--- a/core/arch/arm/tee/arch_svc_private.h
++++ b/core/arch/arm/tee/arch_svc_private.h
+@@ -7,8 +7,11 @@
+
+ #include <tee_api_types.h>
+
+-/* void argument but in reality it can be any number of arguments */
+-typedef TEE_Result (*syscall_t)(void);
++/*
++ * Generic "pointer to function" type. Actual syscalls take zero or more
++ * arguments and return TEE_Result.
++ */
++typedef void (*syscall_t)(void);
+
+ /* Helper function for tee_svc_handler() */
+ uint32_t tee_svc_do_call(struct thread_svc_regs *regs, syscall_t func);
+--
+2.7.4
+
diff --git a/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bb b/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bb
index 17089f9..5f69c7d 100644
--- a/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bb
+++ b/meta-rcar-gen3/recipes-bsp/optee/optee-os_git.bb
@@ -22,6 +22,10 @@ SRC_URI = " \
git://github.com/OP-TEE/optee_os.git;branch=master;name=officialgit;destsuffix=git_official \
"
+SRC_URI_append = " \
+ file://0001-core-define-syscall_t-as-void-void.patch \
+"
+
COMPATIBLE_MACHINE = "(salvator-x|h3ulcb|m3ulcb|m3nulcb|ebisu)"
PLATFORM = "rcar"