Update instance.cfg, GRAALVM-README.md, LICENSE.txt, and 1444 more files
This commit is contained in:
+30
@@ -0,0 +1,30 @@
|
||||
# Generated with ❤ by mx_sdk_vm_impl.py
|
||||
ImageName=native-image-agent
|
||||
ImagePath=${.}/../../../../bin
|
||||
ImageModulePath=${.}/../../../graalvm/jvmti-agent-base.jar\:${.}/../../../graalvm/svm-agent.jar\:${.}/../../../graalvm/svm-driver.jar
|
||||
Args=--no-fallback \
|
||||
-march\=compatibility \
|
||||
-Dorg.graalvm.version\=25.0.3 \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+AssertInitializationSpecifiedForAllClasses \
|
||||
-H\:+EnforceMaxRuntimeCompileMethods \
|
||||
-H\:+VerifyRuntimeCompilationFrameStates \
|
||||
-H\:+GuaranteeSubstrateTypesLinked \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
-g \
|
||||
--link-at-build-time \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+ProfilingEnableProfileDumpHooks \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
--shared \
|
||||
--features\=com.oracle.svm.driver.APIOptionFeature \
|
||||
--initialize-at-build-time\=com.oracle.svm.driver \
|
||||
--link-at-build-time\=com.oracle.svm.driver,com.oracle.svm.driver.metainf \
|
||||
--features\=com.oracle.svm.agent.NativeImageAgent$RegistrationFeature \
|
||||
--enable-url-protocols\=jar \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+TreatAllTypeReachableConditionsAsTypeReached \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
--add-exports\=java.base/jdk.internal.jimage\=org.graalvm.nativeimage.driver \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.meta\=org.graalvm.nativeimage.agent.tracing \
|
||||
--add-exports\=jdk.jfr/jdk.jfr.internal\=org.graalvm.nativeimage.driver
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
# Generated with ❤ by mx_sdk_vm_impl.py
|
||||
ImageName=native-image-configure
|
||||
ImagePath=${.}/../../bin
|
||||
ImageClass=com.oracle.svm.enterprise.configure.ConfigurationEnterpriseTool
|
||||
ImageModule=org.graalvm.nativeimage.enterprise.configure
|
||||
ImageModulePath=${.}/../../../graalvm/svm-enterprise-configure.jar
|
||||
Args=--no-fallback \
|
||||
-march\=compatibility \
|
||||
-Dorg.graalvm.version\=25.0.3 \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+AssertInitializationSpecifiedForAllClasses \
|
||||
-H\:+EnforceMaxRuntimeCompileMethods \
|
||||
-H\:+VerifyRuntimeCompilationFrameStates \
|
||||
-H\:+GuaranteeSubstrateTypesLinked \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
-g \
|
||||
--link-at-build-time \
|
||||
-R\:+EnableSignalHandling \
|
||||
-R\:+InstallSegfaultHandler \
|
||||
--enable-monitoring\=jvmstat,heapdump,jfr,threaddump \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+InstallExitHandlers \
|
||||
-H\:+DumpRuntimeCompilationOnSignal \
|
||||
-H\:+ReportExceptionStackTraces \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
-R\:-UsePerfData \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:-ParseRuntimeOptions \
|
||||
-H\:+TreatAllTypeReachableConditionsAsTypeReached \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
--add-exports\=java.base/jdk.internal.misc\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.graal.compiler/jdk.graal.compiler.nodes\=org.graalvm.nativeimage.enterprise.configure \
|
||||
--add-exports\=jdk.graal.compiler/jdk.graal.compiler.util.json\=com.oracle.graal.reporter,org.graalvm.nativeimage.enterprise.configure \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.aarch64\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.amd64\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.code.site\=com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.code\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.common\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.hotspot\=com.oracle.graal.graal_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.meta\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.riscv64\=com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.runtime\=com.oracle.graal.graal_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.services\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.jfr/jdk.jfr.internal.jfc\=com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.jfr/jdk.jfr.internal\=com.oracle.svm.svm_enterprise
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
# Generated with ❤ by mx_sdk_vm_impl.py
|
||||
ImageName=native-image-diagnostics-agent
|
||||
ImagePath=${.}/../../../../bin
|
||||
ImageModulePath=${.}/../../../graalvm/jvmti-agent-base.jar\:${.}/../../../graalvm/svm-diagnostics-agent.jar\:${.}/../../../graalvm/svm-driver.jar
|
||||
Args=--no-fallback \
|
||||
-march\=compatibility \
|
||||
-Dorg.graalvm.version\=25.0.3 \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+AssertInitializationSpecifiedForAllClasses \
|
||||
-H\:+EnforceMaxRuntimeCompileMethods \
|
||||
-H\:+VerifyRuntimeCompilationFrameStates \
|
||||
-H\:+GuaranteeSubstrateTypesLinked \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
-g \
|
||||
--link-at-build-time \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+ProfilingEnableProfileDumpHooks \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
--shared \
|
||||
--features\=com.oracle.svm.driver.APIOptionFeature \
|
||||
--initialize-at-build-time\=com.oracle.svm.driver \
|
||||
--link-at-build-time\=com.oracle.svm.driver,com.oracle.svm.driver.metainf \
|
||||
--features\=com.oracle.svm.diagnosticsagent.NativeImageDiagnosticsAgent$RegistrationFeature \
|
||||
--add-exports\=java.base/jdk.internal.jimage\=org.graalvm.nativeimage.driver \
|
||||
--add-exports\=java.base/jdk.internal.loader\=org.graalvm.nativeimage.agent.diagnostics \
|
||||
--add-exports\=jdk.jfr/jdk.jfr.internal\=org.graalvm.nativeimage.driver
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# Generated with ❤ by mx_sdk_vm_impl.py
|
||||
ImageName=native-image
|
||||
ImagePath=${.}/../../bin
|
||||
ImageClass=com.oracle.svm.driver.NativeImage
|
||||
ImageModule=org.graalvm.nativeimage.driver
|
||||
ImageModulePath=${.}/../../../graalvm/svm-driver.jar
|
||||
Args=--no-fallback \
|
||||
-march\=compatibility \
|
||||
-Dorg.graalvm.version\=25.0.3 \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+AssertInitializationSpecifiedForAllClasses \
|
||||
-H\:+EnforceMaxRuntimeCompileMethods \
|
||||
-H\:+VerifyRuntimeCompilationFrameStates \
|
||||
-H\:+GuaranteeSubstrateTypesLinked \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
-g \
|
||||
--link-at-build-time \
|
||||
-R\:+EnableSignalHandling \
|
||||
-R\:+InstallSegfaultHandler \
|
||||
--enable-monitoring\=jvmstat,heapdump,jfr,threaddump \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+InstallExitHandlers \
|
||||
-H\:+DumpRuntimeCompilationOnSignal \
|
||||
-H\:+ReportExceptionStackTraces \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
-R\:-UsePerfData \
|
||||
--features\=com.oracle.svm.driver.APIOptionFeature \
|
||||
--initialize-at-build-time\=com.oracle.svm.driver \
|
||||
--link-at-build-time\=com.oracle.svm.driver,com.oracle.svm.driver.metainf \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+AllowJRTFileSystem \
|
||||
-H\:IncludeResources\=com/oracle/svm/driver/launcher/.* \
|
||||
-H\:-ParseRuntimeOptions \
|
||||
-R\:MaxHeapSize\=214748365 \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
--add-exports\=java.base/jdk.internal.jimage\=org.graalvm.nativeimage.driver \
|
||||
--add-exports\=java.base/jdk.internal.misc\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.graal.compiler/jdk.graal.compiler.util.json\=com.oracle.graal.reporter \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.aarch64\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.amd64\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.code.site\=com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.code\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.common\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.hotspot\=com.oracle.graal.graal_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.meta\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.riscv64\=com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.runtime\=com.oracle.graal.graal_enterprise \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.services\=com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.jfr/jdk.jfr.internal.jfc\=com.oracle.svm.svm_enterprise \
|
||||
--add-exports\=jdk.jfr/jdk.jfr.internal\=com.oracle.svm.svm_enterprise,org.graalvm.nativeimage.driver
|
||||
@@ -0,0 +1,26 @@
|
||||
# Generated with ❤ by mx_sdk_vm_impl.py
|
||||
ImageName=svmjdwp
|
||||
ImagePath=${.}/../../../../bin
|
||||
ImageModulePath=${.}/../../../graalvm/svm-jdwp-server.jar
|
||||
Args=--no-fallback \
|
||||
-march\=compatibility \
|
||||
-Dorg.graalvm.version\=25.0.3 \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+AssertInitializationSpecifiedForAllClasses \
|
||||
-H\:+EnforceMaxRuntimeCompileMethods \
|
||||
-H\:+VerifyRuntimeCompilationFrameStates \
|
||||
-H\:+GuaranteeSubstrateTypesLinked \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
-g \
|
||||
--link-at-build-time \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+ProfilingEnableProfileDumpHooks \
|
||||
-H\:-UnlockExperimentalVMOptions \
|
||||
--shared \
|
||||
-H\:+UnlockExperimentalVMOptions \
|
||||
-H\:+IncludeDebugHelperMethods \
|
||||
-H\:-DeleteLocalSymbols \
|
||||
-H\:+PreserveFramePointer \
|
||||
--features\=com.oracle.svm.jdwp.server.ServerJDWPFeature \
|
||||
--add-exports\=java.base/jdk.internal.misc\=com.oracle.svm.jdwp.server \
|
||||
--add-exports\=jdk.internal.vm.ci/jdk.vm.ci.meta\=com.oracle.svm.jdwp.server
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
#include <ffi.h>
|
||||
#include <trufflenfi.h>
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct {
|
||||
ffi_closure ffiClosure;
|
||||
void *nativeClosureHandle;
|
||||
void *isolate;
|
||||
int32_t envArgIdx;
|
||||
} svm_closure_data;
|
||||
|
||||
typedef struct {
|
||||
ffi_cif cif;
|
||||
ffi_type *args[1];
|
||||
} svm_cif_data;
|
||||
|
||||
typedef struct {
|
||||
const struct __TruffleThreadAPI *functions;
|
||||
void *contextHandle;
|
||||
void *isolate;
|
||||
|
||||
struct __TruffleThreadAPI threadAPI;
|
||||
struct __TruffleNativeAPI nativeAPI;
|
||||
} svm_truffle_context;
|
||||
|
||||
typedef struct {
|
||||
const struct __TruffleNativeAPI *functions;
|
||||
svm_truffle_context *context;
|
||||
void *isolateThread;
|
||||
} svm_truffle_env;
|
||||
@@ -0,0 +1,251 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* The Universal Permissive License (UPL), Version 1.0
|
||||
*
|
||||
* Subject to the condition set forth below, permission is hereby granted to any
|
||||
* person obtaining a copy of this software, associated documentation and/or
|
||||
* data (collectively the "Software"), free of charge and under any and all
|
||||
* copyright rights in the Software, and any and all patent rights owned or
|
||||
* freely licensable by each licensor hereunder covering either (i) the
|
||||
* unmodified Software as contributed to or provided by such licensor, or (ii)
|
||||
* the Larger Works (as defined below), to deal in both
|
||||
*
|
||||
* (a) the Software, and
|
||||
*
|
||||
* (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
|
||||
* one is included with the Software each a "Larger Work" to which the Software
|
||||
* is contributed by such licensors),
|
||||
*
|
||||
* without restriction, including without limitation the rights to copy, create
|
||||
* derivative works of, display, perform, and distribute the Software and make,
|
||||
* use, sell, offer for sale, import, export, have made, and have sold the
|
||||
* Software and the Larger Work(s), and to sublicense the foregoing rights on
|
||||
* either these or other terms.
|
||||
*
|
||||
* This license is subject to the following condition:
|
||||
*
|
||||
* The above copyright notice and either this complete permission notice or at a
|
||||
* minimum a reference to the UPL must be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
#ifndef __TRUFFLE_NFI_H
|
||||
#define __TRUFFLE_NFI_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* Opaque handle to a {@link com.oracle.truffle.api.interop.TruffleObject}.
|
||||
*/
|
||||
typedef struct __TruffleObject *TruffleObject;
|
||||
|
||||
struct __TruffleContext;
|
||||
struct __TruffleEnv;
|
||||
|
||||
struct __TruffleNativeAPI;
|
||||
struct __TruffleThreadAPI;
|
||||
|
||||
#ifdef __cplusplus
|
||||
/**
|
||||
* Environment pointer that can be used to call functions of the {@link struct __TruffleNativeAPI}.
|
||||
* The environment pointer can be injected as argument to native calls using the `env` datatype in
|
||||
* the function signature. For example, a native function with signature `(env, double) : double`
|
||||
* expects one `double` argument on the Truffle side, but on the native side the signature is
|
||||
* `double fn(TruffleEnv*, double)`.
|
||||
*
|
||||
* The TruffleEnv* is strictly local to the current call, it is not allowed to keep it alive after
|
||||
* the call returns. If necessary, the `TruffleContext*` can be obtained using `getTruffleContext`.
|
||||
* This object can be stored, and later used to get a fresh `TruffleEnv*`.
|
||||
*/
|
||||
typedef __TruffleEnv TruffleEnv;
|
||||
|
||||
/**
|
||||
* Reference to a Truffle {@link org.graalvm.polyglot.Context}. This can be used to attach and detach
|
||||
* new threads, and to get a reference to a `TruffleEnv*` to call {@link struct __TruffleNativeAPI}
|
||||
* functions.
|
||||
*
|
||||
* This object is valid as long as the corresponding {@link org.graalvm.polyglot.Context} is alive.
|
||||
*
|
||||
* @see struct __TruffleThreadAPI
|
||||
*/
|
||||
typedef __TruffleContext TruffleContext;
|
||||
#else
|
||||
typedef const struct __TruffleNativeAPI *TruffleEnv;
|
||||
typedef const struct __TruffleThreadAPI *TruffleContext;
|
||||
#endif
|
||||
|
||||
struct __TruffleNativeAPI {
|
||||
/**
|
||||
* Get an instance of the current TruffleContext.
|
||||
*/
|
||||
TruffleContext *(*getTruffleContext)(TruffleEnv *env);
|
||||
|
||||
/**
|
||||
* Create a new handle to a TruffleObject.
|
||||
*
|
||||
* TruffleObjects that are passed to native code as argument are owned by the caller. If the native
|
||||
* code wants to keep the reference, it has to call {@link newObjectRef} to create a new reference.
|
||||
* TruffleObjects that are returned from a callback are owned by the caller. The native code has to
|
||||
* call {@link releaseObjectRef} to free the reference.
|
||||
*/
|
||||
TruffleObject (*newObjectRef)(TruffleEnv *env, TruffleObject object);
|
||||
|
||||
/**
|
||||
* Release a handle to a TruffleObject.
|
||||
*
|
||||
* This should be called to free handles to a TruffleObject. The TruffleObject must not be used
|
||||
* afterwards.
|
||||
*
|
||||
* This (or {@link releaseAndReturn}) must be called on any TruffleObject owned by native code.
|
||||
* TruffleObjects that are returned from a callback function are owned by the native code and must
|
||||
* be released.
|
||||
*/
|
||||
void (*releaseObjectRef)(TruffleEnv *env, TruffleObject object);
|
||||
|
||||
/**
|
||||
* Transfer ownership of a TruffleObject to the caller.
|
||||
*
|
||||
* Similar to {@link releaseObjectRef}, this function releases the ownership of a TruffleObject.
|
||||
* The TruffleObject must not be used afterwards. Additionally, it returns a new handle to the
|
||||
* TruffleObject. This new handle is not owned by the native code. The new handle can be returned
|
||||
* to the calling Truffle code. It must not be used for anything else.
|
||||
*/
|
||||
TruffleObject (*releaseAndReturn)(TruffleEnv *env, TruffleObject object);
|
||||
|
||||
/**
|
||||
* Returns 1 iff object1 references the same underlying object as object2, 0 otherwise.
|
||||
*/
|
||||
int (*isSameObject)(TruffleEnv *env, TruffleObject object1, TruffleObject object2);
|
||||
|
||||
/**
|
||||
* Increase the reference count of a callback closure.
|
||||
*
|
||||
* Closures that are passed from Truffle to native code as function pointer are owned by the caller
|
||||
* and are freed on return. If the native code wants to keep the function pointer, it needs to call
|
||||
* {@link newClosureRef} to increase the reference count.
|
||||
*
|
||||
* Note that the closure reference count is tied to the TruffleContext that allocated the closure.
|
||||
* {@link newClosureRef}, {@link releaseClosureRef} and {@link getClosureObject} can only be called
|
||||
* from that TruffleContext.
|
||||
*/
|
||||
void (*newClosureRef)(TruffleEnv *env, void *closure);
|
||||
|
||||
/**
|
||||
* Decrease the reference count of a callback closure.
|
||||
*
|
||||
* Closures that are returned by callback functions as function pointers are owned by the native
|
||||
* code and need to be freed manually.
|
||||
*/
|
||||
void (*releaseClosureRef)(TruffleEnv *env, void *closure);
|
||||
|
||||
/**
|
||||
* Get a representation of a callback closure as TruffleObject.
|
||||
*
|
||||
* This TruffleObject holds one reference to the closure, the closure will be kept alive at least
|
||||
* as long as this TruffleObject is alive. This can be used as an alternative to {@link newClosureRef}
|
||||
* to keep closure references alive. The TruffleObject can also be passed back to managed code and
|
||||
* stored there, instead of keeping it alive on the native side.
|
||||
*
|
||||
* Passing this object back from managed code to another native function will result in the same
|
||||
* closure pointer, instead of allocating a new one.
|
||||
*/
|
||||
TruffleObject (*getClosureObject)(TruffleEnv *env, void *closure);
|
||||
|
||||
/**
|
||||
* Returns whether there is a pending exception from the last upcall.
|
||||
*/
|
||||
bool (*exceptionCheck)(TruffleEnv *env);
|
||||
};
|
||||
|
||||
struct __TruffleEnv {
|
||||
const struct __TruffleNativeAPI *functions;
|
||||
|
||||
#ifdef __cplusplus
|
||||
TruffleContext *getTruffleContext() {
|
||||
return functions->getTruffleContext(this);
|
||||
}
|
||||
|
||||
TruffleObject newObjectRef(TruffleObject object) {
|
||||
return functions->newObjectRef(this, object);
|
||||
}
|
||||
|
||||
void releaseObjectRef(TruffleObject object) {
|
||||
functions->releaseObjectRef(this, object);
|
||||
}
|
||||
|
||||
TruffleObject releaseAndReturn(TruffleObject object) {
|
||||
return functions->releaseAndReturn(this, object);
|
||||
}
|
||||
|
||||
int isSameObject(TruffleObject object1, TruffleObject object2) {
|
||||
return functions->isSameObject(this, object1, object2);
|
||||
}
|
||||
|
||||
template <class T> void newClosureRef(T *closure) {
|
||||
functions->newClosureRef(this, (void *) closure);
|
||||
}
|
||||
|
||||
template <class T> void releaseClosureRef(T *closure) {
|
||||
functions->releaseClosureRef(this, (void *) closure);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience function that calls {@link newClosureRef} on a function pointer, and returns the
|
||||
* same function pointer without losing type information.
|
||||
*/
|
||||
template <class T> T *dupClosureRef(T *closure) {
|
||||
functions->newClosureRef(this, (void *) closure);
|
||||
return closure;
|
||||
}
|
||||
|
||||
template <class T> TruffleObject getClosureObject(T *closure) {
|
||||
return functions->getClosureObject(this, (void *) closure);
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct __TruffleThreadAPI {
|
||||
/**
|
||||
* Returns the TruffleEnv of the current thread, or NULL if the current thread is not attached.
|
||||
*/
|
||||
TruffleEnv *(*getTruffleEnv)(TruffleContext *ctx);
|
||||
|
||||
/**
|
||||
* Attaches the current thread.
|
||||
*/
|
||||
TruffleEnv *(*attachCurrentThread)(TruffleContext *ctx);
|
||||
|
||||
/**
|
||||
* Detaches the current thread.
|
||||
*/
|
||||
void (*detachCurrentThread)(TruffleContext *ctx);
|
||||
};
|
||||
|
||||
struct __TruffleContext {
|
||||
const struct __TruffleThreadAPI *functions;
|
||||
|
||||
#ifdef __cplusplus
|
||||
TruffleEnv *getTruffleEnv() {
|
||||
return functions->getTruffleEnv(this);
|
||||
}
|
||||
|
||||
TruffleEnv *attachCurrentThread() {
|
||||
return functions->attachCurrentThread(this);
|
||||
}
|
||||
|
||||
void detachCurrentThread() {
|
||||
return functions->detachCurrentThread(this);
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif
|
||||
BIN
Binary file not shown.
+518
@@ -0,0 +1,518 @@
|
||||
/* -----------------------------------------------------------------*-C-*-
|
||||
libffi 3.4.8
|
||||
- Copyright (c) 2011, 2014, 2019, 2021, 2022, 2024 Anthony Green
|
||||
- Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the ``Software''), to deal in the Software without
|
||||
restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
----------------------------------------------------------------------- */
|
||||
|
||||
/* -------------------------------------------------------------------
|
||||
Most of the API is documented in doc/libffi.texi.
|
||||
|
||||
The raw API is designed to bypass some of the argument packing and
|
||||
unpacking on architectures for which it can be avoided. Routines
|
||||
are provided to emulate the raw API if the underlying platform
|
||||
doesn't allow faster implementation.
|
||||
|
||||
More details on the raw API can be found in:
|
||||
|
||||
http://gcc.gnu.org/ml/java/1999-q3/msg00138.html
|
||||
|
||||
and
|
||||
|
||||
http://gcc.gnu.org/ml/java/1999-q3/msg00174.html
|
||||
-------------------------------------------------------------------- */
|
||||
|
||||
#ifndef LIBFFI_H
|
||||
#define LIBFFI_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Specify which architecture libffi is configured for. */
|
||||
#ifndef X86_WIN64
|
||||
#define X86_WIN64
|
||||
#endif
|
||||
|
||||
/* ---- System configuration information --------------------------------- */
|
||||
|
||||
/* If these change, update src/mips/ffitarget.h. */
|
||||
#define FFI_TYPE_VOID 0
|
||||
#define FFI_TYPE_INT 1
|
||||
#define FFI_TYPE_FLOAT 2
|
||||
#define FFI_TYPE_DOUBLE 3
|
||||
#if 0
|
||||
#define FFI_TYPE_LONGDOUBLE 4
|
||||
#else
|
||||
#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
|
||||
#endif
|
||||
#define FFI_TYPE_UINT8 5
|
||||
#define FFI_TYPE_SINT8 6
|
||||
#define FFI_TYPE_UINT16 7
|
||||
#define FFI_TYPE_SINT16 8
|
||||
#define FFI_TYPE_UINT32 9
|
||||
#define FFI_TYPE_SINT32 10
|
||||
#define FFI_TYPE_UINT64 11
|
||||
#define FFI_TYPE_SINT64 12
|
||||
#define FFI_TYPE_STRUCT 13
|
||||
#define FFI_TYPE_POINTER 14
|
||||
#define FFI_TYPE_COMPLEX 15
|
||||
|
||||
/* This should always refer to the last type code (for sanity checks). */
|
||||
#define FFI_TYPE_LAST FFI_TYPE_COMPLEX
|
||||
|
||||
#include <ffitarget.h>
|
||||
|
||||
#ifndef LIBFFI_ASM
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
#define __attribute__(X)
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
#include <limits.h>
|
||||
|
||||
/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example).
|
||||
But we can find it either under the correct ANSI name, or under GNU
|
||||
C's internal name. */
|
||||
|
||||
#define FFI_64_BIT_MAX 9223372036854775807
|
||||
|
||||
#ifdef LONG_LONG_MAX
|
||||
# define FFI_LONG_LONG_MAX LONG_LONG_MAX
|
||||
#else
|
||||
# ifdef LLONG_MAX
|
||||
# define FFI_LONG_LONG_MAX LLONG_MAX
|
||||
# ifdef _AIX52 /* or newer has C99 LLONG_MAX */
|
||||
# undef FFI_64_BIT_MAX
|
||||
# define FFI_64_BIT_MAX 9223372036854775807LL
|
||||
# endif /* _AIX52 or newer */
|
||||
# else
|
||||
# ifdef __GNUC__
|
||||
# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
|
||||
# endif
|
||||
# ifdef _AIX /* AIX 5.1 and earlier have LONGLONG_MAX */
|
||||
# ifndef __PPC64__
|
||||
# if defined (__IBMC__) || defined (__IBMCPP__)
|
||||
# define FFI_LONG_LONG_MAX LONGLONG_MAX
|
||||
# endif
|
||||
# endif /* __PPC64__ */
|
||||
# undef FFI_64_BIT_MAX
|
||||
# define FFI_64_BIT_MAX 9223372036854775807LL
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* The closure code assumes that this works on pointers, i.e. a size_t
|
||||
can hold a pointer. */
|
||||
|
||||
typedef struct _ffi_type
|
||||
{
|
||||
size_t size;
|
||||
unsigned short alignment;
|
||||
unsigned short type;
|
||||
struct _ffi_type **elements;
|
||||
} ffi_type;
|
||||
|
||||
/* Need minimal decorations for DLLs to work on Windows. GCC has
|
||||
autoimport and autoexport. Always mark externally visible symbols
|
||||
as dllimport for MSVC clients, even if it means an extra indirection
|
||||
when using the static version of the library.
|
||||
Besides, as a workaround, they can define FFI_BUILDING if they
|
||||
*know* they are going to link with the static library. */
|
||||
#if defined _MSC_VER && !defined(FFI_STATIC_BUILD)
|
||||
# if defined FFI_BUILDING_DLL /* Building libffi.DLL with msvcc.sh */
|
||||
# define FFI_API __declspec(dllexport)
|
||||
# else /* Importing libffi.DLL */
|
||||
# define FFI_API __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# define FFI_API
|
||||
#endif
|
||||
|
||||
/* The externally visible type declarations also need the MSVC DLL
|
||||
decorations, or they will not be exported from the object file. */
|
||||
#if defined LIBFFI_HIDE_BASIC_TYPES
|
||||
# define FFI_EXTERN FFI_API
|
||||
#else
|
||||
# define FFI_EXTERN extern FFI_API
|
||||
#endif
|
||||
|
||||
#ifndef LIBFFI_HIDE_BASIC_TYPES
|
||||
#if SCHAR_MAX == 127
|
||||
# define ffi_type_uchar ffi_type_uint8
|
||||
# define ffi_type_schar ffi_type_sint8
|
||||
#else
|
||||
#error "char size not supported"
|
||||
#endif
|
||||
|
||||
#if SHRT_MAX == 32767
|
||||
# define ffi_type_ushort ffi_type_uint16
|
||||
# define ffi_type_sshort ffi_type_sint16
|
||||
#elif SHRT_MAX == 2147483647
|
||||
# define ffi_type_ushort ffi_type_uint32
|
||||
# define ffi_type_sshort ffi_type_sint32
|
||||
#else
|
||||
#error "short size not supported"
|
||||
#endif
|
||||
|
||||
#if INT_MAX == 32767
|
||||
# define ffi_type_uint ffi_type_uint16
|
||||
# define ffi_type_sint ffi_type_sint16
|
||||
#elif INT_MAX == 2147483647
|
||||
# define ffi_type_uint ffi_type_uint32
|
||||
# define ffi_type_sint ffi_type_sint32
|
||||
#elif INT_MAX == 9223372036854775807
|
||||
# define ffi_type_uint ffi_type_uint64
|
||||
# define ffi_type_sint ffi_type_sint64
|
||||
#else
|
||||
#error "int size not supported"
|
||||
#endif
|
||||
|
||||
#if LONG_MAX == 2147483647
|
||||
# if FFI_LONG_LONG_MAX != FFI_64_BIT_MAX
|
||||
#error "no 64-bit data type supported"
|
||||
# endif
|
||||
#elif LONG_MAX != FFI_64_BIT_MAX
|
||||
#error "long size not supported"
|
||||
#endif
|
||||
|
||||
#if LONG_MAX == 2147483647
|
||||
# define ffi_type_ulong ffi_type_uint32
|
||||
# define ffi_type_slong ffi_type_sint32
|
||||
#elif LONG_MAX == FFI_64_BIT_MAX
|
||||
# define ffi_type_ulong ffi_type_uint64
|
||||
# define ffi_type_slong ffi_type_sint64
|
||||
#else
|
||||
#error "long size not supported"
|
||||
#endif
|
||||
|
||||
/* These are defined in types.c. */
|
||||
FFI_EXTERN ffi_type ffi_type_void;
|
||||
FFI_EXTERN ffi_type ffi_type_uint8;
|
||||
FFI_EXTERN ffi_type ffi_type_sint8;
|
||||
FFI_EXTERN ffi_type ffi_type_uint16;
|
||||
FFI_EXTERN ffi_type ffi_type_sint16;
|
||||
FFI_EXTERN ffi_type ffi_type_uint32;
|
||||
FFI_EXTERN ffi_type ffi_type_sint32;
|
||||
FFI_EXTERN ffi_type ffi_type_uint64;
|
||||
FFI_EXTERN ffi_type ffi_type_sint64;
|
||||
FFI_EXTERN ffi_type ffi_type_float;
|
||||
FFI_EXTERN ffi_type ffi_type_double;
|
||||
FFI_EXTERN ffi_type ffi_type_pointer;
|
||||
FFI_EXTERN ffi_type ffi_type_longdouble;
|
||||
|
||||
#ifdef FFI_TARGET_HAS_COMPLEX_TYPE
|
||||
FFI_EXTERN ffi_type ffi_type_complex_float;
|
||||
FFI_EXTERN ffi_type ffi_type_complex_double;
|
||||
FFI_EXTERN ffi_type ffi_type_complex_longdouble;
|
||||
#endif
|
||||
#endif /* LIBFFI_HIDE_BASIC_TYPES */
|
||||
|
||||
typedef enum {
|
||||
FFI_OK = 0,
|
||||
FFI_BAD_TYPEDEF,
|
||||
FFI_BAD_ABI,
|
||||
FFI_BAD_ARGTYPE
|
||||
} ffi_status;
|
||||
|
||||
typedef struct {
|
||||
ffi_abi abi;
|
||||
unsigned nargs;
|
||||
ffi_type **arg_types;
|
||||
ffi_type *rtype;
|
||||
unsigned bytes;
|
||||
unsigned flags;
|
||||
#ifdef FFI_EXTRA_CIF_FIELDS
|
||||
FFI_EXTRA_CIF_FIELDS;
|
||||
#endif
|
||||
} ffi_cif;
|
||||
|
||||
/* ---- Definitions for the raw API -------------------------------------- */
|
||||
|
||||
#ifndef FFI_SIZEOF_ARG
|
||||
# if LONG_MAX == 2147483647
|
||||
# define FFI_SIZEOF_ARG 4
|
||||
# elif LONG_MAX == FFI_64_BIT_MAX
|
||||
# define FFI_SIZEOF_ARG 8
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef FFI_SIZEOF_JAVA_RAW
|
||||
# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG
|
||||
#endif
|
||||
|
||||
typedef union {
|
||||
ffi_sarg sint;
|
||||
ffi_arg uint;
|
||||
float flt;
|
||||
char data[FFI_SIZEOF_ARG];
|
||||
void* ptr;
|
||||
} ffi_raw;
|
||||
|
||||
#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8
|
||||
/* This is a special case for mips64/n32 ABI (and perhaps others) where
|
||||
sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */
|
||||
typedef union {
|
||||
signed int sint;
|
||||
unsigned int uint;
|
||||
float flt;
|
||||
char data[FFI_SIZEOF_JAVA_RAW];
|
||||
void* ptr;
|
||||
} ffi_java_raw;
|
||||
#else
|
||||
typedef ffi_raw ffi_java_raw;
|
||||
#endif
|
||||
|
||||
|
||||
FFI_API
|
||||
void ffi_raw_call (ffi_cif *cif,
|
||||
void (*fn)(void),
|
||||
void *rvalue,
|
||||
ffi_raw *avalue);
|
||||
|
||||
FFI_API void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
|
||||
FFI_API void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
|
||||
FFI_API size_t ffi_raw_size (ffi_cif *cif);
|
||||
|
||||
/* This is analogous to the raw API, except it uses Java parameter
|
||||
packing, even on 64-bit machines. I.e. on 64-bit machines longs
|
||||
and doubles are followed by an empty 64-bit word. */
|
||||
|
||||
#if !FFI_NATIVE_RAW_API
|
||||
FFI_API
|
||||
void ffi_java_raw_call (ffi_cif *cif,
|
||||
void (*fn)(void),
|
||||
void *rvalue,
|
||||
ffi_java_raw *avalue) __attribute__((deprecated));
|
||||
#endif
|
||||
|
||||
FFI_API
|
||||
void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) __attribute__((deprecated));
|
||||
FFI_API
|
||||
void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) __attribute__((deprecated));
|
||||
FFI_API
|
||||
size_t ffi_java_raw_size (ffi_cif *cif) __attribute__((deprecated));
|
||||
|
||||
/* ---- Definitions for closures ----------------------------------------- */
|
||||
|
||||
#if FFI_CLOSURES
|
||||
|
||||
#ifdef _MSC_VER
|
||||
__declspec(align(8))
|
||||
#endif
|
||||
typedef struct {
|
||||
#if 0
|
||||
void *trampoline_table;
|
||||
void *trampoline_table_entry;
|
||||
#else
|
||||
union {
|
||||
char tramp[FFI_TRAMPOLINE_SIZE];
|
||||
void *ftramp;
|
||||
};
|
||||
#endif
|
||||
ffi_cif *cif;
|
||||
void (*fun)(ffi_cif*,void*,void**,void*);
|
||||
void *user_data;
|
||||
#if defined(_MSC_VER) && defined(_M_IX86)
|
||||
void *padding;
|
||||
#endif
|
||||
} ffi_closure
|
||||
#ifdef __GNUC__
|
||||
__attribute__((aligned (8)))
|
||||
#endif
|
||||
;
|
||||
|
||||
#ifndef __GNUC__
|
||||
# ifdef __sgi
|
||||
# pragma pack 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
FFI_API void *ffi_closure_alloc (size_t size, void **code);
|
||||
FFI_API void ffi_closure_free (void *);
|
||||
|
||||
FFI_API ffi_status
|
||||
ffi_prep_closure (ffi_closure*,
|
||||
ffi_cif *,
|
||||
void (*fun)(ffi_cif*,void*,void**,void*),
|
||||
void *user_data)
|
||||
#if defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 405)
|
||||
__attribute__((deprecated ("use ffi_prep_closure_loc instead")))
|
||||
#elif defined(__GNUC__) && __GNUC__ >= 3
|
||||
__attribute__((deprecated))
|
||||
#endif
|
||||
;
|
||||
|
||||
FFI_API ffi_status
|
||||
ffi_prep_closure_loc (ffi_closure*,
|
||||
ffi_cif *,
|
||||
void (*fun)(ffi_cif*,void*,void**,void*),
|
||||
void *user_data,
|
||||
void *codeloc);
|
||||
|
||||
#ifdef __sgi
|
||||
# pragma pack 8
|
||||
#endif
|
||||
typedef struct {
|
||||
#if 0
|
||||
void *trampoline_table;
|
||||
void *trampoline_table_entry;
|
||||
#else
|
||||
char tramp[FFI_TRAMPOLINE_SIZE];
|
||||
#endif
|
||||
ffi_cif *cif;
|
||||
|
||||
#if !FFI_NATIVE_RAW_API
|
||||
|
||||
/* If this is enabled, then a raw closure has the same layout
|
||||
as a regular closure. We use this to install an intermediate
|
||||
handler to do the translation, void** -> ffi_raw*. */
|
||||
|
||||
void (*translate_args)(ffi_cif*,void*,void**,void*);
|
||||
void *this_closure;
|
||||
|
||||
#endif
|
||||
|
||||
void (*fun)(ffi_cif*,void*,ffi_raw*,void*);
|
||||
void *user_data;
|
||||
|
||||
} ffi_raw_closure;
|
||||
|
||||
typedef struct {
|
||||
#if 0
|
||||
void *trampoline_table;
|
||||
void *trampoline_table_entry;
|
||||
#else
|
||||
char tramp[FFI_TRAMPOLINE_SIZE];
|
||||
#endif
|
||||
|
||||
ffi_cif *cif;
|
||||
|
||||
#if !FFI_NATIVE_RAW_API
|
||||
|
||||
/* If this is enabled, then a raw closure has the same layout
|
||||
as a regular closure. We use this to install an intermediate
|
||||
handler to do the translation, void** -> ffi_raw*. */
|
||||
|
||||
void (*translate_args)(ffi_cif*,void*,void**,void*);
|
||||
void *this_closure;
|
||||
|
||||
#endif
|
||||
|
||||
void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*);
|
||||
void *user_data;
|
||||
|
||||
} ffi_java_raw_closure;
|
||||
|
||||
FFI_API ffi_status
|
||||
ffi_prep_raw_closure (ffi_raw_closure*,
|
||||
ffi_cif *cif,
|
||||
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
||||
void *user_data);
|
||||
|
||||
FFI_API ffi_status
|
||||
ffi_prep_raw_closure_loc (ffi_raw_closure*,
|
||||
ffi_cif *cif,
|
||||
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
||||
void *user_data,
|
||||
void *codeloc);
|
||||
|
||||
#if !FFI_NATIVE_RAW_API
|
||||
FFI_API ffi_status
|
||||
ffi_prep_java_raw_closure (ffi_java_raw_closure*,
|
||||
ffi_cif *cif,
|
||||
void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*),
|
||||
void *user_data) __attribute__((deprecated));
|
||||
|
||||
FFI_API ffi_status
|
||||
ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*,
|
||||
ffi_cif *cif,
|
||||
void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*),
|
||||
void *user_data,
|
||||
void *codeloc) __attribute__((deprecated));
|
||||
#endif
|
||||
|
||||
#endif /* FFI_CLOSURES */
|
||||
|
||||
#ifdef FFI_GO_CLOSURES
|
||||
|
||||
typedef struct {
|
||||
void *tramp;
|
||||
ffi_cif *cif;
|
||||
void (*fun)(ffi_cif*,void*,void**,void*);
|
||||
} ffi_go_closure;
|
||||
|
||||
FFI_API ffi_status ffi_prep_go_closure (ffi_go_closure*, ffi_cif *,
|
||||
void (*fun)(ffi_cif*,void*,void**,void*));
|
||||
|
||||
FFI_API void ffi_call_go (ffi_cif *cif, void (*fn)(void), void *rvalue,
|
||||
void **avalue, void *closure);
|
||||
|
||||
#endif /* FFI_GO_CLOSURES */
|
||||
|
||||
/* ---- Public interface definition -------------------------------------- */
|
||||
|
||||
FFI_API
|
||||
ffi_status ffi_prep_cif(ffi_cif *cif,
|
||||
ffi_abi abi,
|
||||
unsigned int nargs,
|
||||
ffi_type *rtype,
|
||||
ffi_type **atypes);
|
||||
|
||||
FFI_API
|
||||
ffi_status ffi_prep_cif_var(ffi_cif *cif,
|
||||
ffi_abi abi,
|
||||
unsigned int nfixedargs,
|
||||
unsigned int ntotalargs,
|
||||
ffi_type *rtype,
|
||||
ffi_type **atypes);
|
||||
|
||||
FFI_API
|
||||
void ffi_call(ffi_cif *cif,
|
||||
void (*fn)(void),
|
||||
void *rvalue,
|
||||
void **avalue);
|
||||
|
||||
FFI_API
|
||||
ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type,
|
||||
size_t *offsets);
|
||||
|
||||
/* Convert between closure and function pointers. */
|
||||
#if defined(PA_LINUX) || defined(PA_HPUX)
|
||||
#define FFI_FN(f) ((void (*)(void))((unsigned int)(f) | 2))
|
||||
#define FFI_CL(f) ((void *)((unsigned int)(f) & ~3))
|
||||
#else
|
||||
#define FFI_FN(f) ((void (*)(void))f)
|
||||
#define FFI_CL(f) ((void *)(f))
|
||||
#endif
|
||||
|
||||
/* ---- Definitions shared with assembly code ---------------------------- */
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
/* -----------------------------------------------------------------------
|
||||
ffi_cfi.h - Copyright (c) 2014 Red Hat, Inc.
|
||||
|
||||
Conditionally assemble cfi directives. Only necessary for building libffi.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the ``Software''), to deal in the Software without
|
||||
restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
----------------------------------------------------------------------- */
|
||||
|
||||
#ifndef FFI_CFI_H
|
||||
#define FFI_CFI_H
|
||||
|
||||
#ifdef HAVE_AS_CFI_PSEUDO_OP
|
||||
|
||||
# define cfi_startproc .cfi_startproc
|
||||
# define cfi_endproc .cfi_endproc
|
||||
# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off
|
||||
# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg
|
||||
# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off
|
||||
# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off
|
||||
# define cfi_offset(reg, off) .cfi_offset reg, off
|
||||
# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off
|
||||
# define cfi_register(r1, r2) .cfi_register r1, r2
|
||||
# define cfi_return_column(reg) .cfi_return_column reg
|
||||
# define cfi_restore(reg) .cfi_restore reg
|
||||
# define cfi_same_value(reg) .cfi_same_value reg
|
||||
# define cfi_undefined(reg) .cfi_undefined reg
|
||||
# define cfi_remember_state .cfi_remember_state
|
||||
# define cfi_restore_state .cfi_restore_state
|
||||
# define cfi_window_save .cfi_window_save
|
||||
# define cfi_personality(enc, exp) .cfi_personality enc, exp
|
||||
# define cfi_lsda(enc, exp) .cfi_lsda enc, exp
|
||||
# define cfi_escape(...) .cfi_escape __VA_ARGS__
|
||||
# define cfi_window_save .cfi_window_save
|
||||
|
||||
#else
|
||||
|
||||
# define cfi_startproc
|
||||
# define cfi_endproc
|
||||
# define cfi_def_cfa(reg, off)
|
||||
# define cfi_def_cfa_register(reg)
|
||||
# define cfi_def_cfa_offset(off)
|
||||
# define cfi_adjust_cfa_offset(off)
|
||||
# define cfi_offset(reg, off)
|
||||
# define cfi_rel_offset(reg, off)
|
||||
# define cfi_register(r1, r2)
|
||||
# define cfi_return_column(reg)
|
||||
# define cfi_restore(reg)
|
||||
# define cfi_same_value(reg)
|
||||
# define cfi_undefined(reg)
|
||||
# define cfi_remember_state
|
||||
# define cfi_restore_state
|
||||
# define cfi_window_save
|
||||
# define cfi_personality(enc, exp)
|
||||
# define cfi_lsda(enc, exp)
|
||||
# define cfi_escape(...)
|
||||
# define cfi_window_save
|
||||
|
||||
#endif /* HAVE_AS_CFI_PSEUDO_OP */
|
||||
#endif /* FFI_CFI_H */
|
||||
+164
@@ -0,0 +1,164 @@
|
||||
/* -----------------------------------------------------------------*-C-*-
|
||||
ffitarget.h - Copyright (c) 2012, 2014, 2018 Anthony Green
|
||||
Copyright (c) 1996-2003, 2010 Red Hat, Inc.
|
||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
|
||||
Target configuration macros for x86 and x86-64.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
``Software''), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
----------------------------------------------------------------------- */
|
||||
|
||||
#ifndef LIBFFI_TARGET_H
|
||||
#define LIBFFI_TARGET_H
|
||||
|
||||
#ifndef LIBFFI_H
|
||||
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
|
||||
#endif
|
||||
|
||||
/* ---- System specific configurations ----------------------------------- */
|
||||
|
||||
/* For code common to all platforms on x86 and x86_64. */
|
||||
#define X86_ANY
|
||||
|
||||
#if defined (X86_64) && defined (__i386__)
|
||||
#undef X86_64
|
||||
#warning ******************************************************
|
||||
#warning ********** X86 IS DEFINED ****************************
|
||||
#warning ******************************************************
|
||||
#define X86
|
||||
#endif
|
||||
|
||||
#ifdef X86_WIN64
|
||||
#define FFI_SIZEOF_ARG 8
|
||||
#define USE_BUILTIN_FFS 0 /* not yet implemented in mingw-64 */
|
||||
#endif
|
||||
|
||||
#define FFI_TARGET_SPECIFIC_STACK_SPACE_ALLOCATION
|
||||
#ifndef _MSC_VER
|
||||
#define FFI_TARGET_HAS_COMPLEX_TYPE
|
||||
#endif
|
||||
|
||||
/* ---- Generic type definitions ----------------------------------------- */
|
||||
|
||||
#ifndef LIBFFI_ASM
|
||||
#ifdef X86_WIN64
|
||||
#ifdef _MSC_VER
|
||||
typedef unsigned __int64 ffi_arg;
|
||||
typedef __int64 ffi_sarg;
|
||||
#else
|
||||
typedef unsigned long long ffi_arg;
|
||||
typedef long long ffi_sarg;
|
||||
#endif
|
||||
#else
|
||||
#if defined __x86_64__ && defined __ILP32__
|
||||
#define FFI_SIZEOF_ARG 8
|
||||
#define FFI_SIZEOF_JAVA_RAW 4
|
||||
typedef unsigned long long ffi_arg;
|
||||
typedef long long ffi_sarg;
|
||||
#else
|
||||
typedef unsigned long ffi_arg;
|
||||
typedef signed long ffi_sarg;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef enum ffi_abi {
|
||||
#if defined(X86_WIN64)
|
||||
FFI_FIRST_ABI = 0,
|
||||
FFI_WIN64, /* sizeof(long double) == 8 - microsoft compilers */
|
||||
FFI_GNUW64, /* sizeof(long double) == 16 - GNU compilers */
|
||||
FFI_LAST_ABI,
|
||||
#ifdef __GNUC__
|
||||
FFI_DEFAULT_ABI = FFI_GNUW64
|
||||
#else
|
||||
FFI_DEFAULT_ABI = FFI_WIN64
|
||||
#endif
|
||||
|
||||
#elif defined(X86_64) || (defined (__x86_64__) && defined (X86_DARWIN))
|
||||
FFI_FIRST_ABI = 1,
|
||||
FFI_UNIX64,
|
||||
FFI_WIN64,
|
||||
FFI_EFI64 = FFI_WIN64,
|
||||
FFI_GNUW64,
|
||||
FFI_LAST_ABI,
|
||||
FFI_DEFAULT_ABI = FFI_UNIX64
|
||||
|
||||
#elif defined(X86_WIN32)
|
||||
FFI_FIRST_ABI = 0,
|
||||
FFI_SYSV = 1,
|
||||
FFI_STDCALL = 2,
|
||||
FFI_THISCALL = 3,
|
||||
FFI_FASTCALL = 4,
|
||||
FFI_MS_CDECL = 5,
|
||||
FFI_PASCAL = 6,
|
||||
FFI_REGISTER = 7,
|
||||
FFI_LAST_ABI,
|
||||
FFI_DEFAULT_ABI = FFI_MS_CDECL
|
||||
#else
|
||||
FFI_FIRST_ABI = 0,
|
||||
FFI_SYSV = 1,
|
||||
FFI_THISCALL = 3,
|
||||
FFI_FASTCALL = 4,
|
||||
FFI_STDCALL = 5,
|
||||
FFI_PASCAL = 6,
|
||||
FFI_REGISTER = 7,
|
||||
FFI_MS_CDECL = 8,
|
||||
FFI_LAST_ABI,
|
||||
FFI_DEFAULT_ABI = FFI_SYSV
|
||||
#endif
|
||||
} ffi_abi;
|
||||
#endif
|
||||
|
||||
/* ---- Definitions for closures ----------------------------------------- */
|
||||
|
||||
#define FFI_CLOSURES 1
|
||||
#define FFI_GO_CLOSURES 1
|
||||
|
||||
#define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1)
|
||||
#define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2)
|
||||
#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3)
|
||||
#define FFI_TYPE_MS_STRUCT (FFI_TYPE_LAST + 4)
|
||||
|
||||
#if defined (X86_64) || defined(X86_WIN64) \
|
||||
|| (defined (__x86_64__) && defined (X86_DARWIN))
|
||||
/* 4 bytes of ENDBR64 + 7 bytes of LEA + 6 bytes of JMP + 7 bytes of NOP
|
||||
+ 8 bytes of pointer. */
|
||||
# define FFI_TRAMPOLINE_SIZE 32
|
||||
# define FFI_NATIVE_RAW_API 0
|
||||
#else
|
||||
/* 4 bytes of ENDBR32 + 5 bytes of MOV + 5 bytes of JMP + 2 unused
|
||||
bytes. */
|
||||
# define FFI_TRAMPOLINE_SIZE 16
|
||||
# define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */
|
||||
#endif
|
||||
|
||||
#if !defined(GENERATE_LIBFFI_MAP) && defined(__CET__)
|
||||
# include <cet.h>
|
||||
# if (__CET__ & 1) != 0
|
||||
# define ENDBR_PRESENT
|
||||
# endif
|
||||
# define _CET_NOTRACK notrack
|
||||
#else
|
||||
# define _CET_ENDBR
|
||||
# define _CET_NOTRACK
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
/* -----------------------------------------------------------------------
|
||||
ffi_tramp.h - Copyright (C) 2021 Microsoft, Inc.
|
||||
|
||||
Static trampoline definitions.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the ``Software''), to deal in the Software without
|
||||
restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
----------------------------------------------------------------------- */
|
||||
|
||||
#ifndef FFI_TRAMP_H
|
||||
#define FFI_TRAMP_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int ffi_tramp_is_supported(void);
|
||||
void *ffi_tramp_alloc (int flags);
|
||||
void ffi_tramp_set_parms (void *tramp, void *data, void *code);
|
||||
void *ffi_tramp_get_addr (void *tramp);
|
||||
void ffi_tramp_free (void *tramp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* FFI_TRAMP_H */
|
||||
@@ -0,0 +1,3 @@
|
||||
ImageModulePath = ${.}/../../../truffle/builder/truffle-runtime-svm.jar:${.}/../../../truffle/builder/truffle-enterprise-svm.jar
|
||||
Args = -H:CLibraryPath=${.}/builder --features=com.oracle.svm.enterprise.truffle.compiler.EnterpriseTruffleCompilerFeature
|
||||
IgnoreIfBuilderOnClasspath = true
|
||||
Reference in New Issue
Block a user