Skip to content

Commit e15520b

Browse files
[GR-34219] [GR-34235] Backport: Instrumentation-related fixes.
PullRequest: js/2186
2 parents 9145ce7 + 423569e commit e15520b

File tree

5 files changed

+109
-3
lines changed

5 files changed

+109
-3
lines changed

graal-js/src/com.oracle.truffle.js.test.instrumentation/src/com/oracle/truffle/js/test/instrumentation/GR18957.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -42,7 +42,10 @@
4242

4343
import com.oracle.truffle.api.instrumentation.LoadSourceEvent;
4444
import com.oracle.truffle.api.instrumentation.LoadSourceListener;
45+
import com.oracle.truffle.api.instrumentation.LoadSourceSectionEvent;
46+
import com.oracle.truffle.api.instrumentation.LoadSourceSectionListener;
4547
import com.oracle.truffle.api.instrumentation.SourceFilter;
48+
import com.oracle.truffle.api.instrumentation.SourceSectionFilter;
4649
import com.oracle.truffle.api.instrumentation.TruffleInstrument;
4750
import com.oracle.truffle.js.lang.JavaScriptLanguage;
4851
import org.graalvm.polyglot.Context;
@@ -83,6 +86,12 @@ public void onLoad(LoadSourceEvent event) {
8386
// no action needed
8487
}
8588
}, true);
89+
env.getInstrumenter().visitLoadedSourceSections(SourceSectionFilter.ANY, new LoadSourceSectionListener() {
90+
@Override
91+
public void onLoad(LoadSourceSectionEvent event) {
92+
// no action needed
93+
}
94+
});
8695
}
8796
}
8897
}

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/binary/JSTypeofIdenticalNode.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import com.oracle.truffle.api.library.CachedLibrary;
6060
import com.oracle.truffle.api.object.DynamicObject;
6161
import com.oracle.truffle.api.profiles.BranchProfile;
62+
import com.oracle.truffle.js.lang.JavaScriptLanguage;
6263
import com.oracle.truffle.js.nodes.JavaScriptNode;
6364
import com.oracle.truffle.js.nodes.access.JSConstantNode;
6465
import com.oracle.truffle.js.nodes.access.JSConstantNode.JSConstantStringNode;
@@ -181,11 +182,27 @@ public InstrumentableNode materializeInstrumentableNodes(Set<Class<? extends Tag
181182
}
182183
}
183184

