<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>So, you would only see a crash for the JNI upcall case only when
using a debug build, but would see a crash always for the Panama
upcall case.</p>
<p>Jorn<br>
</p>
<div class="moz-cite-prefix">On 27/07/2023 16:50, Jorn Vernee wrote:<br>
</div>
<blockquote type="cite" cite="mid:6335152b-41e0-366f-9b2f-f2e94b69faa1@oracle.com">
<p>We have a guarantee in UpcallLinker::on_entry to check that we
are coming from the native thread state:
<a class="moz-txt-link-freetext" href="https://github.com/openjdk/jdk/blob/8650026ff16e5c5eff897f9fd39c0c35fd8b7367/src/hotspot/share/prims/upcallLinker.cpp#L78" moz-do-not-send="true">https://github.com/openjdk/jdk/blob/8650026ff16e5c5eff897f9fd39c0c35fd8b7367/src/hotspot/share/prims/upcallLinker.cpp#L78</a>
(I believe we have a test for that as well).<br>
<br>
I think for JNI there's just an assert when we call from native
code into the JNI API and transition to the VM thread state from
native:
<a class="moz-txt-link-freetext" href="https://github.com/openjdk/jdk/blob/8650026ff16e5c5eff897f9fd39c0c35fd8b7367/src/hotspot/share/runtime/interfaceSupport.inline.hpp#L98" moz-do-not-send="true">https://github.com/openjdk/jdk/blob/8650026ff16e5c5eff897f9fd39c0c35fd8b7367/src/hotspot/share/runtime/interfaceSupport.inline.hpp#L98</a></p>
<p>Jorn<br>
</p>
<div class="moz-cite-prefix">On 27/07/2023 15:44, Maurizio
Cimadamore wrote:<br>
</div>
<blockquote type="cite" cite="mid:7169c7e4-235a-51ba-6e14-9590645247e6@oracle.com">
<p>The behavior is undefined. It might crash, or not.</p>
<p>While the description says that the downcall should not
upcall, please note that the Javadoc doesn't say anywhere that
ill-behaved downcalls will produce new errors. Moreover, the
javadoc says this:</p>
<p> </p>
<blockquote type="cite">
<p> Using this linker option when linking non trivial
functions is likely to have adverse effects, such as loss of
performance, or JVM crashes.</p>
</blockquote>
Basically, you are in undefined behavior territory. It seems to
me that you are inferring too much from the javadoc.
<p>While I agree it might be desirable to detect this and log
some kind of error (see email I sent yesterday), I don't think
that, as thing stands, the javadoc is incorrect, and/or
lacking information.</p>
<p>Maurizio<br>
</p>
<p><br>
</p>
<div class="moz-cite-prefix">On 27/07/2023 14:40, Cheng Jin
wrote:<br>
</div>
<blockquote type="cite" cite="mid:BN8PR15MB257733FE3CA75202C523ADD7F501A@BN8PR15MB2577.namprd15.prod.outlook.com">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
{font-family:DengXian;
panose-1:2 1 6 0 3 1 1 1 1 1;}@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}@font-face
{font-family:"\@DengXian";
panose-1:2 1 6 0 3 1 1 1 1 1;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:10.0pt;
font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}span.EmailStyle19
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}div.WordSection1
{page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">But I
tried a simple example to indirectly trigger a JNI
upcall within a trivial FFM downcall by saving a global
JNIEnv within a JNI downcall at first which works good
as follows. Does it mean that a FFM trivial downcall
literally doesn’t stop a JNI upcall which seems
inconsistent with the description of <a href="https://urldefense.com/v3/__https://download.java.net/java/early_access/jdk21/docs/api/java.base/java/lang/foreign/Linker.Option.html*isTrivial()__;Iw!!ACWV5N9M2RV99hQ!KpMq9yrQInVdYsiAcZWCDTeOZd_GLJwrDN4n06JvbKQ194M_eabqlUaxzgDuSjbnoxQLukS4Uu8wT7q__xolFW5e$" moz-do-not-send="true">
https://download.java.net/java/early_access/jdk21/docs/api/java.base/java/lang/foreign/Linker.Option.html#isTrivial()</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">or
OpenJDK doesn’t support such behavior mixed with JNI
& FFM?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt">[1]
JniTest.java<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:11.0pt">public
class JniTest {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
private static Linker linker = Linker.nativeLinker();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
static {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
System.loadLibrary("jnitest");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
private static final SymbolLookup nativeLibLookup =
SymbolLookup.loaderLookup();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">private
native int addJNI2Ints(int arg1, int arg2);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
public int <b>addJNI2Ints_Upcall</b>(int arg1, int
arg2) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
int sum = arg1 + arg2;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
System.out.println("trivial: addJNI2Ints_Upcall: sum = "
+ sum);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
return sum;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
public void test_add2Ints() throws Throwable {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
FunctionDescriptor fd = FunctionDescriptor.of(JAVA_INT,
JAVA_INT, JAVA_INT);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
MemorySegment functionSymbol =
nativeLibLookup.find("add2Ints").get();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
MethodHandle mh = linker.downcallHandle(functionSymbol,
fd, <b>Linker.Option.isTrivial()</b>);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
int result = (int)mh.invokeExact(112, 123);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
System.out.println("test_add2Ints result = " + result);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
public static void main(String[] args) throws Throwable
{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
JniTest test = new JniTest();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
int sum = test.<b>addJNI2Ints</b>(112, 123); </span><span style="font-size:11.0pt;font-family:Wingdings">ß</span><span style="font-size:11.0pt">-- call the JNI native at first
to save the global JNIEnv & jobject<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
System.out.println("addJNI2Ints sum = " + sum);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
test.test_<b>add2Ints</b>(); </span><span style="font-size:11.0pt;font-family:Wingdings">ß</span><span style="font-size:11.0pt">-- use saved the global JNIEnv
& jobject to trigger a JNI upcall in native.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt">[2]
JniTest.c<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:11.0pt">#include
<jni.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">#include
"JniTest.h"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">JNIEnv
*globalEnv;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">jobject
globalObj;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">JNIEXPORT
int JNICALL Java_JniTest_addJNI2Ints(JNIEnv *env,
jobject thisObj, jint arg1, jint arg2) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> jint
intSum = arg1 + arg2;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
globalEnv = env;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
globalObj = thisObj;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
printf("\nJava_JniTest_addJNI2Ints: env = %p, globalObj
= %p\n", globalEnv, globalObj);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
return intSum;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">int<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">add2Ints(int
intArg1, int intArg2)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
printf("\nadd2Ints: globalEnv = %p, globalObj = %p\n",
globalEnv, globalObj);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
jclass clazz =
(*globalEnv)->GetObjectClass(globalEnv, globalObj);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
jmethodID method =
(*globalEnv)->GetMethodID(globalEnv, clazz,
"addJNI2Ints_Upcall", "(II)I");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">
return (*globalEnv)->CallIntMethod(globalEnv,
globalObj, method, intArg1, intArg2);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[3]Commands:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">./jdk21_hotspot_x86_64/bin/javac
--enable-preview --source 21 -h . JniTest.java<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">gcc
-fPIC -I"./jdk21_hotspot_x86_64/include"
-I"./jdk21_hotspot_x86_64/include/linux" -shared -g -o
libjnitest.so JniTest.c<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">./jdk21_hotspot_x86_64/bin/java
--enable-preview -Djava.library.path=./jnitests
--enable-native-access=ALL-UNNAMED
-Dforeign.restricted=permit JniTest<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">[4]
Output:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Java_JniTest_addJNI2Ints:
env = 0x7f81f8028a08, globalObj = 0x7f81ff379998<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">addJNI2Ints
sum = 235<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">add2Ints:
intSum = 235<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">add2Ints:
globalEnv = 0x7f81f8028a08, globalObj = 0x7f81ff379998<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt">trivial:
addJNI2Ints_Upcall: sum = 235 </span></b><b><span style="font-size:11.0pt;font-family:Wingdings">ß</span></b><b><span style="font-size:11.0pt"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:11.0pt">test_add2Ints
result = 235<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Best
Regards<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Cheng
Jin<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #E1E1E1
1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:11.0pt" lang="EN-US">From:</span></b><span style="font-size:11.0pt" lang="EN-US"> Maurizio
Cimadamore <a class="moz-txt-link-rfc2396E" href="mailto:maurizio.cimadamore@oracle.com" moz-do-not-send="true"><maurizio.cimadamore@oracle.com></a>
<br>
<b>Sent:</b> Wednesday, July 26, 2023 8:45 PM<br>
<b>To:</b> Cheng Jin <a class="moz-txt-link-rfc2396E" href="mailto:jincheng@ca.ibm.com" moz-do-not-send="true"><jincheng@ca.ibm.com></a>;
<a class="moz-txt-link-abbreviated
moz-txt-link-freetext" href="mailto:panama-dev@openjdk.org" moz-do-not-send="true">panama-dev@openjdk.org</a><br>
<b>Subject:</b> [EXTERNAL] Re: Questions about the
trivial downcall<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">On 27/07/2023
01: 40, Cheng Jin wrote: >> Right, JNI has not
much to do with this. There's different ways to upcall
back into Java (JNI and FFM upcall stubs). If so, my
understanding is that both JNI and FFM upcall should
crash the VM <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerStart<o:p></o:p></span></p>
</div>
<table class="MsoNormalTable" style="width:100.0%;border-radius:4px" width="100%" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td style="padding:12.0pt 0cm 12.0pt 0cm">
<table class="MsoNormalTable" style="width:100.0%;background:#D0D8DC;border:none;border-top:solid
#90A4AE 3.0pt" width="100%" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="border:none;padding:0cm 7.5pt
3.75pt 4.5pt" valign="top">
<table class="MsoNormalTable" cellspacing="0" cellpadding="0" border="0" align="left">
<tbody>
<tr>
<td style="padding:3.0pt 6.0pt 3.0pt
6.0pt">
<p class="MsoNormal"><b><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">This
Message Is From an External
Sender <o:p></o:p></span></b></p>
</td>
</tr>
<tr>
<td style="padding:3.0pt 6.0pt 3.0pt
6.0pt">
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:black">This
message came from outside your
organization. <o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<table class="MsoNormalTable" cellspacing="0" cellpadding="0" border="0" align="right">
<tbody>
<tr>
<td style="padding:3.0pt 0cm 3.0pt
0cm">
<p class="MsoNormal"> <a href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/PjiDSg!2c-hYpT1IJMQ-iYRkuvEjWPesZVtAje5jWUBYoL2pAM1wRGP31iKedgOBvqFHgP6rIVsAh-wdcVItzgnQJ8qkuKPFDFOpo-3zg$" target="_blank" moz-do-not-send="true"><strong><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black;border:solid
#666666
1.0pt;padding:6.0pt;font-weight:normal;text-decoration:none"> Report Suspicious </span></strong></a>
<span style="font-size:11.0pt"><o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerEnd<o:p></o:p></span></p>
</div>
<p><o:p> </o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">On
27/07/2023 01:40, Cheng Jin wrote:<o:p></o:p></span></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p>>> Right, JNI has not much to do with this.
There's different ways to upcall back into Java (JNI and
FFM upcall stubs).<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">If so,
my understanding is that both JNI and FFM upcall
should crash the VM in a trivial FFM downcall,
correct?</span><o:p></o:p></p>
</blockquote>
<p>I believe so. Jorn will confirm.<o:p></o:p></p>
<p>Maurizio<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Best
Regards</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Cheng
Jin</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<div style="border:none;border-top:solid #E1E1E1
1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:11.0pt" lang="EN-US">From:</span></b><span style="font-size:11.0pt" lang="EN-US"> Maurizio
Cimadamore </span><a href="mailto:maurizio.cimadamore@oracle.com" moz-do-not-send="true"><span style="font-size:11.0pt" lang="EN-US"><maurizio.cimadamore@oracle.com></span></a><span style="font-size:11.0pt" lang="EN-US"> <br>
<b>Sent:</b> Wednesday, July 26, 2023 8:29 PM<br>
<b>To:</b> Cheng Jin </span><a href="mailto:jincheng@ca.ibm.com" moz-do-not-send="true"><span style="font-size:11.0pt" lang="EN-US"><jincheng@ca.ibm.com></span></a><span style="font-size:11.0pt" lang="EN-US">; </span><a href="mailto:panama-dev@openjdk.org" moz-do-not-send="true"><span style="font-size:11.0pt" lang="EN-US">panama-dev@openjdk.org</span></a><span style="font-size:11.0pt" lang="EN-US"><br>
<b>Subject:</b> [EXTERNAL] Re: Questions about the
trivial downcall</span><o:p></o:p></p>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">and does not
call back into Java (e. g. using an upcall stub).
ß------------------------- it occurs to me that any
kind of upcall should be disallowed in such case
whether it is JNI or FFM, am I correct? Right, JNI
has not much to do with this. </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerStart</span><o:p></o:p></p>
</div>
<table class="MsoNormalTable" style="width:100.0%;border-radius:4px" width="100%" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td style="padding:12.0pt 0cm 12.0pt 0cm">
<table class="MsoNormalTable" style="width:100.0%;background:#D0D8DC;border:none;border-top:solid
#90A4AE 3.0pt" width="100%" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="border:none;padding:0cm 7.5pt
3.75pt 4.5pt" valign="top">
<table class="MsoNormalTable" cellspacing="0" cellpadding="0" border="0" align="left">
<tbody>
<tr>
<td style="padding:3.0pt 6.0pt 3.0pt
6.0pt">
<p class="MsoNormal"><b><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">This
Message Is From an External
Sender </span></b><o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:3.0pt 6.0pt 3.0pt
6.0pt">
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:black">This
message came from outside your
organization. </span><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<table class="MsoNormalTable" cellspacing="0" cellpadding="0" border="0" align="right">
<tbody>
<tr>
<td style="padding:3.0pt 0cm 3.0pt
0cm">
<p class="MsoNormal"> <a href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/PjiDSg!2c-gyJS_6lP6sKYb2IHEjb2TaeBqM7xJQ9RStijLaImfla_LrFEK8T2PB5_umxDwUuL8X7BGAHosOeXRLCglJfzdYnJaiHF6gQ$" target="_blank" moz-do-not-send="true"><strong><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black;border:solid
#666666
1.0pt;padding:6.0pt;font-weight:normal;text-decoration:none"> Report Suspicious </span></strong></a>
<o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div>
<p class="MsoNormal" style="mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerEnd</span><o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p>and does not call back into Java (e.g. using an
upcall stub). <span style="font-family:Wingdings">
ß</span>------------------------- it occurs to me
that any kind of upcall should be disallowed in such
case whether it is JNI or FFM, am I correct? <o:p></o:p></p>
</div>
</blockquote>
<p>Right, JNI has not much to do with this. There's
different ways to upcall back into Java (JNI and FFM
upcall stubs).<o:p></o:p></p>
<p>Your question is: what happens if we do call back when
we are in trivial mode.<o:p></o:p></p>
<p>I believe the answer is "we crash" (but not in a "nice
way"), and I'm not too sure we can do much to prevent
that. I believe Jorn knows more on that topic.<o:p></o:p></p>
<p>Maurizio<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Best Regards</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Cheng Jin</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<div style="border:none;border-top:solid #E1E1E1
1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:11.0pt" lang="EN-US">From:</span></b><span style="font-size:11.0pt" lang="EN-US"> Maurizio
Cimadamore </span><a href="mailto:maurizio.cimadamore@oracle.com" moz-do-not-send="true"><span style="font-size:11.0pt" lang="EN-US"><maurizio.cimadamore@oracle.com></span></a><span style="font-size:11.0pt" lang="EN-US"> <br>
<b>Sent:</b> Wednesday, July 26, 2023 7:44 PM<br>
<b>To:</b> Cheng Jin </span><a href="mailto:jincheng@ca.ibm.com" moz-do-not-send="true"><span style="font-size:11.0pt" lang="EN-US"><jincheng@ca.ibm.com></span></a><span style="font-size:11.0pt" lang="EN-US">; </span><a href="mailto:panama-dev@openjdk.org" moz-do-not-send="true"><span style="font-size:11.0pt" lang="EN-US">panama-dev@openjdk.org</span></a><span style="font-size:11.0pt" lang="EN-US"><br>
<b>Subject:</b> [EXTERNAL] Re: Questions about
the trivial downcall</span><o:p></o:p></p>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">Hi, a
trivial downcall is supposed to target a native
function that (a) terminates quickly (so as not
to block the GC for too long) and (b) does not
upcall into Java. So, no, a trivial downcall
cannot trigger upcalls (I don't think we detect
</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerStart</span><o:p></o:p></p>
</div>
<table class="MsoNormalTable" style="width:100.0%;border-radius:4px" width="100%" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td style="padding:12.0pt 0cm 12.0pt 0cm">
<table class="MsoNormalTable" style="width:100.0%;background:#D0D8DC;border:none;border-top:solid
#90A4AE 3.0pt" width="100%" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="border:none;padding:0cm 7.5pt
3.75pt 4.5pt" valign="top">
<table class="MsoNormalTable" cellspacing="0" cellpadding="0" border="0" align="left">
<tbody>
<tr>
<td style="padding:3.0pt 6.0pt
3.0pt 6.0pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">This
Message Is From an
External Sender </span></b><o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:3.0pt 6.0pt
3.0pt 6.0pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:black">This
message came from outside
your organization. </span><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<table class="MsoNormalTable" cellspacing="0" cellpadding="0" border="0" align="right">
<tbody>
<tr>
<td style="padding:3.0pt 0cm
3.0pt 0cm">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt"> </span><a href="https://us-phishalarm-ewt.proofpoint.com/EWT/v1/PjiDSg!2c-r455VanMQ2qYReaGl7Z4QRx46ATMxAjK9nbXsj13QlLeimn0PtcIAb-U80cJ-A34Q8dYfoQ6JN5nMYOpBz-Hn3cuAGTZLJQ$" target="_blank" moz-do-not-send="true"><strong><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black;border:solid
#666666
1.0pt;padding:6.0pt;font-weight:normal;text-decoration:none"> Report Suspicious </span></strong></a><span style="font-size:11.0pt">
</span><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-line-height-alt:.75pt"><span style="font-size:1.0pt;color:white">ZjQcmQRYFpfptBannerEnd</span><o:p></o:p></p>
</div>
<p>Hi,<br>
a trivial downcall is supposed to target a native
function that (a) terminates quickly (so as not to
block the GC for too long) and (b) does not upcall
into Java.<o:p></o:p></p>
<p>So, no, a trivial downcall cannot trigger upcalls
(I don't think we detect this, I believe the JVM
just crashes if you do).<o:p></o:p></p>
<p>Also I notice that you speak of "JNI" upcall. Is
that what you really mean - e.g. a trivial FFM
downcall making an upcall using JNI? In general, I
think it's a bit hard for downcalls to do anything
that has to do with JNI because the invoked native
function is not passed a JNIEnv - FFM really just
bridges the Java code with the native library
function you want to call, nothing more. (I suppose
that function could get its hands on the VM using
the JNI attach API, but I feel that's a different
question from what you were asking?).<o:p></o:p></p>
<p>Maurizio<o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">On 26/07/2023 22:23,
Cheng Jin wrote:</span><o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Hi there,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">I’ve got a couple of
questions about the behavior of a trivial
downcall (with <b>isTrivial</b> specified).</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Is a FFI downcall able
to trigger a JNI upcall ?</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">If so, should a JNI
upcall should be captured in this trivial
downcall?</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Best Regards</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt">Cheng Jin</span><o:p></o:p></p>
</blockquote>
</div>
</blockquote>
</blockquote>
</div>
</blockquote>
</blockquote>
</blockquote>
</body>
</html>