Browse Source

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
Fabian Dellwing 2 years ago
parent
commit
36a26d7fa8

+ 1 - 1
Userland/Libraries/LibC/bits/dlfcn_integration.h

@@ -30,7 +30,7 @@ typedef struct __Dl_info Dl_info;
 typedef Result<void, DlErrorMessage> (*DlCloseFunction)(void*);
 typedef Result<void*, DlErrorMessage> (*DlOpenFunction)(char const*, int);
 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 DlCloseFunction __dlclose;

+ 1 - 1
Userland/Libraries/LibC/dlfcn.cpp

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

+ 1 - 1
Userland/Libraries/LibC/dlfcn.h

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

+ 2 - 2
Userland/Libraries/LibELF/DynamicLinker.cpp

@@ -64,7 +64,7 @@ static DeprecatedString s_loader_pledge_promises;
 static Result<void, DlErrorMessage> __dlclose(void* handle);
 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> __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)
 {
@@ -552,7 +552,7 @@ static Result<void*, DlErrorMessage> __dlsym(void* handle, char const* symbol_na
     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 };
     pthread_mutex_lock(&s_loader_lock);