185+
private JavaScriptLanguage getLanguageSafe() {
186+
JavaScriptLanguage language = null;
187+
try {
188+
language = getRootNode().getLanguage(JavaScriptLanguage.class);
189+
if (language == null) {
190+
language = getLanguage();
191+
}
192+
} finally {
193+
return language;
194+
}
195+
}
196+
184197
private Object[] parseMaterializationInfo() {
185198
String literal;
186199
boolean identity;
187200
boolean typeofAsLeftOperand;
188-
JSContext context = getLanguage().getJSContext();
201+
JavaScriptLanguage language = getLanguageSafe();
202+
if (language == null) {
203+
return null;
204+
}
205+
JSContext context = language.getJSContext();
189206
try {
190207
Expression expression = context.getEvaluator().parseExpression(context, getSourceSection().getCharacters().toString());
191208
if (expression instanceof BinaryNode) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Copyright (c) 2021, 2021, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* The Universal Permissive License (UPL), Version 1.0
6+
*
7+
* Subject to the condition set forth below, permission is hereby granted to any
8+
* person obtaining a copy of this software, associated documentation and/or
9+
* data (collectively the "Software"), free of charge and under any and all
10+
* copyright rights in the Software, and any and all patent rights owned or
11+
* freely licensable by each licensor hereunder covering either (i) the
12+
* unmodified Software as contributed to or provided by such licensor, or (ii)
13+
* the Larger Works (as defined below), to deal in both
14+
*
15+
* (a) the Software, and
16+
*
17+
* (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
18+
* one is included with the Software each a "Larger Work" to which the Software
19+
* is contributed by such licensors),
20+
*
21+
* without restriction, including without limitation the rights to copy, create
22+
* derivative works of, display, perform, and distribute the Software and make,
23+
* use, sell, offer for sale, import, export, have made, and have sold the
24+
* Software and the Larger Work(s), and to sublicense the foregoing rights on
25+
* either these or other terms.
26+
*
27+
* This license is subject to the following condition:
28+
*
29+
* The above copyright notice and either this complete permission notice or at a
30+
* minimum a reference to the UPL must be included in all copies or substantial
31+
* portions of the Software.
32+
*
33+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39+
* SOFTWARE.
40+
*/
41+
package com.oracle.truffle.trufflenode.test;
42+
43+
import com.oracle.truffle.api.Option;
44+
import com.oracle.truffle.api.instrumentation.LoadSourceSectionEvent;
45+
import com.oracle.truffle.api.instrumentation.LoadSourceSectionListener;
46+
import com.oracle.truffle.api.instrumentation.SourceSectionFilter;
47+
import com.oracle.truffle.api.instrumentation.TruffleInstrument;
48+
import org.graalvm.options.OptionCategory;
49+
import org.graalvm.options.OptionDescriptors;
50+
import org.graalvm.options.OptionKey;
51+
52+
/**
53+
* Instrument with a source section listener (with a root name filter). It resembles
54+
* {@code coverage} instrument.
55+
*/
56+
@Option.Group(CoverageLikeInstrument.ID)
57+
@TruffleInstrument.Registration(id = CoverageLikeInstrument.ID, name = "Coverage-like Instrument")
58+
public class CoverageLikeInstrument extends TruffleInstrument implements LoadSourceSectionListener {
59+
static final String ID = "coverage-like-instrument";
60+
61+
@Option(name = "", help = "Enable the instrument.", category = OptionCategory.USER) //
62+
static final OptionKey<Boolean> ENABLED = new OptionKey<>(true);
63+
64+
@Override
65+
protected OptionDescriptors getOptionDescriptors() {
66+
return new CoverageLikeInstrumentOptionDescriptors();
67+
}
68+
69+
@Override
70+
protected void onCreate(final TruffleInstrument.Env environment) {
71+
SourceSectionFilter filter = SourceSectionFilter.newBuilder().rootNameIs((name) -> true).build();
72+
environment.getInstrumenter().attachLoadSourceSectionListener(filter, this, true);
73+
}
74+
75+
@Override
76+
public void onLoad(LoadSourceSectionEvent event) {
77+
}
78+
79+
}

graal-nodejs/mx.graal-nodejs/com.oracle.truffle.trufflenode/src/com/oracle/truffle/trufflenode/GraalJSAccess.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1752,6 +1752,7 @@ private DynamicObject functionTemplateCreateCallback(JSContext context, JSRealm
17521752
if (functionData == null) {
17531753
JSOrdinary instanceLayout = template.getInstanceTemplate().getInternalFieldCount() > 0 ? JSOrdinary.INTERNAL_FIELD_INSTANCE : JSOrdinary.INSTANCE;
17541754
functionData = JSFunctionData.create(context, template.getLength(), template.getClassName(), template.getPrototypeTemplate() != null, false, false, false);
1755+
template.setFunctionData(functionData);
17551756
CallTarget callTarget = Truffle.getRuntime().createCallTarget(new ExecuteNativeFunctionNode.NativeFunctionRootNode(this, context, template, false, false));
17561757
CallTarget newCallTarget = Truffle.getRuntime().createCallTarget(new ExecuteNativeFunctionNode.NativeFunctionRootNode(this, context, template, true, false));
17571758
CallTarget newTargetCallTarget = Truffle.getRuntime().createCallTarget(new ExecuteNativeFunctionNode.NativeFunctionRootNode(this, context, template, true, true));
@@ -1760,7 +1761,6 @@ private DynamicObject functionTemplateCreateCallback(JSContext context, JSRealm
17601761
functionData.setCallTarget(callTarget);
17611762
functionData.setConstructTarget(constructTarget);
17621763
functionData.setConstructNewTarget(constructNewTarget);
1763-
template.setFunctionData(functionData);
17641764
}
17651765

17661766
DynamicObject functionObject = JSFunction.create(realm, functionData);

graal-nodejs/mx.graal-nodejs/mx_graal_nodejs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ def testnodeInstrument(args, nonZeroIsFatal=True, out=None, err=None, cwd=None):
362362
test = join(_suite.dir, 'test', 'graal', 'instrument', 'async-test.js')
363363
node(['--experimental-options', '--testing-agent', '-ea', test], nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd)
364364
node(['--experimental-options', '--broken-instrument', '-e', '6*7'], nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd)
365+
node(['--experimental-options', '--coverage-like-instrument', '-e', '6*7'], nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd)
365366

366367
def testnode(args, nonZeroIsFatal=True, out=None, err=None, cwd=None):
367368
mode, vmArgs, progArgs = setupNodeEnvironment(args)

0 commit comments

Comments
 (0)