This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug translator/17889] New: the translator does not understand arm64 constants in sdt markers


https://sourceware.org/bugzilla/show_bug.cgi?id=17889

            Bug ID: 17889
           Summary: the translator does not understand arm64 constants in
                    sdt markers
           Product: systemtap
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: translator
          Assignee: systemtap at sourceware dot org
          Reporter: wcohen at redhat dot com

Some of the tests using markers were failing on arm64 because when the compiler
optimization is enabled there will be constants for some of the marker probe
arguments and the constants are not prefixed with a '$'.  This can be obervered
in the systemtap.base/sdt.exp tests:

Executing on host: gcc ./systemtap.base/sdt.c  -g -isystem.
-isystem/root/systemtap_write/install/include -Wall -Wextra -Werror -O2  -lm  
-o sdt.c.exe.0    (timeout = 300)
spawn -ignore SIGHUP gcc ./systemtap.base/sdt.c -g -isystem.
-isystem/root/systemtap_write/install/include -Wall -Wextra -Werror -O2 -lm -o
sdt.c.exe.0
PASS: compiling sdt.c -O2  uprobe
executing: stap -w ./systemtap.base/sdt.stp sdt.c.exe.0 -c ./sdt.c.exe.0
FAIL: sdt -O2  uprobe
line 1: expected "_"
Got "semantic error: unable to find local 'arg1', [man error::dwarf] dieoffset
0x460 in /root/systemtap_write/systemtap/testsuite/sdt.c.exe.0, near pc
0x4004d8 in call1 ./systemtap.base/sdt.c (alternatives: $a)): identifier
'$arg1' at ./systemtap.base/sdt.stp:8:18"
Executing on host: gcc ./systemtap.base/sdt.c  -g -isystem.
-isystem/root/systemtap_write/install/include -Wall -Wextra -Werror -O3  -lm  
-o sdt.c.exe.1    (timeout = 300)
spawn -ignore SIGHUP gcc ./systemtap.base/sdt.c -g -isystem.
-isystem/root/systemtap_write/install/include -Wall -Wextra -Werror -O3 -lm -o
sdt.c.exe.1
PASS: compiling sdt.c -O3  uprobe
executing: stap -w ./systemtap.base/sdt.stp sdt.c.exe.1 -c ./sdt.c.exe.1
FAIL: sdt -O3  uprobe
line 1: expected "_"
Got "semantic error: unable to find local 'arg1', [man error::dwarf] dieoffset
0x460 in /root/systemtap_write/systemtap/testsuite/sdt.c.exe.1, near pc
0x4004d8 in call1 ./systemtap.base/sdt.c (alternatives: $a)): identifier
'$arg1' at ./systemtap.base/sdt.stp:8:18"
Executing on host: gcc ./systemtap.base/sdt.c  -g -isystem.
-isystem/root/systemtap_write/install/include -Wall -Wextra -Werror -std=c89 
-lm   -o sdt.c.exe.2    (timeout = 300)


Looking at the .s files generated by added '-save-temps' to the compiles show a
marker with just a raw literal in there:

.pushsection .note.stapsdt,"?","note"
.balign 4
.4byte 992f-991f,994f-993f,3
991: .asciz "stapsdt"
992: .balign 4
993: .8byte 990b
.8byte _.stapsdt.base
.8byte 0
.asciz "test"
.asciz "mark_a"
.asciz "-4@1"
994: .balign 4
.popsection

The unoptimized c89 version the marker below is getting the argument from
memory and the test passes: 

.pushsection .note.stapsdt,"?","note"
.balign 4
.4byte 992f-991f,994f-993f,3
991: .asciz "stapsdt"
992: .balign 4
993: .8byte 990b
.8byte _.stapsdt.base
.8byte 0
.asciz "test"
.asciz "mark_a"
.asciz "-4@[sp,12]"
994: .balign 4
.popsection

Need to be a bit careful fixing this because the ppc doesn't prefix constants
either but also uses raw constants as register names.  Careless changes for
arm64 could break things for ppc.

-- 
You are receiving this mail because:
You are the assignee for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]