diff options
author | Imre Kis <imre.kis@arm.com> | 2022-04-22 16:42:30 +0200 |
---|---|---|
committer | Imre Kis <imre.kis@arm.com> | 2022-04-27 17:20:37 +0200 |
commit | 5b243c80bdfaecb8d2f515bf2e8cb0ba0073a2a6 (patch) | |
tree | 87756259aaf38a63b6fdd7900bf7cebede28731e | |
parent | 470aece7f2a5033449e86ee1b41f36ad9c7dc041 (diff) | |
download | optee_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.h | 3 | ||||
-rw-r--r-- | core/arch/arm/kernel/user_ta.c | 2 | ||||
-rw-r--r-- | ldelf/include/ldelf.h | 2 | ||||
-rw-r--r-- | ldelf/main.c | 3 | ||||
-rw-r--r-- | ldelf/ta_elf.c | 5 | ||||
-rw-r--r-- | ldelf/ta_elf.h | 3 |
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); |