use crate::tests::helpers;
use crate::*;
#[test]
fn mingw64_executes_tls_callbacks() {
helpers::setup();
let mut emu = emu64();
emu.cfg.maps_folder = helpers::win64_maps_folder();
let sample = sample!("exe64win_mingw.bin");
emu.load_code(&sample);
assert_eq!(
emu.tls_callbacks.len(),
2,
"mingw64 declares 2 TLS callbacks; got {:?}",
emu.tls_callbacks
);
for &cb in &emu.tls_callbacks {
assert!(
emu.maps.get_addr_name(cb).is_some(),
"TLS callback 0x{:x} should be a mapped address",
cb
);
}
emu.run_to(300).expect("mingw64 should run past CRT init");
assert!(emu.pos >= 300, "expected to reach pos 300, got {}", emu.pos);
}
#[test]
fn msgbox_has_no_tls_callbacks() {
helpers::setup();
let mut emu = emu64();
emu.cfg.maps_folder = helpers::win64_maps_folder();
let sample = sample!("exe64win_msgbox.bin");
emu.load_code(&sample);
assert!(
emu.tls_callbacks.is_empty(),
"msgbox has no TLS directory; callbacks must be empty (no garbage reads); got {:?}",
emu.tls_callbacks
);
}