Skip to content

Java2Swift crashes on aarch64 LinuxΒ #51

@segabor

Description

@segabor

Hey folks,

I am running a Ubuntu 24.04.1 on my Turing RK1 SoC. The build process aborts with failed Java2Swift execution.

[711/711] Linking Java2Swift
Build complete! (125.83s)
mkdir -p Sources/JavaKit/generated
.build/aarch64-unknown-linux-gnu/debug/Java2Swift --module-name JavaKit -o Sources/JavaKit/generated java.lang.Object=JavaObject java.util.Enumeration java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.Error=JavaError

πŸ’£ Program crashed: Bad pointer dereference at 0x00616c434c525530

Thread 0 "Java2Swift" crashed:

 0 0x0000ffffb181c16c swift_release + 36 in libswiftCore.so
 1 closure #1 in methodMangling<each A>(parameterTypes:resultType:) + 1171 in Java2Swift at /home/segabor/src/swift-java/Sources/JavaKit/JavaObject+MethodCalls.swift:27:32

    25β”‚     initializedCount in
    26β”‚     for parameterType in repeat each parameterTypes {
    27β”‚       buffer[initializedCount] = parameterType.javaType                                                                 
      β”‚                                β–²
    28β”‚       initializedCount += 1
    29β”‚     }

 2 methodMangling<each A>(parameterTypes:resultType:) + 1371 in Java2Swift at /home/segabor/src/swift-java/Sources/JavaKit/JavaObject+MethodCalls.swift:23:40

    21β”‚   resultType: JavaType
    22β”‚ ) -> String {
    23β”‚   let parameterTypesArray = [JavaType].init(unsafeUninitializedCapacity: countArgs(repeat each parameterTypes)) {       
      β”‚                                        β–²
    24β”‚     buffer,
    25β”‚     initializedCount in

 3 static AnyJavaObject.javaMethodLookup<A>(thisClass:methodName:parameterTypes:resultType:in:) + 979 in Java2Swift at /home/segabor/src/swift-java/Sources/JavaKit/JavaObject+MethodCalls.swift:69:27

    67β”‚   ) throws -> jmethodID {
    68β”‚     // Compute the method signature.
    69β”‚     let methodSignature = methodMangling(                                                                               
      β”‚                           β–²
    70β”‚       parameterTypes: repeat (each Param).self,
    71β”‚       resultType: resultType

 4 static AnyJavaObject.dynamicJavaNewObject<A>(in:arguments:) + 1599 in Java2Swift at /home/segabor/src/swift-java/Sources/JavaKit/JavaObject+MethodCalls.swift:254:29

   252β”‚     // Compute the method signature so we can find the right method, then look up the
   253β”‚     // method within the class.
   254β”‚     let methodID = try Self.javaMethodLookup(                                                                           
      β”‚                             β–²
   255β”‚       thisClass: thisClass,
   256β”‚       methodName: javaConstructorName,

 5 JavaToSwift.run(environment:) + 1827 in Java2Swift at /home/segabor/src/swift-java/Sources/Java2Swift/JavaToSwift.swift:115:23

   113β”‚ 
   114β”‚     // Load all of the requested classes.
   115β”‚     let classLoader = URLClassLoader(                                                                                   
      β”‚                       β–²
   116β”‚       try classPathWithJarFile.map { try URL("file://\($0)", environment: environment) },
   117β”‚       environment: environment

 6 JavaToSwift.run() + 527 in Java2Swift at /home/segabor/src/swift-java/Sources/Java2Swift/JavaToSwift.swift:74:9

    72β”‚     javaVirtualMachine = jvm
    73β”‚ 
    74β”‚     try run(environment: jvm.environment)                                                                               
      β”‚         β–²
    75β”‚   }
    76β”‚

 7 static ParsableCommand.main(_:) + 487 in Java2Swift at /home/segabor/src/swift-java/.build/checkouts/swift-argument-parser/Sources/ArgumentParser/Parsable Types/ParsableCommand.swift:158:19

   156β”‚     do {
   157β”‚       var command = try parseAsRoot(arguments)
   158β”‚       try command.run()                                                                                                 
      β”‚                   β–²
   159β”‚     } catch {
   160β”‚       exit(withError: error)

 8 static ParsableCommand.main() + 51 in Java2Swift at /home/segabor/src/swift-java/.build/checkouts/swift-argument-parser/Sources/ArgumentParser/Parsable Types/ParsableCommand.swift:175:10

   173β”‚   /// if necessary.
   174β”‚   public static func main() {
   175β”‚     self.main(nil)                                                                                                      
      β”‚          β–²
   176β”‚   }
   177β”‚ }

 9 Java2Swift_main + 11 in Java2Swift at /home/segabor/src/swift-java/Sources/Java2Swift/JavaToSwift.swift:30:8

    28β”‚ /// Command-line utility to drive the export of Java classes into Swift types.
    29β”‚ @main
    30β”‚ struct JavaToSwift: ParsableCommand {                                                                                   
      β”‚        β–²
    31β”‚   static var _commandName: String { "Java2Swift" }
    32β”‚

10 0x0000ffffaf3f84c4 <unknown> in libc.so.6
11 0x0000ffffaf3f8598 <unknown> in libc.so.6

Backtrace took 3.46s

make: *** [Makefile:56: generate-JavaKit] Segmentation fault (core dumped)

Environment

OS: Linux alfa 6.1.0-1025-rockchip #25-Ubuntu SMP Mon Aug 26 23:01:14 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
Swift:

Swift version 6.0.1 (swift-6.0.1-RELEASE)
Target: aarch64-unknown-linux-gnu

Java:

openjdk version "23" 2024-09-17
OpenJDK Runtime Environment Temurin-23+37 (build 23+37)
OpenJDK 64-Bit Server VM Temurin-23+37 (build 23+37, mixed mode, sharing)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions