Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running a script crashes the VM #11420

Open
akgrant43 opened this issue Jun 29, 2022 · 3 comments
Open

Running a script crashes the VM #11420

akgrant43 opened this issue Jun 29, 2022 · 3 comments

Comments

@akgrant43
Copy link
Collaborator

Bug description
Running the script below with:

./pharo Pharo.image --headless st a.st

crashes the VM with a segmentation fault.

To Reproduce
Steps to reproduce the behavior:

  1. create a.st:
| count |

Stdio stdout
	<< 'Starting...';
	lf; flush.
count := 0.
1 to: 1000 do:
[ :i |
	[ ExternalAddress null fromCString.
	Stdio stdout 
		print: i;
		<< ': ';
		print: count;
		lf; flush. ]
	on: PrimitiveFailed
	do: [ :ex | count := count + 1 ] ].
Stdio stdout
	<< 'Completed with count: ';
	print: count;
	lf.
  1. run the script:
./pharo Pharo.image --headless st a.st

produces:

 ./pharo Pharo.image --headless st a.st
Starting...

Segmentation fault Wed Jun 29 09:11:50 2022


/home/alistair/pharo/Pharo11-001/pharo-vm/lib/pharo
PharoVM version:5.0-Pharo 9.0.15 built on Jun 10 2022 15:52:10 Compiler: 5.4.0 20160609 5.4.0 20160609 [Production Spur 64-bit VM]
Built from: CoInterpreter * VMMaker-tonel.1 uuid: aa6234f4-799d-0d00-90d1-c90e092bce84 Jun 10 2022
 With:StackToRegisterMappingCogit * VMMaker-tonel.1 uuid: aa6234f4-799d-0d00-90d1-c90e092bce84 Jun 10 2022
 Revision: v9.0.15 - Commit: b487900 - Date: 2022-06-02 09:48:57 +0200

C stack backtrace & registers:
	rax 0x00000000 rbx 0x7f68fccae2d8 rcx 0x00000e9d rdx 0x1772ad48
	rdi 0x00000001 rsi 0x00000001 rbp 0x7ffdc2d81280 rsp 0x7ffdc2d81260
	r8  0x16816330 r9  0x17e5fc00 r10 0x7f68fcca5d00 r11 0x7ffdc2d80f60
	r12 0x16817ca9 r13 0x7ffdc2d80f60 r14 0x00000009 r15 0x1772ad58
	rip 0x1681646d
*[0x1681646d]
/home/alistair/pharo/Pharo11-001/pharo-vm/lib/libPharoVMCore.so(+0xc41ec)[0x7f68fca641ec]
/home/alistair/pharo/Pharo11-001/pharo-vm/lib/libPharoVMCore.so(doReport+0xb5)[0x7f68fca644d5]
/home/alistair/pharo/Pharo11-001/pharo-vm/lib/libPharoVMCore.so(sigsegv+0x14)[0x7f68fca64544]
/lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f68fc7f1090]
[0x1681646d]
[0xffffffffffffffff]


All Smalltalk process stacks (active first):
Process         0x175046e0 priority 40
    0x7ffdc2d81280 M ExternalAddress>unsignedByteAt: 0x1772ad48: a(n) ExternalAddress
    0x7ffdc2d812c0 M [] in ExternalAddress>fromCString 0x1772ad48: a(n) ExternalAddress
    0x7ffdc2d81300 M ByteArray class(SequenceableCollection class)>new:streamContents: 0x17e745e8: a(n) ByteArray class
    0x7ffdc2d81340 M ByteArray class(SequenceableCollection class)>streamContents: 0x17e745e8: a(n) ByteArray class
    0x7ffdc2d81380 M ExternalAddress>fromCString 0x1772ad48: a(n) ExternalAddress
    0x7ffdc2d813c0 M [] in UndefinedObject>DoIt 0x17e5fc00: a(n) UndefinedObject
    0x7ffdc2d813f0 M FullBlockClosure(BlockClosure)>on:do: 0x1772ace0: a(n) FullBlockClosure
    0x7ffdc2d81440 M UndefinedObject>DoIt 0x17e5fc00: a(n) UndefinedObject
    0x7ffdc2d81480 I OCReceiverDoItSemanticScope(OCDoItSemanticScope)>evaluateDoIt: 0x1752d0e8: a(n) OCReceiverDoItSemanticScope
    0x7ffdc2d814d8 I OpalCompiler>evaluate 0x1752ce20: a(n) OpalCompiler
    0x7ffdc2d81518 I DoItChunk>importFor:logSource: 0x17528a10: a(n) DoItChunk
    0x7ffdc2d81560 M [] in CodeImporter>evaluate 0x17510738: a(n) CodeImporter
    0x7ffdc2d815a8 M OrderedCollection>do: 0x17510ce0: a(n) OrderedCollection
    0x7ffdc2d815f8 I CodeImporter>evaluate 0x17510738: a(n) CodeImporter
    0x7ffdc2d81630 M [] in STCommandLineHandler>installSourceFile: 0x17509020: a(n) STCommandLineHandler
        0x17529540 w FullBlockClosure(BlockClosure)>on:do:

