// 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);
}

