diff --git a/codespeed.conf b/codespeed.conf index 16b05a66a0..b1e221f6c5 100644 --- a/codespeed.conf +++ b/codespeed.conf @@ -26,51 +26,51 @@ benchmark_suites: - CD: extra_args: "1 0 2" codespeed_name: "1st.CD" - # machines: [yuria ] + machines: [yuria ] - Havlak: extra_args: "1 0 1" codespeed_name: "1st.Havlak" - # machines: [yuria2] + machines: [yuria2] - Richards: extra_args: "1 0 1" codespeed_name: "1st.Richards" - # machines: [yuria3] + machines: [yuria3] - RichardsNS: extra_args: "1 0 1" codespeed_name: "1st.RichardsNS" - # machines: [yuria] + machines: [yuria] - DeltaBlue: extra_args: "1 0 200" codespeed_name: "1st.DeltaBlue" - # machines: [yuria2] + machines: [yuria2] - DeltaBlueNS: extra_args: "1 0 200" codespeed_name: "1st.DeltaBlueNS" - # machines: [yuria3] + machines: [yuria3] - Mandelbrot: extra_args: "1 0 50" codespeed_name: "1st.Mandelbrot" - # machines: [yuria ] + machines: [yuria ] - NBody: extra_args: "1 0 10000" codespeed_name: "1st.NBody" - # machines: [yuria2] + machines: [yuria2] - Json: extra_args: "1 0 2" codespeed_name: "1st.Json" - # machines: [yuria3] + machines: [yuria3] - GraphSearch: extra_args: "1 0 1" codespeed_name: "1st.GraphSearch" - # machines: [yuria ] + machines: [yuria ] - PageRank: extra_args: "1 0 100" codespeed_name: "1st.PageRank" - # machines: [yuria2] + machines: [yuria2] - Splay: extra_args: "1 0 1" codespeed_name: "1st.Splay" - # machines: [yuria3] + machines: [yuria3] macro-steady: gauge_adapter: RebenchLog @@ -81,58 +81,58 @@ benchmark_suites: - CD: extra_args: "130 0 100" codespeed_name: "peak.CD" - # machines: [yuria ] + machines: [yuria ] - Havlak: extra_args: "130 0 5" codespeed_name: "peak.Havlak" - # machines: [yuria2] + machines: [yuria2] - Richards: extra_args: "130 0 30" codespeed_name: "peak.Richards" - # machines: [yuria3] + machines: [yuria3] - RichardsNS: extra_args: "130 0 200" codespeed_name: "peak.RichardsNS" - # machines: [yuria ] + machines: [yuria ] - DeltaBlue: extra_args: "250 0 10000" codespeed_name: "peak.DeltaBlue" warmup: 150 - # machines: [yuria2] + machines: [yuria2] - DeltaBlueNS: extra_args: "250 0 1000" codespeed_name: "peak.DeltaBlue" warmup: 150 - # machines: [yuria3] + machines: [yuria3] - Mandelbrot: extra_args: "110 0 400" codespeed_name: "peak.Mandelbrot" warmup: 10 - # machines: [yuria ] + machines: [yuria ] - NBody: extra_args: "120 0 150000" codespeed_name: "peak.NBody" warmup: 20 - # machines: [yuria2] + machines: [yuria2] - Json: extra_args: "120 0 50" codespeed_name: "peak.Json" warmup: 20 - # machines: [yuria3] + machines: [yuria3] - GraphSearch: extra_args: "250 0 15" codespeed_name: "peak.GraphSearch" warmup: 100 - # machines: [yuria ] + machines: [yuria ] - PageRank: extra_args: "120 0 1000" codespeed_name: "peak.PageRank" warmup: 20 - # machines: [yuria2] + machines: [yuria2] - Splay: extra_args: "150 0 1" codespeed_name: "peak.Splay" - # machines: [yuria3] + machines: [yuria3] som-startup: gauge_adapter: RebenchLog @@ -143,35 +143,35 @@ benchmark_suites: - Fannkuch: extra_args: "1 0 7" codespeed_name: "1st.Fannkuch" - # machines: [yuria ] + machines: [yuria ] - List: extra_args: "1 0 50" codespeed_name: "1st.List" - # machines: [yuria2] + machines: [yuria2] - Bounce: extra_args: "1 0 20" codespeed_name: "1st.Bounce" - # machines: [yuria3] + machines: [yuria3] - Permute: extra_args: "1 0 10" codespeed_name: "1st.Permute" - # machines: [yuria ] + machines: [yuria ] - Queens: extra_args: "1 0 10" codespeed_name: "1st.Queens" - # machines: [yuria2] + machines: [yuria2] - Storage: extra_args: "1 0 20" codespeed_name: "1st.Storage" - # machines: [yuria3] + machines: [yuria3] - Sieve: extra_args: "1 0 100" codespeed_name: "1st.Sieve" - # machines: [yuria ] + machines: [yuria ] - Towers: extra_args: "1 0 20" codespeed_name: "1st.Towers" - # machines: [yuria2] + machines: [yuria2] som-steady: gauge_adapter: RebenchLog @@ -183,38 +183,38 @@ benchmark_suites: extra_args: "55 0 9" codespeed_name: "peak.Fannkuch" warmup: 5 - # machines: [yuria3] + machines: [yuria3] - List: extra_args: "70 0 1000" codespeed_name: "peak.List" warmup: 20 - # machines: [yuria ] + machines: [yuria ] - Bounce: extra_args: "60 0 1000" codespeed_name: "peak.Bounce" - # machines: [yuria2] + machines: [yuria2] - Permute: extra_args: "60 0 500" codespeed_name: "peak.Permute" - # machines: [yuria3] + machines: [yuria3] - Queens: extra_args: "120 0 400" codespeed_name: "peak.Queens" warmup: 70 - # machines: [yuria ] + machines: [yuria ] - Storage: extra_args: "75 0 700" codespeed_name: "peak.Storage" warmup: 25 - # machines: [yuria2] + machines: [yuria2] - Sieve: extra_args: "60 0 400" codespeed_name: "peak.Sieve" - # machines: [yuria3] + machines: [yuria3] - Towers: extra_args: "60 0 300" codespeed_name: "peak.Towers" - # machines: [yuria ] + machines: [yuria ] sort-startup: gauge_adapter: RebenchLog @@ -225,15 +225,15 @@ benchmark_suites: - TreeSort: extra_args: "1 0 10" codespeed_name: "1st.TreeSort" - # machines: [yuria2] + machines: [yuria2] - BubbleSort: extra_args: "1 0 25" codespeed_name: "1st.BubbleSort" - # machines: [yuria3] + machines: [yuria3] - QuickSort: extra_args: "1 0 20" codespeed_name: "1st.QuickSort" - # machines: [yuria ] + machines: [yuria ] sort-steady: gauge_adapter: RebenchLog @@ -244,15 +244,15 @@ benchmark_suites: - BubbleSort: extra_args: "60 0 2000" codespeed_name: "peak.BubbleSort" - # machines: [yuria2] + machines: [yuria2] - QuickSort: extra_args: "60 0 800" codespeed_name: "peak.QuickSort" - # machines: [yuria3] + machines: [yuria3] - TreeSort: extra_args: "60 0 300" codespeed_name: "peak.TreeSort" - # machines: [yuria ] + machines: [yuria ] micro-startup: gauge_adapter: RebenchLog @@ -263,43 +263,43 @@ benchmark_suites: - Fibonacci: extra_args: "1 0 100" codespeed_name: "1st.Fibonacci" - # machines: [yuria2] + machines: [yuria2] - ClosureDefFibonacci: extra_args: "1 0 50" codespeed_name: "1st.ClosureDefFibonacci" - # machines: [yuria3] + machines: [yuria3] - ClosureFibonacci: extra_args: "1 0 50" codespeed_name: "1st.ClosureFibonacci" - # machines: [yuria ] + machines: [yuria ] - Dispatch: extra_args: "1 0 50" codespeed_name: "1st.Dispatch" - # machines: [yuria2] + machines: [yuria2] - Loop: extra_args: "1 0 100" codespeed_name: "1st.Loop" - # machines: [yuria3] + machines: [yuria3] - Recurse: extra_args: "1 0 50" codespeed_name: "1st.Recurse" - # machines: [yuria ] + machines: [yuria ] - Sum: extra_args: "1 0 100" codespeed_name: "1st.Sum" - # machines: [yuria2] + machines: [yuria2] - IntegerLoop: extra_args: "1 0 100" codespeed_name: "1st.IntegerLoop" - # machines: [yuria3] + machines: [yuria3] - FieldLoop: extra_args: "1 0 2" codespeed_name: "1st.FieldLoop" - # machines: [yuria ] + machines: [yuria ] - WhileLoop: extra_args: "1 0 100" codespeed_name: "1st.WhileLoop" - # machines: [yuria2] + machines: [yuria2] micro-steady: gauge_adapter: RebenchLog @@ -311,46 +311,46 @@ benchmark_suites: extra_args: "70 0 1000" codespeed_name: "peak.Fibonacci" warmup: 20 - # machines: [yuria3] + machines: [yuria3] - ClosureDefFibonacci: extra_args: "70 0 300" codespeed_name: "peak.ClosureDefFibonacci" warmup: 20 - # machines: [yuria ] + machines: [yuria ] - ClosureFibonacci: extra_args: "70 0 300" codespeed_name: "peak.ClosureFibonacci" warmup: 20 - # machines: [yuria2] + machines: [yuria2] - Dispatch: extra_args: "55 0 2000" codespeed_name: "peak.Dispatch" - # machines: [yuria3] + machines: [yuria3] - Loop: extra_args: "55 0 500000" codespeed_name: "peak.Loop" - # machines: [yuria ] + machines: [yuria ] - Recurse: extra_args: "70 0 1000" codespeed_name: "peak.Recurse" warmup: 20 - # machines: [yuria2] + machines: [yuria2] - Sum: extra_args: "55 0 3000" codespeed_name: "peak.Sum" - # machines: [yuria3] + machines: [yuria3] - IntegerLoop: extra_args: "55 0 2000" codespeed_name: "peak.IntegerLoop" - # machines: [yuria ] + machines: [yuria ] - FieldLoop: extra_args: "55 0 200" codespeed_name: "peak.FieldLoop" - # machines: [yuria2] + machines: [yuria2] - WhileLoop: extra_args: "55 0 2000" codespeed_name: "peak.WhileLoop" - # machines: [yuria3] + machines: [yuria3] savina-interp: gauge_adapter: RebenchLog @@ -362,87 +362,87 @@ benchmark_suites: - PingPong: extra_args: 20000 codespeed_name: "M.PingPong" - #machines: [yuria ] + machines: [yuria ] - Counting: extra_args: 100000 # was 1000000 codespeed_name: "M.Counting" - #machines: [yuria2] + machines: [yuria2] - ForkJoinThroughput: extra_args: "1000:60" # "10000:60" codespeed_name: "M.ForkJoinThroughput" - #machines: [yuria3] + machines: [yuria3] - ForkJoinActorCreation: extra_args: 10000 codespeed_name: "M.ForkJoinActorCreation" - # machines: [yuria ] + machines: [yuria ] - ThreadRing: extra_args: "100:50000" codespeed_name: "M.ThreadRing" - # machines: [yuria2] + machines: [yuria2] - Chameneos: extra_args: "100:10000" # "100:200000" codespeed_name: "M.Chameneos" - # machines: [yuria3] + machines: [yuria3] - BigContention: extra_args: "100:120" codespeed_name: "M.BigContention" - # machines: [yuria ] + machines: [yuria ] # Concurrency - ConcurrentDictionary: extra_args: "20:600:20" # "20:10000:50" codespeed_name: "C.Dictionary" - # machines: [yuria2] + machines: [yuria2] - ConcurrentSortedLinkedList: extra_args: "10:300:10:1" # "20:8000:10:1" codespeed_name: "C.SortedLinkedList" - # machines: [yuria3] + machines: [yuria3] - ProducerConsumerBoundedBuffer: extra_args: "40:5:5:10" # "50:40:40:1000" codespeed_name: "C.ProdConBoundedBuffer" - # machines: [yuria ] + machines: [yuria ] - Philosophers: extra_args: "20:1000" codespeed_name: "C.Philosophers" - # machines: [yuria2] + machines: [yuria2] - SleepingBarber: extra_args: "800:400:400:200" codespeed_name: "C.SleepingBarber" - # machines: [yuria3] + machines: [yuria3] - CigaretteSmokers: extra_args: "1000:200" codespeed_name: "C.CigaretteSmokers" - # machines: [yuria ] + machines: [yuria ] - LogisticsMapSeries: extra_args: "2000:10:346" codespeed_name: "C.LogisticsMapSeries" - # machines: [yuria2] + machines: [yuria2] - BankTransaction: extra_args: "1000:1000" codespeed_name: "C.BankTransaction" - # machines: [yuria3] + machines: [yuria3] # Parallelism - RadixSort: extra_args: "10000:65536:74755" # "100000:1152921504606846976:74755" codespeed_name: "P.RadixSort" - # machines: [yuria ] + machines: [yuria ] - UnbalancedCobwebbedTree: extra_args: "5000:10:0:1" codespeed_name: "P.UnbalancedCobwebbedTree" - # machines: [yuria2] + machines: [yuria2] - TrapezoidalApproximation: extra_args: "100:10000:1:5" # "100:10000000:1:5" codespeed_name: "P.TrapezoidalApproximation" - # machines: [yuria3] + machines: [yuria3] - AStarSearch: extra_args: "100:10" codespeed_name: "P.AStarSearch" - # machines: [yuria ] + machines: [yuria ] - NQueens: extra_args: "20:8:4" codespeed_name: "P.NQueens" - # machines: [yuria2] + machines: [yuria2] savina-jit: gauge_adapter: RebenchLog @@ -454,87 +454,87 @@ benchmark_suites: - PingPong: extra_args: 40000 codespeed_name: "M.PingPong" - # machines: [yuria3] + machines: [yuria3] - Counting: extra_args: 200000 # was 1000000 codespeed_name: "M.Counting" - # machines: [yuria ] + machines: [yuria ] - ForkJoinThroughput: extra_args: "3000:60" # "10000:60" codespeed_name: "M.ForkJoinThroughput" - # machines: [yuria2] + machines: [yuria2] - ForkJoinActorCreation: extra_args: 40000 codespeed_name: "M.ForkJoinActorCreation" - # machines: [yuria3] + machines: [yuria3] - ThreadRing: extra_args: "100:100000" codespeed_name: "M.ThreadRing" - # machines: [yuria ] + machines: [yuria ] - Chameneos: extra_args: "100:100000" # "100:200000" codespeed_name: "M.Chameneos" - # machines: [yuria2] + machines: [yuria2] - BigContention: extra_args: "800:120" codespeed_name: "M.BigContention" - # machines: [yuria3] + machines: [yuria3] # Concurrency - ConcurrentDictionary: extra_args: "20:1000:20" # "20:10000:50" codespeed_name: "C.Dictionary" - # machines: [yuria ] + machines: [yuria ] - ConcurrentSortedLinkedList: extra_args: "10:1000:10:1" # "20:8000:10:1" codespeed_name: "C.SortedLinkedList" - # machines: [yuria2] + machines: [yuria2] - ProducerConsumerBoundedBuffer: extra_args: "40:5:5:10" # "50:40:40:1000" codespeed_name: "C.ProdConBoundedBuffer" - # machines: [yuria3] + machines: [yuria3] - Philosophers: extra_args: "20:5000" codespeed_name: "C.Philosophers" - # machines: [yuria ] + machines: [yuria ] - SleepingBarber: extra_args: "1000:1000:1000:500" codespeed_name: "C.SleepingBarber" - # machines: [yuria2] + machines: [yuria2] - CigaretteSmokers: extra_args: "10000:200" codespeed_name: "C.CigaretteSmokers" - # machines: [yuria3] + machines: [yuria3] - LogisticsMapSeries: extra_args: "10000:10:346" codespeed_name: "C.LogisticsMapSeries" - # machines: [yuria ] + machines: [yuria ] - BankTransaction: extra_args: "1000:50000" codespeed_name: "C.BankTransaction" - # machines: [yuria2] + machines: [yuria2] # Parallelism - RadixSort: extra_args: "10000:65536:74755" # "100000:1152921504606846976:74755" codespeed_name: "P.RadixSort" - # machines: [yuria3] + machines: [yuria3] - UnbalancedCobwebbedTree: extra_args: "30000:10:500:100" codespeed_name: "P.UnbalancedCobwebbedTree" - # machines: [yuria ] + machines: [yuria ] - TrapezoidalApproximation: extra_args: "100:100000:1:5" # "100:10000000:1:5" codespeed_name: "P.TrapezoidalApproximation" - # machines: [yuria2] + machines: [yuria2] - AStarSearch: extra_args: "100:20" codespeed_name: "P.AStarSearch" - # machines: [yuria3] + machines: [yuria3] - NQueens: extra_args: "20:9:4" codespeed_name: "P.NQueens" - # machines: [yuria ] + machines: [yuria ] validation: gauge_adapter: ValidationLog @@ -572,19 +572,19 @@ benchmark_suites: - CilkSort: extra_args: "130 0 50" codespeed_name: "peak.CilkSort" - # machines: [yuria2] + machines: [yuria2] - Integrate: extra_args: "130 0 100" codespeed_name: "peak.Integrate" - # machines: [yuria3] + machines: [yuria3] - Jacobi: extra_args: "130 0 400" codespeed_name: "peak.Jacobi" - # machines: [yuria ] + machines: [yuria ] - LUDecomposition: extra_args: "130 0 256" codespeed_name: "peak.LUDecomposition" - # machines: [yuria2] + machines: [yuria2] fj-seq-startup: description: Sequential version of Fork/Join benchmarks for normal performance tracking @@ -600,19 +600,19 @@ benchmark_suites: - CilkSort: extra_args: "1 0 1" codespeed_name: "1st.CilkSort" - # machines: [yuria3] + machines: [yuria3] - Integrate: extra_args: "1 0 50" codespeed_name: "1st.Integrate" - # machines: [yuria ] + machines: [yuria ] - Jacobi: extra_args: "1 0 100" codespeed_name: "1st.Jacobi" - # machines: [yuria2] + machines: [yuria2] - LUDecomposition: extra_args: "1 0 128" codespeed_name: "1st.LUDecomposition" - # machines: [yuria3] + machines: [yuria3] forkjoin: gauge_adapter: RebenchLog @@ -657,17 +657,17 @@ benchmark_suites: #numMessages numThreads, numThreads is unused extra_args: "10000 2" codespeed_name: "CSP.PingPong" - # machines: [yuria ] + machines: [yuria ] - SavinaCSP.ForkJoinThroughput: #numMessages numThreads extra_args: "8000 4" - # machines: [yuria2] + machines: [yuria2] codespeed_name: "CSP.ForkJoinThroughput" - SavinaCSP.Philosophers: #numrounds numThreads, uses numThreads - 1 Philosophers extra_args: "200 4" codespeed_name: "CSP.Philosophers" - # machines: [yuria3] + machines: [yuria3] csp-startup: description: CSP port of the savina benchmarks @@ -719,17 +719,17 @@ benchmark_suites: - MutexSuite.ProducerConsumer: #buffersize numThreads, split threads equally into producers and consumers extra_args: "4000 4" - # machines: [yuria ] + machines: [yuria ] - MutexSuite.Philosophers: #numrounds numThreads, uses numThreads - 1 Philosophers extra_args: "50000 4" - # machines: [yuria2] + machines: [yuria2] - Lee: extra_args: 2 - # machines: [yuria3] + machines: [yuria3] - Vacation: extra_args: 12 - # machines: [yuria ] + machines: [yuria ] stm-startup: description: various mutex based benchmarks @@ -755,10 +755,10 @@ benchmark_suites: benchmarks: - LeeSTM: extra_args: 4 - # machines: [yuria2] + machines: [yuria2] - VacationSTM: extra_args: 10 - # machines: [yuria3] + machines: [yuria3] # VMs have a name and are specified by a path and the binary to be executed executors: @@ -871,6 +871,13 @@ experiments: - stm-steady - csp-steady + - SOMns-interp-asts: + suites: + - savina-interp + - SOMns-graal-asts: + suites: + - savina-jit + SOMns: description: All benchmarks on SOMns with Graal suites: diff --git a/src/som/compiler/MixinDefinition.java b/src/som/compiler/MixinDefinition.java index c1edc513a0..b23d304e58 100644 --- a/src/som/compiler/MixinDefinition.java +++ b/src/som/compiler/MixinDefinition.java @@ -769,13 +769,17 @@ public Object invoke(final IndirectCallNode call, final Object[] arguments) { Object superclassAndMixins; if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { superclassAndMixins = mixinDefinition.getSuperclassAndMixinResolutionInvokable() - .getCallTarget().call(rcvr, SArguments.instantiateTopShadowStackEntry(mixinDefinition.getSuperclassAndMixinResolutionInvokable())); + .getCallTarget().call(rcvr, + SArguments.instantiateTopShadowStackEntry( + mixinDefinition.getSuperclassAndMixinResolutionInvokable())); } else { superclassAndMixins = mixinDefinition.getSuperclassAndMixinResolutionInvokable() - .getCallTarget().call(rcvr); } + .getCallTarget().call(rcvr); + } // ok, now it is for sure not initialized yet, instantiate class - // Object superclassAndMixins = mixinDefinition.getSuperclassAndMixinResolutionInvokable() - // .getCallTarget().call(rcvr); + // Object superclassAndMixins = + // mixinDefinition.getSuperclassAndMixinResolutionInvokable() + // .getCallTarget().call(rcvr); SClass clazz = mixinDefinition.instantiateClass(null, rcvr, superclassAndMixins); rcvr.writeSlot(this, clazz); return clazz; diff --git a/src/som/interpreter/SArguments.java b/src/som/interpreter/SArguments.java index ecf7257115..96bbf6f0ac 100644 --- a/src/som/interpreter/SArguments.java +++ b/src/som/interpreter/SArguments.java @@ -7,6 +7,7 @@ import java.util.Map; import com.oracle.truffle.api.CompilerAsserts; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.nodes.Node; @@ -246,9 +247,11 @@ public static void setShadowStackEntry(final Object[] args, final ShadowStackEnt args[args.length - 1] = entry; } - public static void updateShadowStackEntry(final Object[] args, final ShadowStackEntry entry) { - //assert args[args.length - 1] instanceof ShadowStackEntry : "Assume shadow stack entry is set"; - //assert entry.getPreviousShadowStackEntry() == (args[args.length -1]); + public static void updateShadowStackEntry(final Object[] args, + final ShadowStackEntry entry) { + // assert args[args.length - 1] instanceof ShadowStackEntry : "Assume shadow stack entry is + // set"; + // assert entry.getPreviousShadowStackEntry() == (args[args.length -1]); args[args.length - 1] = entry; } @@ -271,6 +274,7 @@ public static void saveCausalEntryForPromise(final Object previousPromiseStack, private static Map previousPromiseInGroupByActor = new HashMap<>(); + @TruffleBoundary public static void saveCausalEntryForPromiseGroup(final Object previousPromiseStack, final Object callbackPromiseStack, final long actorId) { if (previousPromiseInGroupByActor != null diff --git a/src/som/interpreter/actors/ErrorNode.java b/src/som/interpreter/actors/ErrorNode.java index b49983022f..a41c4f604f 100644 --- a/src/som/interpreter/actors/ErrorNode.java +++ b/src/som/interpreter/actors/ErrorNode.java @@ -41,7 +41,7 @@ public SPromise.SResolver standardError(final VirtualFrame frame, ShadowStackEntry.EntryForPromiseResolution.ResolutionLocation.ERROR; resolutionEntry = ShadowStackEntry.createAtPromiseResolution(entry, this.getParent(), location, - "error: " + result.toString()); + ""); // "error: " + result.toString() SArguments.saveCausalEntryForPromise(maybeEntry, resolutionEntry); } diff --git a/src/som/interpreter/actors/EventualMessage.java b/src/som/interpreter/actors/EventualMessage.java index 276cff3553..ed6aa8f966 100644 --- a/src/som/interpreter/actors/EventualMessage.java +++ b/src/som/interpreter/actors/EventualMessage.java @@ -434,7 +434,8 @@ private void setPromiseValue(final Object value, final Actor resolvingActor, assert args[args.length - 1] instanceof ShadowStackEntry; ShadowStackEntry callPromiseStack = (ShadowStackEntry) args[args.length - 1]; boolean promiseGroup = false; - if (callPromiseStack.getPreviousShadowStackEntry().getExpression().getParent().getParent() instanceof Method) { + if (callPromiseStack.getPreviousShadowStackEntry().getExpression().getParent() + .getParent() instanceof Method) { promiseGroup = ((Method) callPromiseStack.getExpression().getParent() .getParent()).getName().startsWith("PromiseGroup"); diff --git a/src/som/interpreter/actors/ResolveNode.java b/src/som/interpreter/actors/ResolveNode.java index 36c22d08cc..8eb11323a5 100644 --- a/src/som/interpreter/actors/ResolveNode.java +++ b/src/som/interpreter/actors/ResolveNode.java @@ -35,7 +35,7 @@ public SPromise.SResolver normalResolution(final VirtualFrame frame, ShadowStackEntry.EntryForPromiseResolution.ResolutionLocation.SUCCESSFUL; resolutionEntry = ShadowStackEntry.createAtPromiseResolution(entry, this.getParent(), location, - "value: " + result.toString()); + ""); // "value: " + result.toString() SArguments.saveCausalEntryForPromise(maybeEntry, resolutionEntry); } diff --git a/src/som/interpreter/nodes/MessageSendNode.java b/src/som/interpreter/nodes/MessageSendNode.java index 815069cea2..f78fc5b8f1 100644 --- a/src/som/interpreter/nodes/MessageSendNode.java +++ b/src/som/interpreter/nodes/MessageSendNode.java @@ -162,9 +162,11 @@ private Object[] evaluateArguments(final VirtualFrame frame) { Object[] arguments = SArguments.allocateArgumentsArray(argumentNodes); for (int i = 0; i < argumentNodes.length; i++) { arguments[i] = argumentNodes[i].executeGeneric(frame); - if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE && arguments[i] instanceof ShadowStackEntry) { + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE + && arguments[i] instanceof ShadowStackEntry) { CompilerDirectives.transferToInterpreter(); - insert(ExceptionSignalingNode.createArgumentErrorNode(sourceSection)).signal(frame, frame.getArguments()); + insert(ExceptionSignalingNode.createArgumentErrorNode(sourceSection)).signal(frame, + frame.getArguments()); } assert arguments[i] != null : "Some expression evaluated to null, which is not supported."; assert !(arguments[i] instanceof ShadowStackEntry); diff --git a/src/som/interpreter/nodes/ReturnNonLocalNode.java b/src/som/interpreter/nodes/ReturnNonLocalNode.java index 305907ac6e..a641f1e2d4 100644 --- a/src/som/interpreter/nodes/ReturnNonLocalNode.java +++ b/src/som/interpreter/nodes/ReturnNonLocalNode.java @@ -94,7 +94,8 @@ public Object executeGeneric(final VirtualFrame frame) { SInvokable invokable = (SInvokable) Types.getClassOf(self).lookupMessage( escapedBlock, AccessModifier.PROTECTED); - return invokable.invoke(call, new Object[] {self, block, SArguments.getShadowStackEntry(frame)}); + return invokable.invoke(call, + new Object[] {self, block, SArguments.getShadowStackEntry(frame)}); } } diff --git a/src/som/interpreter/nodes/dispatch/BlockDispatchNode.java b/src/som/interpreter/nodes/dispatch/BlockDispatchNode.java index 0c7ece0b07..ab4857a15b 100644 --- a/src/som/interpreter/nodes/dispatch/BlockDispatchNode.java +++ b/src/som/interpreter/nodes/dispatch/BlockDispatchNode.java @@ -68,8 +68,9 @@ protected static final IndirectCallNode createIndirectCall() { public Object activateCachedBlock(VirtualFrame frame, final Object[] arguments, @Cached("getMethod(arguments)") final SInvokable cached, @Cached("createCallNode(arguments)") final DirectCallNode call) { - if(VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE && !(arguments[arguments.length-1] instanceof ShadowStackEntry)){ - Object[] newArguments = Arrays.copyOf(arguments,arguments.length+1); + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE + && !(arguments[arguments.length - 1] instanceof ShadowStackEntry)) { + Object[] newArguments = Arrays.copyOf(arguments, arguments.length + 1); newArguments[arguments.length] = SArguments.getShadowStackEntry(frame); return call.call(newArguments); } diff --git a/src/som/interpreter/nodes/dispatch/CachedDnuNode.java b/src/som/interpreter/nodes/dispatch/CachedDnuNode.java index bb43c7525f..7ed60532df 100644 --- a/src/som/interpreter/nodes/dispatch/CachedDnuNode.java +++ b/src/som/interpreter/nodes/dispatch/CachedDnuNode.java @@ -80,13 +80,13 @@ protected Object performDnu(final Object[] arguments, Object[] argsArr; SArray.SImmutableArray dnuArguments = SArguments.getArgumentsWithoutReceiver(arguments); if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { - argsArr = new Object[]{ - rcvr, selector, dnuArguments, - arguments[arguments.length - 1] + argsArr = new Object[] { + rcvr, selector, dnuArguments, + arguments[arguments.length - 1] }; } else { - argsArr = new Object[]{ - rcvr, selector, dnuArguments}; + argsArr = new Object[] { + rcvr, selector, dnuArguments}; } return cachedMethod.call(argsArr); } diff --git a/src/som/interpreter/nodes/literals/ObjectLiteralNode.java b/src/som/interpreter/nodes/literals/ObjectLiteralNode.java index 7ffbefd632..8b8c7ee72d 100644 --- a/src/som/interpreter/nodes/literals/ObjectLiteralNode.java +++ b/src/som/interpreter/nodes/literals/ObjectLiteralNode.java @@ -49,19 +49,20 @@ public Object executeGeneric(final VirtualFrame frame) { Object superclassAndMixins; if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { - superclassAndMixins = superClassResolver.call(outer, SArguments.getShadowStackEntry(frame)); + superclassAndMixins = + superClassResolver.call(outer, SArguments.getShadowStackEntry(frame)); } else { - superclassAndMixins = superClassResolver.call(outer); + superclassAndMixins = superClassResolver.call(outer); } SClass sClassObject = instantiation.execute(outer, superclassAndMixins, frame.materialize()); Object[] arguments; - if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE){ - arguments = new Object[] {sClassObject,null}; + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { + arguments = new Object[] {sClassObject, null}; } else { arguments = new Object[] {sClassObject}; } - return newMessage.doPreEvaluated(frame, arguments ); + return newMessage.doPreEvaluated(frame, arguments); } @Override diff --git a/src/som/interpreter/nodes/nary/EagerBinaryPrimitiveNode.java b/src/som/interpreter/nodes/nary/EagerBinaryPrimitiveNode.java index ed7586190c..e11780c59e 100644 --- a/src/som/interpreter/nodes/nary/EagerBinaryPrimitiveNode.java +++ b/src/som/interpreter/nodes/nary/EagerBinaryPrimitiveNode.java @@ -93,17 +93,18 @@ public Object executeGeneric(final VirtualFrame frame) { return executeEvaluated(frame, rcvr, arg); } + /** MATTEO: HERE IS THE SPOT IN WHICH I MIGHT BREAK EVERYTHING. **/ public Object executeEvaluated(final VirtualFrame frame, final Object receiver, final Object argument) { try { -// if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { -// Object[] args; -// -// args = new Object[] {receiver, argument, null}; -// -// return makeGenericSend().doPreEvaluated(frame, args); -// } + // if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { + // Object[] args; + // + // args = new Object[] {receiver, argument, null}; + // + // return makeGenericSend().doPreEvaluated(frame, args); + // } return primitive.executeEvaluated(frame, receiver, argument); } catch (UnsupportedSpecializationException e) { TruffleCompiler.transferToInterpreterAndInvalidate( diff --git a/src/som/interpreter/nodes/nary/EagerTernaryPrimitiveNode.java b/src/som/interpreter/nodes/nary/EagerTernaryPrimitiveNode.java index b75e8cdcb7..1c3072440e 100644 --- a/src/som/interpreter/nodes/nary/EagerTernaryPrimitiveNode.java +++ b/src/som/interpreter/nodes/nary/EagerTernaryPrimitiveNode.java @@ -105,12 +105,12 @@ public Object executeEvaluated(final VirtualFrame frame, } catch (UnsupportedSpecializationException e) { TruffleCompiler.transferToInterpreterAndInvalidate( "Eager Primitive with unsupported specialization."); - Object[] arguments = {receiver, argument1, argument2}; + Object[] arguments = {receiver, argument1, argument2}; if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { - arguments = new Object[]{receiver, argument1, argument2, null}; + arguments = new Object[] {receiver, argument1, argument2, null}; } return makeGenericSend().doPreEvaluated(frame, - arguments ); + arguments); } } diff --git a/src/som/interpreter/nodes/specialized/IfMessageNode.java b/src/som/interpreter/nodes/specialized/IfMessageNode.java index 6537a5332e..b8d0704724 100644 --- a/src/som/interpreter/nodes/specialized/IfMessageNode.java +++ b/src/som/interpreter/nodes/specialized/IfMessageNode.java @@ -57,9 +57,9 @@ public final Object cachedBlock(VirtualFrame frame, final boolean rcvr, final SB @Cached("createDirect(method)") final DirectCallNode callTarget) { Object[] args; if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { - args = new Object[]{arg, SArguments.getShadowStackEntry(frame)}; + args = new Object[] {arg, SArguments.getShadowStackEntry(frame)}; } else { - args = new Object[]{arg}; + args = new Object[] {arg}; } // this was there before Async Stack traces if (condProf.profile(rcvr == expected)) { diff --git a/src/som/primitives/ActivitySpawn.java b/src/som/primitives/ActivitySpawn.java index c24d697b6c..7cccaef592 100644 --- a/src/som/primitives/ActivitySpawn.java +++ b/src/som/primitives/ActivitySpawn.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.concurrent.ForkJoinPool; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; @@ -157,21 +158,26 @@ public final SpawnPrim initialize(final VM vm) { } @Specialization(guards = "clazz == TaskClass") - //@TruffleBoundary - public final SomForkJoinTask spawnTask(VirtualFrame frame, final SClass clazz, final SBlock block) { + public final SomForkJoinTask spawnTask(VirtualFrame frame, final SClass clazz, + final SBlock block) { Object[] arguments; if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { arguments = new Object[] {block, SArguments.getShadowStackEntry(frame)}; } else { - arguments =new Object[] {block}; + arguments = new Object[] {block}; } SomForkJoinTask task = createTask(arguments, onExec.executeShouldHalt(), block, sourceSection, traceProcCreation, vm); - forkJoinPool.execute(task); + fork(task); return task; } + @TruffleBoundary + private void fork(final SomForkJoinTask task) { + forkJoinPool.execute(task); + } + @Specialization(guards = "clazz == ThreadClass") @TruffleBoundary public final SomThreadTask spawnThread(final SClass clazz, final SBlock block) { @@ -280,8 +286,8 @@ public final Object spawnProcess(final VirtualFrame frame, final SImmutableObjec notAValue.signal(frame, procCls); } Object[] arguments = argArr; - if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE){ - arguments = Arrays.copyOf(argArr,argArr.length+1); + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { + arguments = Arrays.copyOf(argArr, argArr.length + 1); arguments[argArr.length] = SArguments.getShadowStackEntry(frame); } spawnProcess(procCls, arguments, traceProcCreation); diff --git a/src/som/primitives/FilePrims.java b/src/som/primitives/FilePrims.java index 04c72c6ad1..ae18efb49a 100644 --- a/src/som/primitives/FilePrims.java +++ b/src/som/primitives/FilePrims.java @@ -182,7 +182,8 @@ public abstract static class FileOpenPrim extends BinaryExpressionNode { @Child protected BlockDispatchNode dispatchHandler = BlockDispatchNodeGen.create(); @Specialization - public final Object fileOpen(final VirtualFrame frame, final SFileDescriptor file, final SBlock handler) { + public final Object fileOpen(final VirtualFrame frame, final SFileDescriptor file, + final SBlock handler) { return file.openFile(frame, handler, dispatchHandler); } } diff --git a/src/som/primitives/ObjectPrims.java b/src/som/primitives/ObjectPrims.java index 55b44afaaa..0e0441fd22 100644 --- a/src/som/primitives/ObjectPrims.java +++ b/src/som/primitives/ObjectPrims.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.debug.DebuggerTags.AlwaysHalt; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.GenerateNodeFactory; @@ -47,8 +48,6 @@ import tools.dym.Tags.OpComparison; - - public final class ObjectPrims { @GenerateNodeFactory @@ -56,14 +55,18 @@ public final class ObjectPrims { public abstract static class AsyncTracePrim extends UnaryExpressionNode { @Specialization public final Object doSAbstractObject(VirtualFrame frame, final Object receiver) { + CompilerDirectives.transferToInterpreter(); + Output.errorPrintln("ASYNC STACK TRACE"); - StackIterator.ShadowStackIterator iterator = new StackIterator.ShadowStackIterator.HaltShadowStackIterator(this.sourceSection); + StackIterator.ShadowStackIterator iterator = + new StackIterator.ShadowStackIterator.HaltShadowStackIterator(this.sourceSection); List stack = new ArrayList<>(); - while (iterator.hasNext()){ + while (iterator.hasNext()) { ApplicationThreadStack.StackFrame sf = iterator.next(); if (sf != null) { SourceSection section = sf.section; - stack.add(sf.name + ", " + section.getSource().getName() + ", " + section.getStartLine()); + stack.add( + sf.name + ", " + section.getSource().getName() + ", " + section.getStartLine()); } } return new SImmutableArray(stack.toArray(), Classes.arrayClass); @@ -88,12 +91,14 @@ public final Object doSAbstractObject(VirtualFrame frame, final Object receiver) boolean keepLooping = true; String methodName; while (keepLooping && currentEntry != null) { - if(currentEntry instanceof ShadowStackEntry.EntryForPromiseResolution){ - methodName = ((ShadowStackEntry.EntryForPromiseResolution) currentEntry).resolutionLocation.toString(); + if (currentEntry instanceof ShadowStackEntry.EntryForPromiseResolution) { + methodName = + ((ShadowStackEntry.EntryForPromiseResolution) currentEntry).resolutionLocation.toString(); } else { - methodName = ((CachedDispatchNode) currentEntry.getExpression()).getCachedMethod().getName(); + methodName = + ((CachedDispatchNode) currentEntry.getExpression()).getCachedMethod().getName(); } - if (methodName.equals("ON_WHEN_RESOLVED_BLOCK")) { + if (methodName.equals("ON_WHEN_RESOLVED_BLOCK")) { keepLooping = false; } else { currentEntry = currentEntry.getPreviousShadowStackEntry(); diff --git a/src/som/primitives/PathPrims.java b/src/som/primitives/PathPrims.java index 4de0188fa8..3f55c825e8 100644 --- a/src/som/primitives/PathPrims.java +++ b/src/som/primitives/PathPrims.java @@ -93,7 +93,8 @@ public abstract static class FileCopyPrim extends TernaryExpressionNode { @Child protected BlockDispatchNode dispatchHandler = BlockDispatchNodeGen.create(); @Specialization - public final Object copyAs(final VirtualFrame frame, final String source, final String dest, final SBlock fail) { + public final Object copyAs(final VirtualFrame frame, final String source, + final String dest, final SBlock fail) { try { copy(source, dest); } catch (IOException e) { @@ -114,7 +115,8 @@ public abstract static class CreateDirectoryPrim extends BinaryExpressionNode { @Child protected BlockDispatchNode dispatchHandler = BlockDispatchNodeGen.create(); @Specialization - public final Object createDirectory(final VirtualFrame frame, final String dir, final SBlock fail) { + public final Object createDirectory(final VirtualFrame frame, final String dir, + final SBlock fail) { try { createDirectory(dir); } catch (IOException e) { @@ -135,7 +137,8 @@ public abstract static class DeleteDirectoryPrim extends BinaryExpressionNode { @Child protected BlockDispatchNode dispatchHandler = BlockDispatchNodeGen.create(); @Specialization - public final Object delteDirectory(final VirtualFrame frame, final String dir, final SBlock fail) { + public final Object delteDirectory(final VirtualFrame frame, final String dir, + final SBlock fail) { try { delete(dir); } catch (IOException e) { @@ -222,7 +225,8 @@ public abstract static class FileMovePrim extends TernaryExpressionNode { @Child protected BlockDispatchNode dispatchHandler = BlockDispatchNodeGen.create(); @Specialization - public final Object moveAs(final VirtualFrame frame, final String source, final String dest, final SBlock fail) { + public final Object moveAs(final VirtualFrame frame, final String source, + final String dest, final SBlock fail) { try { move(source, dest); } catch (IOException e) { diff --git a/src/som/primitives/arrays/ArraySetAllStrategy.java b/src/som/primitives/arrays/ArraySetAllStrategy.java index 7a2220f17a..7ceae6ce7f 100644 --- a/src/som/primitives/arrays/ArraySetAllStrategy.java +++ b/src/som/primitives/arrays/ArraySetAllStrategy.java @@ -58,7 +58,7 @@ public static void evalBlockForRemaining(final VirtualFrame frame, final SBlock } } - public static void evalBlockForRemaining(final VirtualFrame frame,final SBlock block, + public static void evalBlockForRemaining(final VirtualFrame frame, final SBlock block, final long length, final boolean[] storage, final BlockDispatchNode blockDispatch) { for (int i = SArray.FIRST_IDX + 1; i < length; i++) { @@ -211,7 +211,8 @@ public static Object evaluateFirstDetermineStorageAndEvaluateRest(final VirtualF final ExceptionSignalingNode notAValue) { // TODO: this version does not handle the case that a subsequent value is // not of the expected type... - Object result = blockDispatch.executeDispatch(frame, new Object[] {blockWithArg, (long) 1}); + Object result = + blockDispatch.executeDispatch(frame, new Object[] {blockWithArg, (long) 1}); if (result instanceof Long) { long[] newStorage = new long[(int) length]; diff --git a/src/som/primitives/arrays/PutAllNode.java b/src/som/primitives/arrays/PutAllNode.java index 0305be8061..aceaba2c42 100644 --- a/src/som/primitives/arrays/PutAllNode.java +++ b/src/som/primitives/arrays/PutAllNode.java @@ -59,8 +59,9 @@ public SMutableArray doPutEvalBlock(VirtualFrame frame, final SMutableArray rcvr } try { - Object newStorage = ArraySetAllStrategy.evaluateFirstDetermineStorageAndEvaluateRest(frame, - block, length, this.block); + Object newStorage = + ArraySetAllStrategy.evaluateFirstDetermineStorageAndEvaluateRest(frame, + block, length, this.block); rcvr.transitionTo(newStorage); } finally { if (CompilerDirectives.inInterpreter()) { diff --git a/src/som/primitives/processes/ChannelPrimitives.java b/src/som/primitives/processes/ChannelPrimitives.java index a51a666c75..fa83a16dc8 100644 --- a/src/som/primitives/processes/ChannelPrimitives.java +++ b/src/som/primitives/processes/ChannelPrimitives.java @@ -123,10 +123,10 @@ public void run() { Symbols.symbolFor("run"), AccessModifier.PROTECTED); beforeExec(disp); - if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE){ - disp.invoke(new Object[]{obj,null}); + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { + disp.invoke(new Object[] {obj, null}); } else { - disp.invoke(new Object[]{obj}); + disp.invoke(new Object[] {obj}); } } catch (Throwable t) { t.printStackTrace(); diff --git a/src/som/primitives/reflection/AbstractSymbolDispatch.java b/src/som/primitives/reflection/AbstractSymbolDispatch.java index d1fa7dc475..fddaff0892 100644 --- a/src/som/primitives/reflection/AbstractSymbolDispatch.java +++ b/src/som/primitives/reflection/AbstractSymbolDispatch.java @@ -73,9 +73,9 @@ public Object doCachedWithoutArgArr(final VirtualFrame frame, @Cached("createForPerformNodes(selector)") final AbstractMessageSendNode cachedSend) { Object[] arguments; if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { - arguments = new Object[]{receiver, null}; + arguments = new Object[] {receiver, null}; } else { - arguments = new Object[]{receiver}; + arguments = new Object[] {receiver}; } PreevaluatedExpression realCachedSend = cachedSend; return realCachedSend.doPreEvaluated(frame, arguments); @@ -89,8 +89,8 @@ public Object doCached(final VirtualFrame frame, @Cached("createArgArrayNode()") final ToArgumentsArrayNode toArgArray) { Object[] arguments = toArgArray.executedEvaluated(argsArr, receiver); if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { - arguments = Arrays.copyOf(arguments,arguments.length+1); - arguments[arguments.length-1] = null; + arguments = Arrays.copyOf(arguments, arguments.length + 1); + arguments[arguments.length - 1] = null; } PreevaluatedExpression realCachedSend = cachedSend; @@ -99,19 +99,21 @@ public Object doCached(final VirtualFrame frame, @Specialization(replaces = "doCachedWithoutArgArr", guards = "argsArr == null") // @TruffleBoundary - public Object doUncached(final VirtualFrame frame, final Object receiver, final SSymbol selector, - final Object argsArr, - @Cached("create()") final IndirectCallNode call, - @Cached ShadowStackEntryLoad shadowStackEntryLoad) { + public Object doUncached(final VirtualFrame frame, final Object receiver, + final SSymbol selector, + final Object argsArr, + @Cached("create()") final IndirectCallNode call, + @Cached ShadowStackEntryLoad shadowStackEntryLoad) { CompilerDirectives.transferToInterpreter(); SClass rcvrClass = Types.getClassOf(receiver); Dispatchable invokable = rcvrClass.lookupMessage(selector, AccessModifier.PUBLIC); Object[] arguments; if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { - arguments = new Object[]{receiver, null}; - BackCacheCallNode.setShadowStackEntry(frame, false, arguments, this, shadowStackEntryLoad); + arguments = new Object[] {receiver, null}; + BackCacheCallNode.setShadowStackEntry(frame, false, arguments, this, + shadowStackEntryLoad); } else { - arguments = new Object[]{receiver}; + arguments = new Object[] {receiver}; } if (invokable != null) { diff --git a/src/som/primitives/threading/MutexPrimitives.java b/src/som/primitives/threading/MutexPrimitives.java index 92528e0cd9..df0c1a34a3 100644 --- a/src/som/primitives/threading/MutexPrimitives.java +++ b/src/som/primitives/threading/MutexPrimitives.java @@ -103,7 +103,8 @@ public abstract static class CritialPrim extends BinaryExpressionNode { @Child protected BlockDispatchNode dispatchBody = BlockDispatchNodeGen.create(); @Specialization - public Object critical(final VirtualFrame frame, final ReentrantLock lock, final SBlock block) { + public Object critical(final VirtualFrame frame, final ReentrantLock lock, + final SBlock block) { LockPrim.lock(lock); try { return dispatchBody.executeDispatch(frame, new Object[] {block}); diff --git a/src/som/primitives/threading/TaskThreads.java b/src/som/primitives/threading/TaskThreads.java index 90a82fadbe..ee6e971675 100644 --- a/src/som/primitives/threading/TaskThreads.java +++ b/src/som/primitives/threading/TaskThreads.java @@ -78,10 +78,11 @@ protected final Object compute() { ForkJoinThread thread = (ForkJoinThread) Thread.currentThread(); thread.task = this; - if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE){ - if (!(argArray[argArray.length-1] instanceof ShadowStackEntry)) { + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { + if (!(argArray[argArray.length - 1] instanceof ShadowStackEntry)) { Object[] arguments = Arrays.copyOf(argArray, argArray.length + 1); - arguments[argArray.length] = SArguments.instantiateTopShadowStackEntry(target.getRootNode()); + arguments[argArray.length] = + SArguments.instantiateTopShadowStackEntry(target.getRootNode()); return target.call(arguments); } } @@ -215,7 +216,6 @@ public static class TracedThreadTask extends SomThreadTask { protected final VM vm; - public TracedThreadTask(final Object[] argArray, final boolean stopOnRoot, final VM vm) { super(argArray, stopOnRoot); this.id = TracingActivityThread.newEntityId(); diff --git a/src/som/primitives/transactions/AtomicPrim.java b/src/som/primitives/transactions/AtomicPrim.java index 8714e1f06f..0ff01380c3 100644 --- a/src/som/primitives/transactions/AtomicPrim.java +++ b/src/som/primitives/transactions/AtomicPrim.java @@ -69,7 +69,7 @@ public final Object atomic(final VirtualFrame frame, final SClass clazz, } } Object[] arguments; - if(VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { arguments = new Object[] {block, SArguments.getShadowStackEntry(frame)}; } else { arguments = new Object[] {block}; diff --git a/src/som/vmobjects/SBlock.java b/src/som/vmobjects/SBlock.java index 65e5e9f2f9..6ddc8eba91 100644 --- a/src/som/vmobjects/SBlock.java +++ b/src/som/vmobjects/SBlock.java @@ -92,7 +92,7 @@ public boolean isExecutable() { } @ExportMessage - public Object execute( final Object[] args) + public Object execute(final Object[] args) throws UnsupportedTypeException, ArityException, UnsupportedMessageException { VM.thisMethodNeedsToBeOptimized( "Not ready for compilation, just moved from old interop code"); diff --git a/src/som/vmobjects/SFileDescriptor.java b/src/som/vmobjects/SFileDescriptor.java index cd121273b5..deac3de774 100644 --- a/src/som/vmobjects/SFileDescriptor.java +++ b/src/som/vmobjects/SFileDescriptor.java @@ -49,8 +49,9 @@ public SFileDescriptor(final String uri) { f = new File(uri); } - //@TruffleBoundary - public Object openFile(final VirtualFrame frame, final SBlock fail, final BlockDispatchNode dispatchHandler) { + // @TruffleBoundary + public Object openFile(final VirtualFrame frame, final SBlock fail, + final BlockDispatchNode dispatchHandler) { long[] storage = new long[bufferSize]; buffer = new SMutableArray(storage, Classes.arrayClass); @@ -94,10 +95,10 @@ private void closeFile() throws IOException { public int read(final VirtualFrame frame, final long position, final SBlock fail, final BlockDispatchNode dispatchHandler, final BranchProfile errorCases) { Object[] arguments; - if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE){ - arguments = new Object[]{fail,null, SArguments.getShadowStackEntry(frame)}; + if (VmSettings.ACTOR_ASYNC_STACK_TRACE_STRUCTURE) { + arguments = new Object[] {fail, null, SArguments.getShadowStackEntry(frame)}; } else { - arguments = new Object[]{fail,null}; + arguments = new Object[] {fail, null}; } if (raf == null) { errorCases.enter(); @@ -125,7 +126,7 @@ public int read(final VirtualFrame frame, final long position, final SBlock fail } catch (IOException e) { errorCases.enter(); arguments[2] = toString(e); - dispatchHandler.executeDispatch(frame,arguments); + dispatchHandler.executeDispatch(frame, arguments); } // move read data to the storage diff --git a/src/tools/concurrency/KomposTrace.java b/src/tools/concurrency/KomposTrace.java index 2a4519c257..1cc63227e5 100644 --- a/src/tools/concurrency/KomposTrace.java +++ b/src/tools/concurrency/KomposTrace.java @@ -345,8 +345,9 @@ private void writeSourceSection(final SourceSection origin) { return; } - //assert !origin.getSource() - // .isInternal() : "Need special handling to ensure we see user code reported to trace/debugger"; + // assert !origin.getSource() + // .isInternal() : "Need special handling to ensure we see user code reported to + // trace/debugger"; putShort(Symbols.symbolFor(SourceCoordinate.getURI(origin.getSource())).getSymbolId()); putShort((short) origin.getStartLine()); putShort((short) origin.getStartColumn()); diff --git a/src/tools/debugger/message/EvaluateExpressionRequest.java b/src/tools/debugger/message/EvaluateExpressionRequest.java index 7049cc5059..1bf67e646a 100644 --- a/src/tools/debugger/message/EvaluateExpressionRequest.java +++ b/src/tools/debugger/message/EvaluateExpressionRequest.java @@ -1,4 +1,5 @@ package tools.debugger.message; + import com.oracle.truffle.api.debug.DebugValue; import org.java_websocket.WebSocket; @@ -9,51 +10,56 @@ import java.util.Iterator; + public class EvaluateExpressionRequest extends Message.IncommingMessage { - private class EvaluateExpressionTask extends ApplicationThreadTask { - - private final FrontendConnector frontend; - private final Suspension suspension; - private final int frameID; - private final String expression; - public Boolean executed = false; - public DebugValue resultValue; - - EvaluateExpressionTask(final FrontendConnector frontend, final Suspension suspension, int frameID, String expression) { - this.frontend = frontend; - this.suspension = suspension; - this.frameID = frameID; - this.expression = expression; - - } - - @Override - protected boolean execute() { -// Iterator it =frontend.getSuspension(0).getEvent().getStackFrames().iterator(); -// DebugStackFrame frame = null; -// for(int i=0;i<=frameID;i++){ -// frame = it.next(); -// } -// resultValue = frame.eval("class _test = (||) \n ( \n public expression() = (^ "+ expression + ". \n ) \n )"); -// executed = true; -// return true; - return true; - } - } + private class EvaluateExpressionTask extends ApplicationThreadTask { - private String expression; - private int frameId; + private final FrontendConnector frontend; + private final Suspension suspension; + private final int frameID; + private final String expression; + public Boolean executed = false; + public DebugValue resultValue; + + EvaluateExpressionTask(final FrontendConnector frontend, final Suspension suspension, + int frameID, String expression) { + this.frontend = frontend; + this.suspension = suspension; + this.frameID = frameID; + this.expression = expression; + + } @Override - public void process(FrontendConnector connector, WebSocket conn) { - Suspension suspension = connector.getSuspension(0); - EvaluateExpressionTask task = new EvaluateExpressionTask(connector,suspension,frameId,expression); - suspension.submitTask(task); - int a = 0; - while (!task.executed){ - a = a +1; - } - DebugValue value = task.resultValue; + protected boolean execute() { + // Iterator it + // =frontend.getSuspension(0).getEvent().getStackFrames().iterator(); + // DebugStackFrame frame = null; + // for(int i=0;i<=frameID;i++){ + // frame = it.next(); + // } + // resultValue = frame.eval("class _test = (||) \n ( \n public expression() = (^ "+ + // expression + ". \n ) \n )"); + // executed = true; + // return true; + return true; + } + } + + private String expression; + private int frameId; + + @Override + public void process(FrontendConnector connector, WebSocket conn) { + Suspension suspension = connector.getSuspension(0); + EvaluateExpressionTask task = + new EvaluateExpressionTask(connector, suspension, frameId, expression); + suspension.submitTask(task); + int a = 0; + while (!task.executed) { + a = a + 1; } + DebugValue value = task.resultValue; + } } diff --git a/tests/java/debugger/ReflectionRegistrationTests.java b/tests/java/debugger/ReflectionRegistrationTests.java index 3be5b4e5c9..257c75fe53 100644 --- a/tests/java/debugger/ReflectionRegistrationTests.java +++ b/tests/java/debugger/ReflectionRegistrationTests.java @@ -17,6 +17,6 @@ public void runtimeRegistration() { rrr.beforeAnalysis(null); HashSet> registeredClasses = rrr.getRegisteredClasses(); - assertEquals(59, registeredClasses.size()); + assertEquals(60, registeredClasses.size()); } } diff --git a/tests/java/som/interpreter/objectstorage/SafepointPhaserTest.java b/tests/java/som/interpreter/objectstorage/SafepointPhaserTest.java deleted file mode 100644 index e9413f9b59..0000000000 --- a/tests/java/som/interpreter/objectstorage/SafepointPhaserTest.java +++ /dev/null @@ -1,186 +0,0 @@ -package som.interpreter.objectstorage; - -import static org.junit.Assert.assertEquals; - -import java.util.concurrent.BrokenBarrierException; -import java.util.concurrent.CyclicBarrier; - -import org.graalvm.collections.EconomicSet; -import org.junit.Test; - -import som.compiler.AccessModifier; -import som.compiler.MixinDefinition.SlotDefinition; -import som.tests.ParallelHelper; -import som.vmobjects.SClass; -import som.vmobjects.SObject.SMutableObject; - - -public class SafepointPhaserTest { - - private final SClass instanceClass; - private final ClassFactory factory; - private final ObjectLayout layout; - - public SafepointPhaserTest() { - SlotDefinition slotDef = new SlotDefinition(null, AccessModifier.PUBLIC, false, null); - EconomicSet instanceSlots = EconomicSet.create(); - instanceSlots.add(slotDef); - - instanceClass = new SClass(null); - factory = new ClassFactory(null, null, instanceSlots, null, false, false, false, null, - false, null, null); - - instanceClass.initializeStructure(null, null, null, false, false, false, factory); - layout = factory.getInstanceLayout(); - } - - @Test - public void testThreadsRegisterAndUnregister() throws InterruptedException { - CyclicBarrier barrier = new CyclicBarrier(ParallelHelper.getNumberOfThreads()); - - SafepointPhaser phaser = new SafepointPhaser(ObjectTransitionSafepoint.INSTANCE); - ParallelHelper.executeNTimesInParallel((final int id) -> { - - phaser.register(); - - try { - barrier.await(); - } catch (InterruptedException | BrokenBarrierException e) { - throw new RuntimeException(e); - } - - phaser.arriveAndDeregister(); - return null; - }); - - assertEquals(phaser.getPhase(), 2); - } - - @Test - public void testThreadsRegisterTriggerSafepointAndUnregister() throws InterruptedException { - CyclicBarrier barrier = new CyclicBarrier(ParallelHelper.getNumberOfThreads()); - - ObjectTransitionSafepoint.reset(); - - ParallelHelper.executeNTimesInParallel((final int id) -> { - - try { - ObjectTransitionSafepoint.INSTANCE.register(); - - try { - barrier.await(); - } catch (InterruptedException | BrokenBarrierException e) { - throw new RuntimeException(e); - } - - ObjectTransitionSafepoint.INSTANCE.transitionObject( - new SMutableObject(instanceClass, factory, layout)); - } finally { - ObjectTransitionSafepoint.INSTANCE.unregister(); - } - return null; - }); - } - - private void transitionObject() { - for (int i = 0; i < 1181; i += 1) { - ObjectTransitionSafepoint.INSTANCE.transitionObject( - new SMutableObject(instanceClass, factory, layout)); - } - } - - @Test - public void testSafepointStorm() throws InterruptedException { - ObjectTransitionSafepoint.reset(); - ParallelHelper.executeNTimesInParallel((final int id) -> { - - try { - ObjectTransitionSafepoint.INSTANCE.register(); - - for (int i = 0; i < 1181; i += 1) { - transitionObject(); - } - } finally { - ObjectTransitionSafepoint.INSTANCE.unregister(); - } - return null; - }, 240); - } - - @Test - public void testSingleSafepointStorm() throws InterruptedException { - ObjectTransitionSafepoint.reset(); - ParallelHelper.executeNTimesInParallel((final int id) -> { - try { - ObjectTransitionSafepoint.INSTANCE.register(); - - for (int i = 0; i < 100_000; i += 1) { - if (id == 0) { - ObjectTransitionSafepoint.INSTANCE.transitionObject( - new SMutableObject(instanceClass, factory, layout)); - } else { - ObjectTransitionSafepoint.INSTANCE.checkAndPerformSafepoint(); - } - } - } finally { - ObjectTransitionSafepoint.INSTANCE.unregister(); - } - return null; - }, 240); - } - - @Test - public void testSafepointRegisterStorm() throws InterruptedException { - ObjectTransitionSafepoint.reset(); - ParallelHelper.executeNTimesInParallel((final int id) -> { - for (int i = 0; i < 100_000; i += 1) { - try { - ObjectTransitionSafepoint.INSTANCE.register(); - - ObjectTransitionSafepoint.INSTANCE.transitionObject( - new SMutableObject(instanceClass, factory, layout)); - } finally { - ObjectTransitionSafepoint.INSTANCE.unregister(); - } - } - return null; - }, 120); - } - - @Test - public void testSingleSafepointRegisterStorm() throws InterruptedException { - ObjectTransitionSafepoint.reset(); - ParallelHelper.executeNTimesInParallel((final int id) -> { - for (int i = 0; i < 100_000; i += 1) { - try { - ObjectTransitionSafepoint.INSTANCE.register(); - - if (id == 0) { - ObjectTransitionSafepoint.INSTANCE.transitionObject( - new SMutableObject(instanceClass, factory, layout)); - } else { - ObjectTransitionSafepoint.INSTANCE.checkAndPerformSafepoint(); - } - } finally { - ObjectTransitionSafepoint.INSTANCE.unregister(); - } - } - return null; - }, 60); - } - - @Test - public void testRegisterStorm() throws InterruptedException { - ObjectTransitionSafepoint.reset(); - ParallelHelper.executeNTimesInParallel((final int id) -> { - for (int i = 0; i < 100_000; i += 1) { - try { - ObjectTransitionSafepoint.INSTANCE.register(); - } finally { - ObjectTransitionSafepoint.INSTANCE.unregister(); - } - } - return null; - }, 60); - } -}