Debugging the architecture-dependent AD file
Gustavo Serra Scalet
gustavo.scalet at eldorado.org.br
Tue Oct 25 13:15:39 UTC 2016
Hi,
I'd like to know if there is any easier way to debug the architecture-dependent
AD file. I see that some compilers include a set of gdb-python scripts in order
to facilitate debugging.
On this example I wanted to closely check how loadB_indirect_Ex is behaving on
ppc. I could manage to debug the hotspot overall, but I'm confused about what is
happening when looking at the AD file:
~/hs-comp $ ./build/linux-ppc64le-normal-server-slowdebug/jdk/bin/javac pidigits.java
~/hs-comp $ gdb ./build/linux-ppc64le-normal-server-slowdebug/jdk/bin/java
GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "powerpc64le-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from java...done.
(gdb 64) handle SIGILL nostop noprint pass
Signal Stop Print Pass to program Description
SIGILL No No Yes Illegal instruction
(gdb 64) handle SIGSEGV nostop noprint pass
Signal Stop Print Pass to program Description
SIGSEGV No No Yes Segmentation fault
(gdb 64) b ppc.ad:5030
No source file named ppc.ad.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (ppc.ad:5030) pending.
(gdb 64) r -Xcomp -XX:-UseSIGTRAP pidigits 10
Starting program: /home/gut/hs-comp/java -Xcomp -XX:-UseSIGTRAP pidigits 10
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/powerpc64le-linux-gnu/libthread_db.so.1".
[New Thread 0x3fffb61df1a0 (LWP 17208)]
... (removed for readability purposes)
[New Thread 0x3fffb534f1a0 (LWP 17209)]
[Switching to Thread 0x3ffe7944f1a0 (LWP 17292)]
Breakpoint 1, State::_sub_Op_LoadB (this=0x3ffe68044950, n=0x3ffe34326930) at /home/gut/hs-comp/hotspot/src/cpu/ppc/vm/ppc.ad:5031
warning: Source file is more recent than executable.
5031 predicate(n->as_Load()->is_unordered() || followed_by_acquire(n));
(gdb 64) l
5026 %}
5027
5028 // Load Byte (8bit signed). LoadB = LoadUB + ConvUB2B.
5029 instruct loadB_indirect_Ex(iRegIdst dst, indirectMemory mem) %{
5030 match(Set dst (LoadB mem));
5031 predicate(n->as_Load()->is_unordered() || followed_by_acquire(n));
5032 ins_cost(MEMORY_REF_COST + DEFAULT_COST);
5033 expand %{
5034 iRegIdst tmp;
5035 loadUB_indirect(tmp, mem);
(gdb 64) n
7500 dfa_ppc.cpp: No such file or directory.
(gdb 64) dir build/linux-ppc64le-normal-server-slowdebug/hotspot/variant-server/gensrc/adfiles/
Source directories searched: /home/gut/hs-comp/build/linux-ppc64le-normal-server-slowdebug/hotspot/variant-server/gensrc/adfiles:$cdir:$cwd
(gdb 64) l
7495 DFA_PRODUCTION__SET_VALID(RARG3REGI, loadB_indirect_ac_Ex_rule, c+1)
7496 }
7497 if (STATE__NOT_YET_VALID(RARG4REGI) || _cost[RARG4REGI] > c+1) {
7498 DFA_PRODUCTION__SET_VALID(RARG4REGI, loadB_indirect_ac_Ex_rule, c+1)
7499 }
7500 }
7501 if( STATE__VALID_CHILD(_kids[0], INDIRECTMEMORY) &&
7502 (
7503 #line 5031 "/home/gut/hs-comp/hotspot/src/cpu/ppc/vm/ppc.ad"
7504 n->as_Load()->is_unordered() || followed_by_acquire(n)
(gdb 64) #WTH?!
(gdb 64) fin
Run till exit from #0 State::_sub_Op_LoadB (this=0x3ffe68044950, n=0x3ffe34326930) at dfa_ppc.cpp:7514
State::DFA (this=0x3ffe68044950, opcode=156, n=0x3ffe34326930) at dfa_ppc.cpp:11395
11395 case Op_LoadB: { _sub_Op_LoadB(n);
(gdb 64) n
11676 }
(gdb 64)
11677 return true;
(gdb 64)
Matcher::Label_Root (this=0x3ffe7944b5d8, n=0x3ffe34326930, svec=0x3ffe68044950, control=0x3ffe34326748, mem=0x1)
at /home/gut/hs-comp/hotspot/src/share/vm/opto/matcher.cpp:1565
1565 for( x = 0; x < _LAST_MACH_OPER; x++ )
I see that the wiki page dedicated to this topic is unfortunately empty:
https://wiki.openjdk.java.net/display/HotSpot/UsingGDB
And I also didn't find any blog post about this (I'm considering doing one after
I figure this out).
Thanks in advance
More information about the hotspot-compiler-dev
mailing list