From abdfd3d0ac566675352da90dfdfb36c8628cb866 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Wed, 29 Oct 2025 15:46:35 +0700 Subject: [PATCH] Fix ld_so multiple objects loading the same object --- src/ld_so/linker.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs index aaed9163f0..5c066358bd 100644 --- a/src/ld_so/linker.rs +++ b/src/ld_so/linker.rs @@ -758,10 +758,26 @@ impl Linker { ) -> Result> { // fixme: double lookup slow if let Some(id) = self.name_to_object_id_map.get(name) { - if let Some(obj) = self.objects.get_mut(id) { + if let Some(obj) = self.objects.get(id) { + if let Some(scope) = dependent_scope { + match scope_kind { + ScopeKind::Local => scope.add(obj), + ScopeKind::Global => GLOBAL_SCOPE.write().add(obj), + } + } else if scope_kind == ScopeKind::Global { + GLOBAL_SCOPE.write().add(obj); + } return Ok(obj.clone()); } - } else if let Some(obj) = new_objects.iter_mut().find(|o| o.name == name) { + } else if let Some(obj) = new_objects.iter().find(|o| o.name == name) { + if let Some(scope) = dependent_scope { + match scope_kind { + ScopeKind::Local => scope.add(obj), + ScopeKind::Global => GLOBAL_SCOPE.write().add(obj), + } + } else if scope_kind == ScopeKind::Global { + GLOBAL_SCOPE.write().add(obj); + } return Ok(obj.clone()); }