Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

22.2.0 CE regression: org.graalvm.nativeimage.c.CContext type is not available in this platform #4771

Closed
huahaiy opened this issue Jul 30, 2022 · 3 comments
Assignees

Comments

@huahaiy
Copy link

huahaiy commented Jul 30, 2022

Describe the issue
Upgraded to 22.2.0, when compiling to native image, C API seems to be no longer available. It works fine in 21.3.0. The exception is
com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext

Steps to reproduce the issue
Please include both build steps as well as run steps

  1. git clone -b graalvm22 https://github.com/juji-io/datalevin
  2. cd datalevin/native
  3. script/compile

Describe GraalVM and your environment:

  • GraalVM version: CE 22.2.0
  • JDK major version: 11
  • OS: Ubuntu Linux
  • Architecture: AMD64

More details

  [1/7] Initializing...                                                                                   (14.5s @ 0.59GB)
 Version info: 'GraalVM 22.2.0 Java 11 CE'
 Java version info: '11.0.16+8-jvmci-22.2-b06'
 C compiler: gcc (linux, x86_64, 9.4.0)
 Garbage collector: Serial GC
 2 user-specific feature(s)
 - InitAtBuildTimeFeature
 - org.graalvm.home.HomeFinderFeature: Finds GraalVM paths and its version number
[2/7] Performing analysis...  []                                                                        (17.9s @ 4.57GB)
  11,570 (95.08%) of 12,169 classes reachable
  15,895 (42.77%) of 37,163 fields reachable
  41,297 (76.92%) of 53,690 methods reachable
     133 classes,     0 fields, and     0 methods registered for reflection
       4 native libraries: dtlv, lmdb, m, stdc++

Error: java.util.concurrent.ExecutionException: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
com.oracle.graal.pointsto.util.AnalysisError: java.util.concurrent.ExecutionException: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisError.shouldNotReachHere(AnalysisError.java:172)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:66)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$postTask$9(ImageHeapScanner.java:611)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:177)
	at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.util.concurrent.ExecutionException: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:64)
	... 9 more
Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.createType(AnalysisUniverse.java:221)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:212)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:189)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:74)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:52)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:49)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1737)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess.lookupJavaType(UniverseMetaAccess.java:84)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMetaAccess.lookupJavaType(AnalysisMetaAccess.java:52)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ameta.HostedDynamicHubFeature.replace(HostedDynamicHubFeature.java:52)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.replaceObject(AnalysisUniverse.java:583)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.maybeReplace(ImageHeapScanner.java:296)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.createImageHeapObject(ImageHeapScanner.java:216)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$getOrCreateConstantReachableTask$2(ImageHeapScanner.java:195)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:63)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.getOrCreateConstantReachableTask(ImageHeapScanner.java:207)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.heap.SVMImageHeapScanner.getOrCreateConstantReachableTask(SVMImageHeapScanner.java:94)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.markConstantReachable(ImageHeapScanner.java:171)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.onArrayElementReachable(ImageHeapScanner.java:369)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.createImageHeapObject(ImageHeapScanner.java:246)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$getOrCreateConstantReachableTask$2(ImageHeapScanner.java:195)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:63)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.getOrCreateConstantReachableTask(ImageHeapScanner.java:207)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.heap.SVMImageHeapScanner.getOrCreateConstantReachableTask(SVMImageHeapScanner.java:94)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.markConstantReachable(ImageHeapScanner.java:171)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.onFieldValueReachable(ImageHeapScanner.java:333)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$createImageHeapObject$3(ImageHeapScanner.java:272)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:63)
	... 9 more
Error: java.util.concurrent.ExecutionException: org.graalvm.compiler.debug.GraalError: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
com.oracle.graal.pointsto.util.AnalysisError: java.util.concurrent.ExecutionException: org.graalvm.compiler.debug.GraalError: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisError.shouldNotReachHere(AnalysisError.java:172)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:66)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$postTask$9(ImageHeapScanner.java:611)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:177)
	at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.util.concurrent.ExecutionException: org.graalvm.compiler.debug.GraalError: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:64)
	... 9 more
