aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorImre Kis <imre.kis@arm.com>2022-04-22 16:42:30 +0200
committerImre Kis <imre.kis@arm.com>2022-04-27 17:20:37 +0200
commit5b243c80bdfaecb8d2f515bf2e8cb0ba0073a2a6 (patch)
tree87756259aaf38a63b6fdd7900bf7cebede28731e
parent470aece7f2a5033449e86ee1b41f36ad9c7dc041 (diff)
downloadoptee_os-5b243c80bdfaecb8d2f515bf2e8cb0ba0073a2a6.tar.gz
Forward load address to user_ta_ctx
Forward the load address of a TA/SP from ldelf to the user_ta_ctx structure to allow OP-TEE core to access it. Signed-off-by: Imre Kis <imre.kis@arm.com> Change-Id: I0e3e0ca421c72e6e335a4ac189b8c9c00ab1bb84
-rw-r--r--core/arch/arm/include/kernel/user_ta.h3
-rw-r--r--core/arch/arm/kernel/user_ta.c2
-rw-r--r--ldelf/include/ldelf.h2
-rw-r--r--ldelf/main.c3
-rw-r--r--ldelf/ta_elf.c5
-rw-r--r--ldelf/ta_elf.h3
6 files changed, 14 insertions, 4 deletions
diff --git a/core/arch/arm/include/kernel/user_ta.h b/core/arch/arm/include/kernel/user_ta.h
index e27285ab3..97a6df0e2 100644
--- a/core/arch/arm/include/kernel/user_ta.h
+++ b/core/arch/arm/include/kernel/user_ta.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2015, Linaro Limited
- * Copyright (c) 2020, Arm Limited
+ * Copyright (c) 2020-2022, Arm Limited
*/
#ifndef KERNEL_USER_TA_H
#define KERNEL_USER_TA_H
@@ -52,6 +52,7 @@ struct user_ta_ctx {
#endif
uaddr_t dl_entry_func;
uaddr_t ldelf_stack_ptr;
+ uaddr_t load_addr;
bool is_32bit;
bool is_initializing;
struct tee_ta_session_head open_sessions;
diff --git a/core/arch/arm/kernel/user_ta.c b/core/arch/arm/kernel/user_ta.c
index ac40cd28a..95c13a389 100644
--- a/core/arch/arm/kernel/user_ta.c
+++ b/core/arch/arm/kernel/user_ta.c
@@ -2,6 +2,7 @@
/*
* Copyright (c) 2014, STMicroelectronics International N.V.
* Copyright (c) 2015-2017 Linaro Limited
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
*/
#include <assert.h>
@@ -258,6 +259,7 @@ TEE_Result init_with_ldelf(struct tee_ta_session *sess,
sess->fbuf = arg->fbuf;
#endif
utc->dl_entry_func = arg->dl_entry;
+ utc->load_addr = arg->load_addr;
out:
s = tee_ta_pop_current_session();
diff --git a/ldelf/include/ldelf.h b/ldelf/include/ldelf.h
index d43d7445f..1f9c4be87 100644
--- a/ldelf/include/ldelf.h
+++ b/ldelf/include/ldelf.h
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
*/
#ifndef __LDELF_H
@@ -34,6 +35,7 @@ struct ldelf_arg {
uint64_t dump_entry;
uint64_t ftrace_entry;
uint64_t dl_entry;
+ uint64_t load_addr;
struct ftrace_buf *fbuf;
};
diff --git a/ldelf/main.c b/ldelf/main.c
index 127649fab..1322c9336 100644
--- a/ldelf/main.c
+++ b/ldelf/main.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
*/
#include <assert.h>
@@ -156,7 +157,7 @@ void ldelf(struct ldelf_arg *arg)
ta_elf_finalize_mappings(elf);
}
- ta_elf_finalize_load_main(&arg->entry_func);
+ ta_elf_finalize_load_main(&arg->entry_func, &arg->load_addr);
arg->ftrace_entry = 0;
#ifdef CFG_FTRACE_SUPPORT
diff --git a/ldelf/ta_elf.c b/ldelf/ta_elf.c
index 66801a613..51f811094 100644
--- a/ldelf/ta_elf.c
+++ b/ldelf/ta_elf.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
*/
#include <assert.h>
@@ -1138,7 +1139,7 @@ void ta_elf_load_main(const TEE_UUID *uuid, uint32_t *is_32bit, uint64_t *sp,
ta_stack_size = elf->head->stack_size;
}
-void ta_elf_finalize_load_main(uint64_t *entry)
+void ta_elf_finalize_load_main(uint64_t *entry, uint64_t *load_addr)
{
struct ta_elf *elf = TAILQ_FIRST(&main_elf_queue);
TEE_Result res = TEE_SUCCESS;
@@ -1156,6 +1157,8 @@ void ta_elf_finalize_load_main(uint64_t *entry)
*entry = elf->head->depr_entry;
else
*entry = elf->e_entry + elf->load_addr;
+
+ *load_addr = elf->load_addr;
}
diff --git a/ldelf/ta_elf.h b/ldelf/ta_elf.h
index 853b21d48..df31fe2fc 100644
--- a/ldelf/ta_elf.h
+++ b/ldelf/ta_elf.h
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2019, Linaro Limited
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
*/
#ifndef TA_ELF_H
@@ -97,7 +98,7 @@ struct ta_elf *ta_elf_find_elf(const TEE_UUID *uuid);
void ta_elf_load_main(const TEE_UUID *uuid, uint32_t *is_32bit, uint64_t *sp,
uint32_t *ta_flags);
-void ta_elf_finalize_load_main(uint64_t *entry);
+void ta_elf_finalize_load_main(uint64_t *entry, uint64_t *load_addr);
void ta_elf_load_dependency(struct ta_elf *elf, bool is_32bit);
void ta_elf_relocate(struct ta_elf *elf);
void ta_elf_finalize_mappings(struct ta_elf *elf);