...

Running the same on an earlier debug VM results in the message invalidInstructionPointerinMethod being printed numerous times.

Expected behavior

The script runs without crashing, producing a count of the handled exceptions.

Version information:

  • OS: Ubuntu
  • Version: 20.04
  • Pharo Version: Pharo-11.0.0+build.112.sha.991ae666c4d926bae4732c3e55b68f2b77babc1c (64 Bit)

Expected development cost

This appears to be reproduceable within the gdb debugger, so hopefully can be resolved in a few days.

I'm happy to help.

@chisandrei
Copy link
Contributor

The crash described above also happens on MacOS (BigSpur Intel) with Pharo 10.

Pharo10.0.0
Build information: Pharo-10.0.0+build.521.sha.14f541319d443f4261f84f4fa19fbb34460a5edb (64 Bit)
CoInterpreter * VMMaker-tonel.1 uuid: 9bb1c8f0-799d-0d00-a873-c9210f2acd2a Jun 10 2022
StackToRegisterMappingCogit * VMMaker-tonel.1 uuid: 9bb1c8f0-799d-0d00-a873-c9210f2acd2a Jun 10 2022
v9.0.15 - Commit: b4879008 - Date: 2022-06-02 09:48:57 +0200

Pharo 9.0.15 built on Jun 10 2022 15:50:46 Compiler: 4.2.1 Compatible Apple LLVM 11.0.3 (clang-1103.0.32.29)
VMMaker versionString v9.0.15 - Commit: b4879008 - Date: 2022-06-02 09:48:57 +0200
CoInterpreter * VMMaker-tonel.1 uuid: 9bb1c8f0-799d-0d00-a873-c9210f2acd2a Jun 10 2022
StackToRegisterMappingCogit * VMMaker-tonel.1 uuid: 9bb1c8f0-799d-0d00-a873-c9210f2acd2a Jun 10 2022

Stack trace:

./pharo Pharo.image --headless st a.st
Starting...

Segmentation fault: 11 Thu Jun 30 21:00:50 2022


/Users/pharo-vm/Pharo.app/Contents/MacOS/Pharo
PharoVM version:5.0-Pharo 9.0.15 built on Jun 10 2022 15:50:46 Compiler: 4.2.1 Compatible Apple LLVM 11.0.3 (clang-1103.0.32.29) 4.2.1 Compatible Apple LLVM 11.0.3 (clang-1103.0.32.29) [Production Spur 64-bit VM]
Built from: CoInterpreter * VMMaker-tonel.1 uuid: 9bb1c8f0-799d-0d00-a873-c9210f2acd2a Jun 10 2022
 With:StackToRegisterMappingCogit * VMMaker-tonel.1 uuid: 9bb1c8f0-799d-0d00-a873-c9210f2acd2a Jun 10 2022
 Revision: v9.0.15 - Commit: b4879008 - Date: 2022-06-02 09:48:57 +0200

C stack backtrace & registers:
	rax 0x0000000000000000 rbx 0x000000010bd21c80 rcx 0x0000000000000e9e rdx 0x000000011a02b0b0
	rdi 0x0000000000000001 rsi 0x0000000000000001 rbp 0x00007ffee3fb5680 rsp 0x00007ffee3fb5660
	r8  0x000000010beba200 r9  0x000000011a78bc00 r10 0x000000010bd23560 r11 0x0000000000000001
	r12 0x000000010bdbb0f8 r13 0x0000000000000032 r14 0x0000000000000009 r15 0x000000011a02b0c0
	rip 0x000000010beba33d
