-
Notifications
You must be signed in to change notification settings - Fork 151
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests/read/macho: add testing for go Mach-O executables
This commit updates the submodule for the testfiles to include the Mach-O binaries produced by the Go compiler and then exercises the logic in the previous commits. The new testfiles commit is due to gimli-rs/object-testfiles#14.
- Loading branch information
Showing
3 changed files
with
51 additions
and
1 deletion.
There are no files selected for viewing
Submodule testfiles
updated
4 files
+ − | macho/go-aarch64 | |
+ − | macho/go-x86_64 | |
+13 −0 | macho/go.go | |
+4 −0 | macho/go.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#[cfg(feature = "std")] | ||
use object::{Object, ObjectSection as _}; | ||
|
||
// Test that we can read compressed sections in Mach-O files as produced | ||
// by the Go compiler. | ||
#[cfg(feature = "std")] | ||
#[test] | ||
fn test_go_macho() { | ||
let macho_testfiles = std::path::Path::new("testfiles/macho"); | ||
|
||
// Section names we expect to find, whether they should be | ||
// compressed, and the actual name of the section in the file. | ||
const EXPECTED: &[(&str, bool, &str)] = &[ | ||
(".debug_abbrev", true, "__zdebug_abbrev"), | ||
(".debug_gdb_scripts", false, "__debug_gdb_scri"), | ||
(".debug_ranges", true, "__zdebug_ranges"), | ||
("__data", false, "__data"), | ||
]; | ||
|
||
for file in &["go-aarch64", "go-x86_64"] { | ||
let path = macho_testfiles.join(file); | ||
let file = std::fs::File::open(path).unwrap(); | ||
let reader = object::read::ReadCache::new(file); | ||
let object = object::read::File::parse(&reader).unwrap(); | ||
for &(name, compressed, actual_name) in EXPECTED { | ||
let section = object.section_by_name(name).unwrap(); | ||
assert_eq!(section.name(), Ok(actual_name)); | ||
let compressed_file_range = section.compressed_file_range().unwrap(); | ||
let size = section.size(); | ||
if compressed { | ||
assert_eq!( | ||
compressed_file_range.format, | ||
object::CompressionFormat::Zlib | ||
); | ||
assert_eq!(compressed_file_range.compressed_size, size - 12); | ||
assert!( | ||
compressed_file_range.uncompressed_size > compressed_file_range.compressed_size, | ||
"decompressed size is greater than compressed size" | ||
); | ||
} else { | ||
assert_eq!( | ||
compressed_file_range.format, | ||
object::CompressionFormat::None | ||
); | ||
assert_eq!(compressed_file_range.compressed_size, size); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,3 +2,4 @@ | |
|
||
mod coff; | ||
mod elf; | ||
mod macho; |