@@ -1,3 +1,14 @@
+2016-02-19 Marcin Kościelnicki <koriakin@0x04.net>
+
+ * gdb.trace/entry-values.exp: Move call_insn setting to
+ trace-support.exp.
+ * gdb.trace/ftrace.exp: Move arg0exp setting to trace-support.exp.
+ * gdb.trace/mi-trace-unavailable.exp (proc_trace_unavailable): Move
+ pcnum setting to trace-support.exp, change fixed register 0 to
+ gpr0num variable.
+ * lib/trace-support.exp: Add setting pcnum, gpr0num, arg0exp,
+ call_insn; add powerpc, s390, and mips support.
+
2016-02-18 Iain Buclaw <ibuclaw@gdcproject.org>
* lib/future.exp: Add D support.
@@ -12,6 +12,8 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib "trace-support.exp"
load_lib dwarf.exp
# This test can only be run on targets which support DWARF-2 and use gas.
@@ -37,30 +39,6 @@ gdb_load ${binfile}1.o
set returned_from_foo ""
-if { [istarget "arm*-*-*"] || [istarget "aarch64*-*-*"] } {
- set call_insn "bl"
-} elseif { [istarget "s390*-*-*"] } {
- set call_insn "brasl"
-} elseif { [istarget "powerpc*-*-*"] } {
- set call_insn "bl"
-} elseif { [istarget "mips*-*-*"] } {
- # Skip the delay slot after the instruction used to make a call
- # (which can be a jump or a branch) if it has one.
- #
- # JUMP (or BRANCH) foo
- # insn1
- # insn2
- #
- # Most MIPS instructions used to make calls have a delay slot.
- # These include JAL, JALS, JALX, JALR, JALRS, BAL and BALS.
- # In this case the program continues from `insn2' when `foo'
- # returns. The only exception is JALRC, in which case execution
- # resumes from `insn1' instead.
- set call_insn {jalrc|[jb]al[sxr]*[ \t][^\r\n]+\r\n}
-} else {
- set call_insn "call"
-}
-
# Calculate the offset of the instruction in bar returned from foo.
set test "disassemble bar"
gdb_test_multiple $test $test {
@@ -239,17 +239,6 @@ test_ftrace_condition "(globvar >> 2) == 2" "globvar" { 8 9 10 }
# Test emit_call by accessing trace state variables.
test_ftrace_condition "(\$tsv = \$tsv + 2) > 10" "globvar" { 6 7 8 9 10 }
-# This expression is used for testing emit_reg.
-if [is_amd64_regs_target] {
- set arg0exp "\$rdi"
-} elseif [is_x86_like_target] {
- set arg0exp "*(int *) (\$ebp + 8)"
-} elseif { [istarget "aarch64*-*-*"] } {
- set arg0exp "\$x0"
-} else {
- set arg0exp ""
-}
-
if { "$arg0exp" != "" } {
test_ftrace_condition "($arg0exp > 500)" "globvar" { 6 7 8 9 10 }
}
@@ -77,6 +77,8 @@ mi_gdb_test "-trace-save -ctf ${tracefile}.ctf" ".*\\^done" \
proc test_trace_unavailable { data_source } {
global decimal
+ global pcnum
+ global gpr0num
with_test_prefix "$data_source" {
@@ -130,28 +132,15 @@ proc test_trace_unavailable { data_source } {
".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"1\",frame=\{.*" \
"-trace-find frame-number 1"
- set pcnum 0
- if [is_amd64_regs_target] {
- set pcnum 16
- } elseif [is_x86_like_target] {
- set pcnum 8
- } elseif [is_aarch64_target] {
- set pcnum 32
- } else {
- # Other ports support tracepoint should define the number
- # of its own pc register.
- }
-
- if { $pcnum != 0 } {
+ if { $pcnum != -1 } {
global hex
- # Test that register 0 and PC are displayed, and register
- # 0 is unavailable.
- mi_gdb_test "-data-list-register-values x 0 ${pcnum}" \
- ".*\\^done,register-values=\\\[\{number=\"0\",value=\"<unavailable>\"\},\{number=\"${pcnum}\",value=\"${hex}\"\}\\\]" \
+ # Test that GPR0 and PC are displayed, and GPR0 is unavailable.
+ mi_gdb_test "-data-list-register-values x ${gpr0num} ${pcnum}" \
+ ".*\\^done,register-values=\\\[\{number=\"${gpr0num}\",value=\"<unavailable>\"\},\{number=\"${pcnum}\",value=\"${hex}\"\}\\\]" \
"-data-list-register-values x"
# Test that only available register PC is displayed.
- mi_gdb_test "-data-list-register-values --skip-unavailable x 0 ${pcnum}" \
+ mi_gdb_test "-data-list-register-values --skip-unavailable x ${gpr0num} ${pcnum}" \
".*\\^done,register-values=\\\[\{number=\"${pcnum}\",value=\"${hex}\"\}\\\]" \
"-data-list-register-values --skip-unavailable x"
}
@@ -20,26 +20,91 @@
#
-# Program counter / stack pointer / frame pointer for supported targets.
-# Used in many tests, kept here to avoid duplication.
+# Target-specific information. Used in many tests, kept here
+# to avoid duplication and make it easier to add a new target.
#
if [is_amd64_regs_target] {
+ # Frame pointer.
set fpreg "rbp"
+ # Stack pointer.
set spreg "rsp"
+ # Program counter.
set pcreg "rip"
+ # How to collect the first argument to a function. Used to test
+ # register usage in tracepoint conditions.
+ set arg0exp "\$rdi"
+ # The mnemonic of the usual, unconditional call instruction.
+ set call_insn "call"
+ # Number of the PC register.
+ set pcnum 16
+ # Number of any GPR (it's supposed to be some register that's not
+ # collected by default).
+ set gpr0num 0
} elseif [is_x86_like_target] {
set fpreg "ebp"
set spreg "esp"
set pcreg "eip"
+ set arg0exp "*(int *) (\$ebp + 8)"
+ set call_insn "call"
+ set pcnum 8
+ set gpr0num 0
} elseif [is_aarch64_target] {
set fpreg "x29"
set spreg "sp"
set pcreg "pc"
+ set arg0exp "\$x0"
+ set call_insn "bl"
+ set pcnum 32
+ set gpr0num 0
+} elseif [istarget "powerpc*-*-*"] {
+ set fpreg "r31"
+ set spreg "r1"
+ set pcreg "pc"
+ set arg0exp "\$r3"
+ set call_insn "bl"
+ set pcnum 64
+ set gpr0num 0
+} elseif [istarget "s390*-*-*"] {
+ set fpreg "r11"
+ set spreg "r15"
+ set pcreg "pc"
+ set arg0exp "\$r2"
+ set call_insn "brasl"
+ # Strictly speaking, this is PSWA, not PC.
+ set pcnum 1
+ set gpr0num 2
+} elseif { [istarget "mips*-*-*"] } {
+ set fpreg "s8"
+ set spreg "sp"
+ set pcreg "pc"
+ set arg0exp "\$a0"
+ # Skip the delay slot after the instruction used to make a call
+ # (which can be a jump or a branch) if it has one.
+ #
+ # JUMP (or BRANCH) foo
+ # insn1
+ # insn2
+ #
+ # Most MIPS instructions used to make calls have a delay slot.
+ # These include JAL, JALS, JALX, JALR, JALRS, BAL and BALS.
+ # In this case the program continues from `insn2' when `foo'
+ # returns. The only exception is JALRC, in which case execution
+ # resumes from `insn1' instead.
+ set call_insn {jalrc|[jb]al[sxr]*[ \t][^\r\n]+\r\n}
+ set pcnum 37
+ set gpr0num 0
} else {
+ # Defaults. Probably won't work, but we don't want to error out
+ # here on unsupported platforms, since this file is imported to check
+ # for supported platforms in the first place.
set fpreg "fp"
set spreg "sp"
set pcreg "pc"
+ set arg0exp "\$a0"
+ set call_insn "call"
+ set pcnum -1
+ set gpr0num -1
}
#