*0   ???                                 0x000000010beba33d 0x0 + 4494959421
1   libPharoVMCore.dylib                0x000000010bcf6581 reportStackState + 305
2   libPharoVMCore.dylib                0x000000010bcf641e doReport + 190
3   libPharoVMCore.dylib                0x000000010bcf6749 sigsegv + 25
4   libsystem_platform.dylib            0x00007fff20456d7d _sigtramp + 29
5   ???                                 0x0000000000000000 0x0 + 0
6   ???                                 0x000000010beba0c7 0x0 + 4494958791
7   ???                                 0x000000010bf8a78e 0x0 + 4495812494
8   ???                                 0x000000010bf8a69b 0x0 + 4495812251
9   ???                                 0x000000010bebadc1 0x0 + 4494962113
10  ???                                 0x000000010bfc5176 0x0 + 4496052598
11  ???                                 0x000000010be8f929 0x0 + 4494784809
12  ???                                 0x000000010bfc4a31 0x0 + 4496050737
13  ???                                 0x000000010bf770cd 0x0 + 4495732941
14  ???                                 0x000000010be8f929 0x0 + 4494784809
15  ???                                 0x000000010be8c3e0 0x0 + 4494771168
16  ???                                 0x0000000000000000 0x0 + 0


All Smalltalk process stacks (active first):
Process        0x119e2c3d8 priority 40
    0x7ffee3fb5680 M ExternalAddress>unsignedByteAt: 0x11a02b0b0: a(n) ExternalAddress
    0x7ffee3fb56c0 M [] in ExternalAddress>fromCString 0x11a02b0b0: a(n) ExternalAddress
    0x7ffee3fb5700 M ByteArray class(SequenceableCollection class)>new:streamContents: 0x11a7a05e8: a(n) ByteArray class
    0x7ffee3fb5740 M ByteArray class(SequenceableCollection class)>streamContents: 0x11a7a05e8: a(n) ByteArray class
    0x7ffee3fb5780 M ExternalAddress>fromCString 0x11a02b0b0: a(n) ExternalAddress
    0x7ffee3fb57c0 M [] in UndefinedObject>DoIt 0x11a78bc00: a(n) UndefinedObject
    0x7ffee3fb57f0 M FullBlockClosure(BlockClosure)>on:do: 0x11a02b048: a(n) FullBlockClosure
    0x7ffee3fb5840 M UndefinedObject>DoIt 0x11a78bc00: a(n) UndefinedObject
    0x7ffee3fb5870 M [] in OpalCompiler>evaluate 0x119e53a30: a(n) OpalCompiler
    0x7ffee3fb58a0 M FullBlockClosure(BlockClosure)>on:do: 0x119e54620: a(n) FullBlockClosure
    0x7ffee3fb58f8 I OpalCompiler>evaluate 0x119e53a30: a(n) OpalCompiler
    0x7ffee3fb5938 I DoItChunk>importFor:logSource: 0x119e4f8b8: a(n) DoItChunk
    0x7ffee3fb5980 M [] in CodeImporter>evaluate 0x119e379b0: a(n) CodeImporter
    0x7ffee3fb59c8 M OrderedCollection>do: 0x119e37cb8: a(n) OrderedCollection
    0x7ffee3fb5a18 I CodeImporter>evaluate 0x119e379b0: a(n) CodeImporter
    0x7ffee3fb5a50 M [] in STCommandLineHandler>installSourceFile: 0x119e307d8: a(n) STCommandLineHandler
    0x7ffee3fb35b0 M FullBlockClosure(BlockClosure)>on:do: 0x119e50040: a(n) FullBlockClosure
    0x7ffee3fb35f0 M STCommandLineHandler>handleErrorsDuring:reference: 0x119e307d8: a(n) STCommandLineHandler
    0x7ffee3fb3648 I STCommandLineHandler>installSourceFile: 0x119e307d8: a(n) STCommandLineHandler
    0x7ffee3fb3680 M [] in STCommandLineHandler>installSourceFiles 0x119e307d8: a(n) STCommandLineHandler
    0x7ffee3fb36c8 M OrderedCollection>do: 0x119e34ef8: a(n) OrderedCollection
    0x7ffee3fb3700 M [] in STCommandLineHandler>installSourceFiles 0x119e307d8: a(n) STCommandLineHandler
    0x7ffee3fb3740 M FullBlockClosure(BlockClosure)>ensure: 0x119e34ff0: a(n) FullBlockClosure
    0x7ffee3fb3788 I STCommandLineHandler>installSourceFiles 0x119e307d8: a(n) STCommandLineHandler
    0x7ffee3fb37c8 I STCommandLineHandler>activate 0x119e307d8: a(n) STCommandLineHandler
    0x7ffee3fb3808 I STCommandLineHandler class(CommandLineHandler class)>activateWith: 0x11a8d9588: a(n) STCommandLineHandler class
    0x7ffee3fb3848 M [] in PharoCommandLineHandler>activateSubCommand: 0x1194999e0: a(n) PharoCommandLineHandler
    0x7ffee3fb3878 M FullBlockClosure(BlockClosure)>on:do: 0x119e30778: a(n) FullBlockClosure
    0x7ffee3fb38c8 I PharoCommandLineHandler(BasicCommandLineHandler)>activateSubCommand: 0x1194999e0: a(n) PharoCommandLineHandler
    0x7ffee3fb3918 I PharoCommandLineHandler(BasicCommandLineHandler)>handleSubcommand 0x1194999e0: a(n) PharoCommandLineHandler
    0x7ffee3fb3958 I PharoCommandLineHandler(BasicCommandLineHandler)>handleArgument: 0x1194999e0: a(n) PharoCommandLineHandler
    0x7ffee3fb3990 M [] in PharoCommandLineHandler>activate 0x1194999e0: a(n) PharoCommandLineHandler
    0x7ffee3fb39c0 M FullBlockClosure(BlockClosure)>on:do: 0x119e2d168: a(n) FullBlockClosure
    0x7ffee3fb3a10 I [] in PharoCommandLineHandler>activate 0x1194999e0: a(n) PharoCommandLineHandler
    0x7ffee3fb3a50 I [] in FullBlockClosure>newProcess 0x119e2c218: a(n) FullBlockClosure

