diff --git a/crates/brioche-autopack/src/lib.rs b/crates/brioche-autopack/src/lib.rs index 38e6d80..d1c0fcd 100644 --- a/crates/brioche-autopack/src/lib.rs +++ b/crates/brioche-autopack/src/lib.rs @@ -439,13 +439,16 @@ fn autopack_kind(path: &Path) -> eyre::Result> { return Ok(None); }; - // Only ET_EXEC and ET_DYN can potentially be packed + // Only ET_EXEC and ET_DYN can potentially be packed. + // Check if it's a library first. A shared library can + // have an interpreter section and it should be packed + // as SharedLibrary, not DynamicBinary. match elf_object.header.e_type { goblin::elf::header::ET_EXEC | goblin::elf::header::ET_DYN => { - if elf_object.interpreter.is_some() { - Ok(Some(AutopackKind::DynamicBinary)) - } else if elf_object.is_lib { + if elf_object.is_lib { Ok(Some(AutopackKind::SharedLibrary)) + } else if elf_object.interpreter.is_some() { + Ok(Some(AutopackKind::DynamicBinary)) } else { Ok(None) }