[Vm-dev] VM Maker: VMMaker.oscog-eem.3204.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jun 30 20:57:57 UTC 2022


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]!



More information about the Vm-dev mailing list