processes at priority 40
Process        0x11d0d6290 priority 40
    0x7ffee3fa7a48 I MorphicRenderLoop>doOneCycleWhile: 0x11d0e9978: a(n) MorphicRenderLoop
       0x11d0e99c0 s [] in MorphicUIManager>spawnNewProcess
       0x11d0e9aa0 s [] in FullBlockClosure(BlockClosure)>newProcess

processes at priority 10
Process        0x119493890 priority 10
       0x11949aef8 s [] in FullBlockClosure(BlockClosure)>newProcess

suspended processes
Process        0x119497120 priority 50
    0x7ffee3fa39d0 I WeakArray class>finalizationProcess 0x11a7a1c90: a(n) WeakArray class
    0x7ffee3fa3a10 I [] in WeakArray class>restartFinalizationProcess 0x11a7a1c90: a(n) WeakArray class
    0x7ffee3fa3a50 I [] in FullBlockClosure>newProcess 0x119499370: a(n) FullBlockClosure

Process        0x11d0d62e0 priority 80
    0x7ffee3f999f8 I DelayMicrosecondTicker>waitForUserSignalled:orExpired: 0x11ab74bd0: a(n) DelayMicrosecondTicker
    0x7ffee3f99a50 I [] in DelaySemaphoreScheduler>runBackendLoopAtTimingPriority 0x11ab717e0: a(n) DelaySemaphoreScheduler
       0x11ded96c0 s FullBlockClosure(BlockClosure)>ensure:
       0x11d0e9bd0 s DelaySemaphoreScheduler(DelayBasicScheduler)>runBackendLoopAtTimingPriority
       0x11ded8f60 s [] in DelaySemaphoreScheduler(DelayBasicScheduler)>startTimerEventLoopPriority:
       0x11d0e9cb0 s [] in FullBlockClosure(BlockClosure)>newProcess