Caused by: org.graalvm.compiler.debug.GraalError: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.setException(AnalysisFuture.java:49)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:269)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:63)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.getOrCreateConstantReachableTask(ImageHeapScanner.java:207)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.heap.SVMImageHeapScanner.getOrCreateConstantReachableTask(SVMImageHeapScanner.java:94)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.markConstantReachable(ImageHeapScanner.java:171)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.onArrayElementReachable(ImageHeapScanner.java:369)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.createImageHeapObject(ImageHeapScanner.java:246)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$getOrCreateConstantReachableTask$2(ImageHeapScanner.java:195)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:63)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.getOrCreateConstantReachableTask(ImageHeapScanner.java:207)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.heap.SVMImageHeapScanner.getOrCreateConstantReachableTask(SVMImageHeapScanner.java:94)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.markConstantReachable(ImageHeapScanner.java:171)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.onFieldValueReachable(ImageHeapScanner.java:333)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$createImageHeapObject$3(ImageHeapScanner.java:272)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:63)
	... 9 more
Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: type is not available in this platform: org.graalvm.nativeimage.c.CContext
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.createType(AnalysisUniverse.java:221)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.lookupAllowUnresolved(AnalysisUniverse.java:212)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:189)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.lookup(AnalysisUniverse.java:74)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:52)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess$1.apply(UniverseMetaAccess.java:49)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1737)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess.lookupJavaType(UniverseMetaAccess.java:84)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMetaAccess.lookupJavaType(AnalysisMetaAccess.java:52)
	at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ameta.HostedDynamicHubFeature.replace(HostedDynamicHubFeature.java:52)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.replaceObject(AnalysisUniverse.java:583)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.maybeReplace(ImageHeapScanner.java:296)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.createImageHeapObject(ImageHeapScanner.java:216)
	at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.heap.ImageHeapScanner.lambda$getOrCreateConstantReachableTask$2(ImageHeapScanner.java:195)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	... 25 more
@huahaiy huahaiy changed the title org.graalvm.nativeimage.c.CContext type is not available in this platform 22.2.0 CE regression: org.graalvm.nativeimage.c.CContext type is not available in this platform Jul 30, 2022
@oubidar-Abderrahim oubidar-Abderrahim self-assigned this Aug 2, 2022
@oubidar-Abderrahim
Copy link
Member

Thank you for reporting this, we'll take a look into it and get back to you

@oubidar-Abderrahim
Copy link
Member

oubidar-Abderrahim commented Oct 6, 2022

