Userland: Fix wrong signature of dladdr

This function is supposed to take a `const void *addr` as first
parameter, but we took a `void *addr`.

https://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/baselib-dladdr-3.html
This commit is contained in:
Fabian Dellwing 2023-05-03 11:49:31 +02:00 committed by Jelle Raaijmakers
parent 87e95ceb69
commit 36a26d7fa8
Notes: sideshowbarker 2024-07-17 10:10:18 +09:00
4 changed files with 5 additions and 5 deletions

View file

@ -30,7 +30,7 @@ typedef struct __Dl_info Dl_info;
typedef Result<void, DlErrorMessage> (*DlCloseFunction)(void*); typedef Result<void, DlErrorMessage> (*DlCloseFunction)(void*);
typedef Result<void*, DlErrorMessage> (*DlOpenFunction)(char const*, int); typedef Result<void*, DlErrorMessage> (*DlOpenFunction)(char const*, int);
typedef Result<void*, DlErrorMessage> (*DlSymFunction)(void*, char const*); typedef Result<void*, DlErrorMessage> (*DlSymFunction)(void*, char const*);
typedef Result<void, DlErrorMessage> (*DlAddrFunction)(void*, Dl_info*); typedef Result<void, DlErrorMessage> (*DlAddrFunction)(void const*, Dl_info*);
extern "C" { extern "C" {
extern DlCloseFunction __dlclose; extern DlCloseFunction __dlclose;

View file

@ -72,7 +72,7 @@ void* dlsym(void* handle, char const* symbol_name)
return result.value(); return result.value();
} }
int dladdr(void* addr, Dl_info* info) int dladdr(void const* addr, Dl_info* info)
{ {
auto result = __dladdr(addr, info); auto result = __dladdr(addr, info);
if (result.is_error()) { if (result.is_error()) {

View file

@ -27,6 +27,6 @@ int dlclose(void*);
char* dlerror(void); char* dlerror(void);
void* dlopen(char const*, int); void* dlopen(char const*, int);
void* dlsym(void*, char const*); void* dlsym(void*, char const*);
int dladdr(void*, Dl_info*); int dladdr(void const*, Dl_info*);
__END_DECLS __END_DECLS

View file

@ -64,7 +64,7 @@ static DeprecatedString s_loader_pledge_promises;
static Result<void, DlErrorMessage> __dlclose(void* handle); static Result<void, DlErrorMessage> __dlclose(void* handle);
static Result<void*, DlErrorMessage> __dlopen(char const* filename, int flags); static Result<void*, DlErrorMessage> __dlopen(char const* filename, int flags);
static Result<void*, DlErrorMessage> __dlsym(void* handle, char const* symbol_name); static Result<void*, DlErrorMessage> __dlsym(void* handle, char const* symbol_name);
static Result<void, DlErrorMessage> __dladdr(void* addr, Dl_info* info); static Result<void, DlErrorMessage> __dladdr(void const* addr, Dl_info* info);
Optional<DynamicObject::SymbolLookupResult> DynamicLinker::lookup_global_symbol(StringView name) Optional<DynamicObject::SymbolLookupResult> DynamicLinker::lookup_global_symbol(StringView name)
{ {
@ -552,7 +552,7 @@ static Result<void*, DlErrorMessage> __dlsym(void* handle, char const* symbol_na
return symbol.value().address.as_ptr(); return symbol.value().address.as_ptr();
} }
static Result<void, DlErrorMessage> __dladdr(void* addr, Dl_info* info) static Result<void, DlErrorMessage> __dladdr(void const* addr, Dl_info* info)
{ {
VirtualAddress user_addr { addr }; VirtualAddress user_addr { addr };
pthread_mutex_lock(&s_loader_lock); pthread_mutex_lock(&s_loader_lock);