Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3204.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.3204 Author: eem Time: 30 June 2022, 1:57:44.171763 pm UUID: 1462ee1d-3247-4917-b6b6-a7c90517dd20 Ancestors: VMMaker.oscog-eem.3203
ARMv8 Cogit. The + 1 in CogARMv8Compiler>>#flushICacheFrom:to: is erroneous cuz the endAddress is always past the last address needing flushing. We're seeing occasional segfaults from sys_icache_invalidate on M1 macs; the plus one looks like the cause.
=============== Diff against VMMaker.oscog-eem.3203 ===============
Item was changed: ----- Method: CogARMv8Compiler>>flushICacheFrom:to: (in category 'inline cacheing') ----- flushICacheFrom: startAddress "<Integer>" to: endAddress "<Integer>" "Flush the instruction cache from (startAddress to endAddress].
If there is a dual mapped code zone (the normal zone but marked with read/execute, and a read/write zone codeToDataDelta bytes away) then also flush the data cache for the corresp- onding range in the read/write zone and invalidate the data cache for the read/execute zone.
If using the Apple MAP_JIT/pthread_jit_write_protect_np: also flush the data cache. Use Apple's implementations for both; they are simple and effective." <inline: #always> cogit ensureExecutableCodeZone. self cCode: [self cppIf: #__APPLE__ & #__MACH__ + ifTrue: [cogit sys_dcache_flush: (self cCoerce: startAddress to: #'void *') _: endAddress - startAddress; + sys_icache_invalidate: (self cCoerce: startAddress to: #'void *') _: endAddress - startAddress] - ifTrue: [cogit sys_dcache_flush: (self cCoerce: startAddress to: #'void *') _: endAddress - startAddress + 1; - sys_icache_invalidate: (self cCoerce: startAddress to: #'void *') _: endAddress - startAddress + 1] ifFalse: [cogit ceFlushICache: startAddress _: endAddress]] inSmalltalk: [cogit simulateCeFlushICacheFrom: startAddress to: endAddress]!
vm-dev@lists.squeakfoundation.org