We included some improvements to the object backtrace, which should be available next release by the end of this month, the new stacktrace looks like this:

Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Unsupported features in 3 methods
Detailed message:
Error: type is not available in this platform: org.graalvm.nativeimage.c.CContext
Trace: Object was reached by
  indexing into array java.lang.Object[]@15388e60: [Ljava.lang.Object;@15388e60
  reading field clojure.lang.PersistentHashMap$BitmapIndexedNode.array of constant 
    clojure.lang.PersistentHashMap$BitmapIndexedNode@67509cb0: clojure.lang.PersistentHashMap$BitmapIndexedNode@67509cb0
  indexing into array clojure.lang.PersistentHashMap$INode[]@7327311b: [Lclojure.lang.PersistentHashMap$INode;@7327311b
  reading field clojure.lang.PersistentHashMap$ArrayNode.array of constant 
    clojure.lang.PersistentHashMap$ArrayNode@56b88c63: clojure.lang.PersistentHashMap$ArrayNode@56b88c63
  indexing into array clojure.lang.PersistentHashMap$INode[]@6b789fc7: [Lclojure.lang.PersistentHashMap$INode;@6b789fc7
  reading field clojure.lang.PersistentHashMap$ArrayNode.array of constant 
    clojure.lang.PersistentHashMap$ArrayNode@279d5101: clojure.lang.PersistentHashMap$ArrayNode@279d5101
  reading field clojure.lang.PersistentHashMap.root of constant 
    clojure.lang.PersistentHashMap@681a92f: {primitives-classnames #'clojure.core/primitives-classnames, +' #'clojure.core/+...
  reading field java.util.concurrent.atomic.AtomicReference.value of constant 
    java.util.concurrent.atomic.AtomicReference@2a74149d: {primitives-classnames #'clojure.core/primitives-classnames, +' #'clojure.core/+...
  reading field clojure.lang.Namespace.mappings of constant 
    clojure.lang.Namespace@b921f39: datalevin.binding.graal
  reading field clojure.lang.Var.ns of constant 
    clojure.lang.Var@6e7082c0: #'datalevin.binding.graal/->Flag
  scanning root clojure.lang.Var@6e7082c0: #'datalevin.binding.graal/->Flag embedded in 
    datalevin.binding.graal$kv_flags.invokeStatic(graal.clj:65)
Error: type is not available in this platform: org.graalvm.nativeimage.c.CContext
Trace: Object was reached by
  indexing into array java.lang.Object[]@5fb0d333: [Ljava.lang.Object;@5fb0d333
  reading field clojure.lang.PersistentHashMap$BitmapIndexedNode.array of constant 
    clojure.lang.PersistentHashMap$BitmapIndexedNode@56cf1a83: clojure.lang.PersistentHashMap$BitmapIndexedNode@56cf1a83
  indexing into array clojure.lang.PersistentHashMap$INode[]@29baa8e2: [Lclojure.lang.PersistentHashMap$INode;@29baa8e2
  reading field clojure.lang.PersistentHashMap$ArrayNode.array of constant 
    clojure.lang.PersistentHashMap$ArrayNode@3e6da5c5: clojure.lang.PersistentHashMap$ArrayNode@3e6da5c5
  indexing into array clojure.lang.PersistentHashMap$INode[]@6b789fc7: [Lclojure.lang.PersistentHashMap$INode;@6b789fc7
  reading field clojure.lang.PersistentHashMap$ArrayNode.array of constant 
    clojure.lang.PersistentHashMap$ArrayNode@279d5101: clojure.lang.PersistentHashMap$ArrayNode@279d5101
  reading field clojure.lang.PersistentHashMap.root of constant 
    clojure.lang.PersistentHashMap@681a92f: {primitives-classnames #'clojure.core/primitives-classnames, +' #'clojure.core/+...
  reading field java.util.concurrent.atomic.AtomicReference.value of constant 
    java.util.concurrent.atomic.AtomicReference@2a74149d: {primitives-classnames #'clojure.core/primitives-classnames, +' #'clojure.core/+...
  reading field clojure.lang.Namespace.mappings of constant 
    clojure.lang.Namespace@b921f39: datalevin.binding.graal
  reading field clojure.lang.Var.ns of constant 
    clojure.lang.Var@6e7082c0: #'datalevin.binding.graal/->Flag
  scanning root clojure.lang.Var@6e7082c0: #'datalevin.binding.graal/->Flag embedded in 
    datalevin.binding.graal$kv_flags.invokeStatic(graal.clj:65)
Error: type is not available in this platform: org.graalvm.nativeimage.c.CContext
Trace: Object was reached by
  reading field java.lang.Class.nestHost of constant 
    java.lang.Class@11c61f87: interface org.graalvm.nativeimage.c.CContext$Directives
  manually triggered rescan

Judging by the improved object backtrace, it looks like this is a clojure-specific issue, please open an issue for Clojure for it.

@huahaiy
Copy link
Author

huahaiy commented Dec 15, 2022

This is not a Clojure issue, as this same Clojure code worked fine prior to this graal commit.

830e38c#r93123371

Looks like it is because CContext is now marked as Platform.HOSTED_ONLY. This doesn't make any sense, because, if C interop is to be conducted in the native image, CContext should be made available. This basically blocks all possibility of doing C interop inside native image.

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

No branches or pull requests

3 participants