Karm / mandrel-integration-tests

Integration tests for GraalVM and its Mandrel distribution. Runs Quarkus, Helidon and Micronaut applications and small targeted reproducers. The focus is solely on native-image utility and compilation of Java applications into native executables.
Apache License 2.0
5 stars 3 forks source link

DebugSymbolsTest fails with Mandrel 22.3.0-dev #110

Closed jerboaa closed 1 year ago

jerboaa commented 1 year ago

Fails with:

[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 340.424 s <<< FAILURE! - in org.graalvm.tests.integration.DebugSymbolsTest
[ERROR] debugSymbolsSmokeGDB{TestInfo}  Time elapsed: 72.936 s  <<< FAILURE!
org.opentest4j.AssertionFailedError: 
There were errors in the GDB session. Note that commands in the session might depend on each other. Errors: 
Command 'info functions .*smoke.*' did not match the expected pattern '.*File debug_symbols_smoke/ClassA.java:.*java.lang.String \*debug_symbols_smoke.ClassA::toString\(void\).*File debug_symbols_smoke/Main.java:.*void debug_symbols_smoke.Main\$\$Lambda\$.*::accept\(java.lang.Object \*\).*void debug_symbols_smoke.Main::lambda\$thisIsTheEnd\$0\(java.io.ByteArrayOutputStream \*, debug_symbols_smoke.ClassA \*\).*void debug_symbols_smoke.Main::main\(java.lang.String\[\] \*\).*void debug_symbols_smoke.Main::thisIsTheEnd\(java.util.List \*\).*'.
Output was:
(gdb) All functions matching regular expression ".*smoke.*":

File debug_symbols_smoke/ClassA.java:
37: java.lang.String *debug_symbols_smoke.ClassA::toString(debug_symbols_smoke.ClassA *);

File debug_symbols_smoke/Main.java:

        void debug_symbols_smoke.Main$$Lambda$768/0x00000007c08fcc18::accept(debug_symbols_smoke.Main$$Lambda$768/0x00000007c08fcc18 *, java.lang.Object *);

    50: void debug_symbols_smoke.Main::lambda$thisIsTheEnd$0(java.io.ByteArrayOutputStream *, debug_symbols_smoke.ClassA *);
64: void debug_symbols_smoke.Main::main(java.lang.String[] *);
49: void debug_symbols_smoke.Main::thisIsTheEnd(java.util.List *);
 ==> expected: <true> but was: <false>
    at org.graalvm.tests.integration.DebugSymbolsTest.carryOutGDBSession(DebugSymbolsTest.java:385)
    at org.graalvm.tests.integration.DebugSymbolsTest.debugSymbolsSmokeGDB(DebugSymbolsTest.java:136)
zakkak commented 1 year ago

This look like an upstream issue.

GDB reports that toString is expecting a parameter of type debug_symbols_smoke.ClassA while toString doesn't take any parameters.

@adinn does it ring any bells?

jerboaa commented 1 year ago

Here is what a regular info functions *.smoke.* produces in gdb for me with a 22.3-dev build:

(gdb) info functions .*smoke.*
All functions matching regular expression ".*smoke.*":

File debug_symbols_smoke/ClassA.java:
37: java.lang.String *debug_symbols_smoke.ClassA::toString(debug_symbols_smoke.ClassA *);

File debug_symbols_smoke/Main.java:
    void debug_symbols_smoke.Main$$Lambda$763/0x00000007c08fc418::accept(debug_symbols_smoke.Main$$Lambda$763/0x00000007c08fc418 *, java.lang.Object *);
50: void debug_symbols_smoke.Main::lambda$thisIsTheEnd$0(java.io.ByteArrayOutputStream *, debug_symbols_smoke.ClassA *);
64: void debug_symbols_smoke.Main::main(java.lang.String[] *);
49: void debug_symbols_smoke.Main::thisIsTheEnd(java.util.List *);

On 21.3 we had this for the same application:

(gdb)  info functions .*smoke.*
All functions matching regular expression ".*smoke.*":

File debug_symbols_smoke/ClassA.java:
    java.lang.String *debug_symbols_smoke.ClassA::toString(void);

File debug_symbols_smoke/Main$$Lambda$584/0x00000007c04e4d60.java:
    void debug_symbols_smoke.Main$$Lambda$584.0x00000007c04e4d60::accept(java.lang.Object *);

File debug_symbols_smoke/Main.java:
    void debug_symbols_smoke.Main::lambda$thisIsTheEnd$0(java.io.ByteArrayOutputStream *, debug_symbols_smoke.ClassA *);
    void debug_symbols_smoke.Main::main(java.lang.String[] *);
    void debug_symbols_smoke.Main::thisIsTheEnd(java.util.List *);
zakkak commented 1 year ago

The regression appears after https://github.com/oracle/graal/pull/4811 and more specifically https://github.com/oracle/graal/pull/4811/commits/87722a0665ed61751e9c6a87c48f636c30091e67

It's still not clear to me why though. :eyes:

It looks like the addition of DW_AT_linkage_name results in gdb printing parameters with DW_AT_artificial set (i.e. the this parameter).

adinn commented 1 year ago

Yes, I believe the problem here is that the the method signature is being printed with an extra type for this. I am not sure why that is happening nor why it is not an issue for other methods. I will look into it ASAP.

jerboaa commented 1 year ago

OK, I'll file an upstream issue and assign to you @adinn. Sound good?

adinn commented 1 year ago

@jerboaa Thrilling!

jerboaa commented 1 year ago

@adinn Here you go: https://github.com/oracle/graal/issues/5064