mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 16:27:35 +00:00
LibELF: Name library maps with the full file path
This commit is contained in:
parent
2b7b7f2816
commit
89da0f2da5
4 changed files with 17 additions and 15 deletions
|
@ -84,9 +84,9 @@ static String get_library_name(String path)
|
|||
return LexicalPath::basename(move(path));
|
||||
}
|
||||
|
||||
static Result<NonnullRefPtr<DynamicLoader>, DlErrorMessage> map_library(String const& filename, int fd)
|
||||
static Result<NonnullRefPtr<DynamicLoader>, DlErrorMessage> map_library(String const& filename, int fd, String const& filepath)
|
||||
{
|
||||
auto result = ELF::DynamicLoader::try_create(fd, filename);
|
||||
auto result = ELF::DynamicLoader::try_create(fd, filename, filepath);
|
||||
if (result.is_error()) {
|
||||
return result;
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ static Result<NonnullRefPtr<DynamicLoader>, DlErrorMessage> map_library(String c
|
|||
int fd = open(name.characters(), O_RDONLY);
|
||||
if (fd < 0)
|
||||
return DlErrorMessage { String::formatted("Could not open shared library: {}", name) };
|
||||
return map_library(name, fd);
|
||||
return map_library(name, fd, name);
|
||||
}
|
||||
|
||||
auto resolved_library_name = resolve_library(name, parent_object);
|
||||
|
@ -147,7 +147,7 @@ static Result<NonnullRefPtr<DynamicLoader>, DlErrorMessage> map_library(String c
|
|||
if (fd < 0)
|
||||
return DlErrorMessage { String::formatted("Could not open resolved shared library '{}': {}", resolved_library_name.value(), strerror(errno)) };
|
||||
|
||||
return map_library(name, fd);
|
||||
return map_library(name, fd, resolved_library_name.value());
|
||||
}
|
||||
|
||||
static Vector<String> get_dependencies(String const& name)
|
||||
|
@ -559,7 +559,7 @@ void ELF::DynamicLinker::linker_main(String&& main_program_name, int main_progra
|
|||
|
||||
// NOTE: We always map the main library first, since it may require
|
||||
// placement at a specific address.
|
||||
auto result1 = map_library(main_program_name, main_program_fd);
|
||||
auto result1 = map_library(main_program_name, main_program_fd, main_program_name);
|
||||
if (result1.is_error()) {
|
||||
warnln("{}", result1.error().text);
|
||||
fflush(stderr);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue