/* * Copyright (c) 2021, Gunnar Beutner * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include struct DlErrorMessage { DlErrorMessage(String&& other) : text(move(other)) { } // The virtual destructor is required because we're passing this // struct to the dynamic loader - whose operator delete differs // from the one in libc.so virtual ~DlErrorMessage() { } String text; }; struct __Dl_info; typedef struct __Dl_info Dl_info; typedef Result (*DlCloseFunction)(void*); typedef Result (*DlOpenFunction)(const char*, int); typedef Result (*DlSymFunction)(void*, const char*); typedef Result (*DlAddrFunction)(void*, Dl_info*); extern "C" { extern DlCloseFunction __dlclose; extern DlOpenFunction __dlopen; extern DlSymFunction __dlsym; extern DlAddrFunction __dladdr; }