Process        0x11c6dc5c8 priority 40
       0x11c6e2538 s AtomicSharedQueue>waitForNewItems
       0x11c6e6828 s AtomicSharedQueue>next
       0x11c6e7738 s TKTWorkerProcess>privateNextTask
       0x11c6e8160 s [] in TKTWorkerProcess>workerLoop
       0x11c6e8a38 s FullBlockClosure(BlockClosure)>repeat
       0x11c6d23d8 s TKTWorkerProcess>workerLoop
       0x11c6d2490 s MessageSend>value
       0x11c6d2548 s [] in TKTPharoProcessProvider>createProcessDoing:named:
       0x11c6d2620 s [] in FullBlockClosure(BlockClosure)>newProcess

Process        0x119493840 priority 60
    0x7ffee3fa19d0 I SmalltalkImage>lowSpaceWatcher 0x11a7aefa0: a(n) SmalltalkImage
    0x7ffee3fa1a10 I [] in SmalltalkImage>installLowSpaceWatcher 0x11a7aefa0: a(n) SmalltalkImage
    0x7ffee3fa1a50 I [] in FullBlockClosure>newProcess 0x119499180: a(n) FullBlockClosure

Process        0x11949e6a8 priority 70
    0x7ffee3f9fa10 I [] in TFCallbackQueue>forkCallbackProcess 0x119496f30: a(n) TFCallbackQueue
    0x7ffee3f9fa50 I [] in FullBlockClosure>newProcess 0x119498fc0: a(n) FullBlockClosure

Most recent primitives
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
basicNew
stringHash:initialHash:
value:
basicNew
stringHash:initialHash:
stringHash:initialHash:
at:
at:put:
at:
replaceFrom:to:with:startingAt:
at:put:
**StackOverflow**
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
basicNew
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
stringHash:initialHash:
compare:with:collated:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
stringHash:initialHash:
compare:with:collated:
**StackOverflow**
stringHash:initialHash:
compare:with:collated:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
compare:with:collated:
**StackOverflow**
**StackOverflow**
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
stringHash:initialHash:
compare:with:collated:
compare:with:collated:
**StackOverflow**
stringHash:initialHash:
stringHash:initialHash:
basicNew
size
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
**StackOverflow**
class
basicNew:
basicAt:put:
basicSize
basicAt:
objectAt:put:
withArgs:executeMethod:
basicSize
write:from:startingAt:count:
asInteger
basicNew:
basicSize
basicSize
flush:
value
basicNew:
size

stack page bytes 8192 available headroom 5576 minimum unused headroom 472

	(Segmentation fault: 11)

@chisandrei
Copy link
Contributor

chisandrei commented Jun 30, 2022

One other aspect we noticed is that the crash happens with primitives from ExternalAddress. As an experiment we tried removing the primitive pragma from methods in ExternalAddress that deal with integer operations, as those calls will happen then through FFI.

In an image we run the code below and then saved the image:

externalAddressMethodsToPatch := #(
    boolean8AtOffset: boolean8AtOffset:put:
    char8AtOffset: char8AtOffset:put:
    char16AtOffset: char16AtOffset:put:
    char32AtOffset: char32AtOffset:put:
    int8AtOffset: int8AtOffset:put:
    int16AtOffset: int16AtOffset:put:
    int32AtOffset: int32AtOffset:put:
    int64AtOffset: int64AtOffset:put:
    uint8AtOffset: uint8AtOffset:put:
    uint16AtOffset: uint16AtOffset:put:
    uint32AtOffset: uint32AtOffset:put:
    uint64AtOffset: uint64AtOffset:put:).

externalAddressMethodsToPatch do: [ :each |
	(RBRemovePragmaTransformation
		pragma: '<primitive: nil>'
		inMethod: each
		inClass: #ExternalAddress) asRefactoring execute ].

Now running the same code that failed before works:

./pharo Pharo.image --headless st a.st
Starting...
Completed with count: 1000

Seems making the call through a named primitive fails, but making the call through FFI passes.

@chisandrei
Copy link
Contributor

The crash is also random. If one calls only ExternalAddress null fromCString in some case as expected a debugger appears with the PrimitiveFailed error.

Screenshot 2022-06-30 at 21 51 26

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants