diff --git a/data/ruby-coredump-3.3.0.gz b/data/ruby-coredump-3.3.0.gz index 72f95a6..6783b06 100644 Binary files a/data/ruby-coredump-3.3.0.gz and b/data/ruby-coredump-3.3.0.gz differ diff --git a/data/ruby-coredump-complex-3.4.5.gz b/data/ruby-coredump-complex-3.4.5.gz new file mode 100644 index 0000000..69ddcbd Binary files /dev/null and b/data/ruby-coredump-complex-3.4.5.gz differ diff --git a/src/lib.rs b/src/lib.rs index af02cff..6fc1a73 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -74,6 +74,10 @@ pub fn coredump_with_classes_3_3_0() -> CoreDump { load_coredump("ruby-coredump-with-classes-3.3.0.gz").unwrap() } +pub fn coredump_complex_3_4_5() -> CoreDump { + load_coredump("ruby-coredump-complex-3.4.5.gz").unwrap() +} + /// Allows testing offline with a core dump of a Ruby process. pub struct CoreDump { raw_memory: Vec, @@ -199,10 +203,13 @@ mod tests { ); let coredump = load_coredump("ruby-coredump-3.3.0.gz").unwrap(); - assert_eq!(coredump.elf_section_headers.len(), 122); + assert_eq!(coredump.elf_section_headers.len(), 151); let buf = &mut [0u8; 16]; - coredump.read(0x7f7ff21f1868, buf).expect("read failed"); - assert_eq!(buf, &[16, 3, 62, 88, 13, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + coredump.read(0x7f43435f4988, buf).expect("read failed"); + assert_eq!( + buf, + &[16, 51, 89, 134, 131, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + ); let coredump = load_coredump("ruby-coredump-with-classes-3.3.0.gz").unwrap(); assert_eq!(coredump.elf_section_headers.len(), 124); @@ -212,5 +219,14 @@ mod tests { buf, &[16, 115, 177, 241, 196, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ); + + let coredump = load_coredump("ruby-coredump-complex-3.4.5.gz").unwrap(); + assert_eq!(coredump.elf_section_headers.len(), 152); + let buf = &mut [0u8; 16]; + coredump.read(0x7f271feb5390, buf).expect("read failed"); + assert_eq!( + buf, + &[16, 19, 104, 91, 119, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + ); } }