blob: a5c52c90008e23bf9dc6bb1664fdbc8f1db89995 [file] [log] [blame]
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (c) 2019, Linaro Limited
*/
#include <ldelf.h>
#include <string.h>
#include "dl.h"
#include "ta_elf.h"
TEE_Result dlopen_entry(struct dl_entry_arg *arg)
{
TEE_UUID zero = { };
if (arg->dlopen.flags != (RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE))
return TEE_ERROR_BAD_PARAMETERS;
if (!memcmp(&arg->dlopen.uuid, &zero, sizeof(zero)))
return TEE_SUCCESS;
return ta_elf_add_library(&arg->dlopen.uuid);
}
TEE_Result dlsym_entry(struct dl_entry_arg *arg)
{
struct ta_elf *elf = NULL;
TEE_UUID zero = { };
if (memcmp(&arg->dlsym.uuid, &zero, sizeof(zero))) {
elf = ta_elf_find_elf(&arg->dlsym.uuid);
if (!elf)
return TEE_ERROR_ITEM_NOT_FOUND;
}
return ta_elf_resolve_sym(arg->dlsym.symbol, &arg->dlsym.val, elf);
}