11use crate :: { tests:: helpers, * } ;
2-
2+ use crate :: maps :: mem64 :: Permission ;
33// RUST_LOG=debug cargo test --target x86_64-apple-darwin --features log_mem_write memmove_non_overlapping_copy
44// RUST_LOG=debug cargo test --target x86_64-apple-darwin --features log_mem_write memmove_non_overlapping_copy
55
@@ -343,12 +343,12 @@ fn setup_memmove_emulator() -> (emu::Emu, u64, usize) {
343343 // Set up stack
344344 let stack_addr = 0x1000000 ;
345345 let stack_size = 0x10000 ;
346- emu. maps . create_map ( "stack" , stack_addr, stack_size) ;
346+ emu. maps . create_map ( "stack" , stack_addr, stack_size, Permission :: READ_WRITE ) ;
347347 emu. regs_mut ( ) . rsp = stack_addr + stack_size / 2 ;
348348
349349 // Load memmove code at address 0x400000
350350 let code_addr = 0x400000 ;
351- emu. maps . create_map ( "code" , code_addr, memmove_code_len as u64 + 0x100 ) ;
351+ emu. maps . create_map ( "code" , code_addr, memmove_code_len as u64 + 0x100 , Permission :: READ_WRITE_EXECUTE ) ;
352352 emu. maps . write_bytes ( code_addr, memmove_code) ;
353353
354354 ( emu, code_addr, memmove_code_len)
@@ -363,8 +363,8 @@ fn memmove_non_overlapping_copy() {
363363 let src_addr = 0x500000 ;
364364 let dest_addr = 0x600000 ;
365365
366- emu. maps . create_map ( "src" , src_addr, 0x1000 ) ;
367- emu. maps . create_map ( "dest" , dest_addr, 0x1000 ) ;
366+ emu. maps . create_map ( "src" , src_addr, 0x1000 , Permission :: READ_WRITE ) ;
367+ emu. maps . create_map ( "dest" , dest_addr, 0x1000 , Permission :: READ_WRITE ) ;
368368
369369 // Initialize source with pattern
370370 let test_pattern = b"Hello, World! This is a test pattern." ;
@@ -415,7 +415,7 @@ fn memmove_overlapping_forward() {
415415 let overlap_dest = 0x700010 ; // 16 bytes overlap
416416 let test_data: Vec < u8 > = ( 0 ..64 ) . collect ( ) ;
417417
418- emu. maps . create_map ( "overlap" , overlap_src, 0x100 ) ;
418+ emu. maps . create_map ( "overlap" , overlap_src, 0x100 , Permission :: READ_WRITE ) ;
419419 emu. maps . write_bytes ( overlap_src, test_data. clone ( ) ) ;
420420
421421 // Set up for overlapping copy
@@ -447,7 +447,7 @@ fn memmove_overlapping_backward() {
447447 let overlap_dest = 0x800000 ;
448448 let test_data: Vec < u8 > = ( 0 ..64 ) . collect ( ) ;
449449
450- emu. maps . create_map ( "overlap2" , 0x800000 , 0x100 ) ;
450+ emu. maps . create_map ( "overlap2" , 0x800000 , 0x100 , Permission :: READ_WRITE ) ;
451451 emu. maps . write_bytes ( overlap_src, test_data. clone ( ) ) ;
452452
453453 // Set up for backward overlapping copy
@@ -479,8 +479,8 @@ fn memmove_large_buffer() {
479479 let large_dest = 0xA00000 ;
480480 let large_size = 0x2000 ; // 8KB
481481
482- emu. maps . create_map ( "large_src" , large_src, large_size) ;
483- emu. maps . create_map ( "large_dest" , large_dest, large_size) ;
482+ emu. maps . create_map ( "large_src" , large_src, large_size, Permission :: READ_WRITE ) ;
483+ emu. maps . create_map ( "large_dest" , large_dest, large_size, Permission :: READ_WRITE ) ;
484484
485485 // Fill with pattern
486486 let mut pattern = Vec :: new ( ) ;
@@ -516,8 +516,8 @@ fn memmove_zero_length() {
516516 let src_addr = 0x500000 ;
517517 let dest_addr = 0x600000 ;
518518
519- emu. maps . create_map ( "src" , src_addr, 0x100 ) ;
520- emu. maps . create_map ( "dest" , dest_addr, 0x100 ) ;
519+ emu. maps . create_map ( "src" , src_addr, 0x100 , Permission :: READ_WRITE ) ;
520+ emu. maps . create_map ( "dest" , dest_addr, 0x100 , Permission :: READ_WRITE ) ;
521521
522522 emu. regs_mut ( ) . rdx = dest_addr;
523523 emu. regs_mut ( ) . rcx = src_addr;
@@ -546,8 +546,8 @@ fn memmove_unaligned_addresses() {
546546 let unaligned_dest = 0xC00007 ;
547547 let test_data = b"Unaligned test data" ;
548548
549- emu. maps . create_map ( "unaligned_src" , 0xB00000 , 0x100 ) ;
550- emu. maps . create_map ( "unaligned_dest" , 0xC00000 , 0x100 ) ;
549+ emu. maps . create_map ( "unaligned_src" , 0xB00000 , 0x100 , Permission :: READ_WRITE ) ;
550+ emu. maps . create_map ( "unaligned_dest" , 0xC00000 , 0x100 , Permission :: READ_WRITE ) ;
551551 emu. maps . write_bytes ( unaligned_src, test_data. to_vec ( ) ) ;
552552
553553 emu. regs_mut ( ) . rdx = unaligned_dest;
@@ -577,8 +577,8 @@ fn memmove_exact_page_boundary() {
577577 let page_boundary = 0xD00000 ;
578578 let test_size = 0x1000 ; // Exactly one page
579579
580- emu. maps . create_map ( "page1" , page_boundary - 0x800 , 0x1000 ) ;
581- emu. maps . create_map ( "page2" , page_boundary + 0x800 , 0x1000 ) ;
580+ emu. maps . create_map ( "page1" , page_boundary - 0x800 , 0x1000 , Permission :: READ_WRITE ) ;
581+ emu. maps . create_map ( "page2" , page_boundary + 0x800 , 0x1000 , Permission :: READ_WRITE ) ;
582582
583583 // Create pattern that crosses page boundary
584584 let pattern: Vec < u8 > = ( 0 ..test_size) . map ( |i| ( i % 256 ) as u8 ) . collect ( ) ;
@@ -611,8 +611,8 @@ fn memmove_alignment_boundary_sizes() {
611611 let src_base = 0x1000000 + ( i * 0x10000 ) as u64 ;
612612 let dest_base = src_base + 0x8000 ;
613613
614- emu. maps . create_map ( & format ! ( "test_src_{}" , i) , src_base, 0x1000 ) ;
615- emu. maps . create_map ( & format ! ( "test_dest_{}" , i) , dest_base, 0x1000 ) ;
614+ emu. maps . create_map ( & format ! ( "test_src_{}" , i) , src_base, 0x1000 , Permission :: READ_WRITE ) ;
615+ emu. maps . create_map ( & format ! ( "test_dest_{}" , i) , dest_base, 0x1000 , Permission :: READ_WRITE ) ;
616616
617617 let pattern: Vec < u8 > = ( 0 ..size) . map ( |j| ( ( i + j) % 256 ) as u8 ) . collect ( ) ;
618618 emu. maps . write_bytes ( src_base, pattern. clone ( ) ) ;
@@ -645,7 +645,7 @@ fn memmove_stress_overlapping_patterns() {
645645 let base_addr = 0x2000000 ;
646646 let buffer_size = 0x1000 ;
647647
648- emu. maps . create_map ( "stress_buffer" , base_addr, buffer_size * 2 ) ;
648+ emu. maps . create_map ( "stress_buffer" , base_addr, buffer_size * 2 , Permission :: READ_WRITE ) ;
649649
650650 // Initialize with a recognizable pattern
651651 let original_pattern: Vec < u8 > = ( 0 ..buffer_size)
@@ -694,8 +694,8 @@ fn memmove_performance_threshold_boundary() {
694694 let src_addr = 0x3000000 + ( i * 0x100000 ) as u64 ;
695695 let dest_addr = src_addr + 0x80000 ;
696696
697- emu. maps . create_map ( & format ! ( "perf_src_{}" , i) , src_addr, size + 0x1000 ) ;
698- emu. maps . create_map ( & format ! ( "perf_dest_{}" , i) , dest_addr, size + 0x1000 ) ;
697+ emu. maps . create_map ( & format ! ( "perf_src_{}" , i) , src_addr, size + 0x1000 , Permission :: READ_WRITE ) ;
698+ emu. maps . create_map ( & format ! ( "perf_dest_{}" , i) , dest_addr, size + 0x1000 , Permission :: READ_WRITE ) ;
699699
700700 // Create a pattern that's easy to verify
701701 let mut pattern = Vec :: with_capacity ( size as usize ) ;
0 commit comments