From patchwork Mon Mar 30 16:30:28 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wei-cheng, Wang" X-Patchwork-Id: 5912 Received: (qmail 100415 invoked by alias); 30 Mar 2015 16:31:30 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 100341 invoked by uid 89); 30 Mar 2015 16:31:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=3.0 required=5.0 tests=AWL, BAYES_00, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, KAM_FROM_URIBL_PCCC, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-pa0-f41.google.com Received: from mail-pa0-f41.google.com (HELO mail-pa0-f41.google.com) (209.85.220.41) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 30 Mar 2015 16:31:25 +0000 Received: by patj18 with SMTP id j18so15809282pat.2 for ; Mon, 30 Mar 2015 09:31:24 -0700 (PDT) X-Received: by 10.70.5.68 with SMTP id q4mr2365777pdq.9.1427733084013; Mon, 30 Mar 2015 09:31:24 -0700 (PDT) Received: from localhost.localdomain (114-32-204-230.HINET-IP.hinet.net. [114.32.204.230]) by mx.google.com with ESMTPSA id qo4sm10550523pab.33.2015.03.30.09.31.22 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 30 Mar 2015 09:31:23 -0700 (PDT) From: Wei-cheng Wang To: uweigand@de.ibm.com, gdb-patches@sourceware.org Cc: Wei-cheng Wang Subject: [PATCH 3/7 v3] Add testcases for ppc64 tracepoint. Date: Tue, 31 Mar 2015 00:30:28 +0800 Message-Id: <1427733032-64989-3-git-send-email-cole945@gmail.com> In-Reply-To: <1427733032-64989-1-git-send-email-cole945@gmail.com> References: <1427733032-64989-1-git-send-email-cole945@gmail.com> One more case in added for testing emit_reg in this version. gdb/testsuite/ChangeLog 2015-03-30 Wei-cheng Wang * gdb.trace/backtrace.exp: Set registers for powerpc*-*-*. * gdb.trace/collection.exp: Ditto. * gdb.trace/entry-values.exp: Ditto. * gdb.trace/mi-trace-frame-collected.exp: Ditto. * gdb.trace/mi-trace-unavailable.exp: Ditto. * gdb.trace/pending.exp: Ditto. * gdb.trace/report.exp: Ditto. * gdb.trace/trace-break.exp: Ditto. * gdb.trace/while-dyn.exp: Ditto. * gdb.trace/change-loc.h: set_point for powerpc. * gdb.trace/ftrace.c: Ditto * gdb.trace/pendshr1.c: Ditto. * gdb.trace/pendshr2.c: Ditto. * gdb.trace/range-stepping.c: Ditto. * gdb.trace/trace-break.c: Ditto. * gdb.trace/trace-mt.c: Ditto. * gdb.trace/ftrace.exp: Enable testing for powerpc*-*-*. (test_ftrace_condition) New function for testing bytecode compilation. --- gdb/testsuite/gdb.trace/actions.c | 6 +- gdb/testsuite/gdb.trace/backtrace.exp | 3 + gdb/testsuite/gdb.trace/change-loc.h | 2 + gdb/testsuite/gdb.trace/collection.exp | 4 ++ gdb/testsuite/gdb.trace/entry-values.exp | 4 +- gdb/testsuite/gdb.trace/ftrace.c | 4 ++ gdb/testsuite/gdb.trace/ftrace.exp | 66 +++++++++++++++++++++- .../gdb.trace/mi-trace-frame-collected.exp | 2 + gdb/testsuite/gdb.trace/mi-trace-unavailable.exp | 2 + gdb/testsuite/gdb.trace/pending.exp | 2 + gdb/testsuite/gdb.trace/pendshr1.c | 2 + gdb/testsuite/gdb.trace/pendshr2.c | 2 + gdb/testsuite/gdb.trace/range-stepping.c | 2 + gdb/testsuite/gdb.trace/report.exp | 4 ++ gdb/testsuite/gdb.trace/trace-break.c | 4 ++ gdb/testsuite/gdb.trace/trace-break.exp | 4 ++ gdb/testsuite/gdb.trace/trace-mt.c | 2 + gdb/testsuite/gdb.trace/tspeed.exp | 2 +- gdb/testsuite/gdb.trace/unavailable.exp | 4 ++ gdb/testsuite/gdb.trace/while-dyn.exp | 2 + 20 files changed, 118 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/gdb.trace/actions.c b/gdb/testsuite/gdb.trace/actions.c index 4b7b887..d8538e4 100644 --- a/gdb/testsuite/gdb.trace/actions.c +++ b/gdb/testsuite/gdb.trace/actions.c @@ -46,6 +46,8 @@ static union GDB_UNION_TEST } gdb_union1_test; void gdb_recursion_test (int, int, int, int, int, int, int); +typedef void (*gdb_recursion_test_fp) (int, int, int, int, int, int, int); +gdb_recursion_test_fp gdb_recursion_test_ptr = gdb_recursion_test; void gdb_recursion_test (int depth, int q1, @@ -64,7 +66,7 @@ void gdb_recursion_test (int depth, q5 = q6; /* gdbtestline 6 */ q6 = q; /* gdbtestline 7 */ if (depth--) /* gdbtestline 8 */ - gdb_recursion_test (depth, q1, q2, q3, q4, q5, q6); /* gdbtestline 9 */ + gdb_recursion_test_ptr (depth, q1, q2, q3, q4, q5, q6); /* gdbtestline 9 */ } @@ -103,7 +105,7 @@ unsigned long gdb_c_test( unsigned long *parm ) gdb_structp_test = &gdb_struct1_test; gdb_structpp_test = &gdb_structp_test; - gdb_recursion_test (3, (long) parm[1], (long) parm[2], (long) parm[3], + gdb_recursion_test_ptr (3, (long) parm[1], (long) parm[2], (long) parm[3], (long) parm[4], (long) parm[5], (long) parm[6]); gdb_char_test = gdb_short_test = gdb_long_test = 0; diff --git a/gdb/testsuite/gdb.trace/backtrace.exp b/gdb/testsuite/gdb.trace/backtrace.exp index 045778e..3094074 100644 --- a/gdb/testsuite/gdb.trace/backtrace.exp +++ b/gdb/testsuite/gdb.trace/backtrace.exp @@ -146,6 +146,9 @@ if [is_amd64_regs_target] { } elseif [is_x86_like_target] { set fpreg "\$ebp" set spreg "\$esp" +} elseif [istarget "powerpc*-*-*"] { + set fpreg "\$r31" + set spreg "\$r1" } else { set fpreg "\$fp" set spreg "\$sp" diff --git a/gdb/testsuite/gdb.trace/change-loc.h b/gdb/testsuite/gdb.trace/change-loc.h index e8e2e86..8efe12d 100644 --- a/gdb/testsuite/gdb.trace/change-loc.h +++ b/gdb/testsuite/gdb.trace/change-loc.h @@ -36,6 +36,8 @@ func4 (void) SYMBOL(set_tracepoint) ":\n" #if (defined __x86_64__ || defined __i386__) " call " SYMBOL(func5) "\n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); diff --git a/gdb/testsuite/gdb.trace/collection.exp b/gdb/testsuite/gdb.trace/collection.exp index bd42cfa..ed562c9 100644 --- a/gdb/testsuite/gdb.trace/collection.exp +++ b/gdb/testsuite/gdb.trace/collection.exp @@ -44,6 +44,10 @@ if [is_amd64_regs_target] { set fpreg "ebp" set spreg "esp" set pcreg "eip" +} elseif [istarget "powerpc*-*-*"] { + set fpreg "r31" + set spreg "r1" + set pcreg "pc" } else { set fpreg "fp" set spreg "sp" diff --git a/gdb/testsuite/gdb.trace/entry-values.exp b/gdb/testsuite/gdb.trace/entry-values.exp index 0cf5615..7295a1f 100644 --- a/gdb/testsuite/gdb.trace/entry-values.exp +++ b/gdb/testsuite/gdb.trace/entry-values.exp @@ -42,7 +42,7 @@ if { [istarget "arm*-*-*"] || [istarget "aarch64*-*-*"] } { } elseif { [istarget "s390*-*-*"] } { set call_insn "brasl" } elseif { [istarget "powerpc*-*-*"] } { - set call_insn "bl" + set call_insn {bl\y} } 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. @@ -218,6 +218,8 @@ if [is_amd64_regs_target] { set spreg "\$rsp" } elseif [is_x86_like_target] { set spreg "\$esp" +} elseif [istarget "powerpc*-*-*"] { + set spreg "\$r1" } else { set spreg "\$sp" } diff --git a/gdb/testsuite/gdb.trace/ftrace.c b/gdb/testsuite/gdb.trace/ftrace.c index f522e6f..e509c7b 100644 --- a/gdb/testsuite/gdb.trace/ftrace.c +++ b/gdb/testsuite/gdb.trace/ftrace.c @@ -42,6 +42,8 @@ marker (int anarg) SYMBOL(set_point) ":\n" #if (defined __x86_64__ || defined __i386__) " call " SYMBOL(func) "\n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); @@ -53,6 +55,8 @@ marker (int anarg) SYMBOL(four_byter) ":\n" #if (defined __i386__) " cmpl $0x1,0x8(%ebp) \n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); } diff --git a/gdb/testsuite/gdb.trace/ftrace.exp b/gdb/testsuite/gdb.trace/ftrace.exp index f2d8002..d459ac9 100644 --- a/gdb/testsuite/gdb.trace/ftrace.exp +++ b/gdb/testsuite/gdb.trace/ftrace.exp @@ -84,7 +84,8 @@ proc test_fast_tracepoints {} { gdb_test "print gdb_agent_gdb_trampoline_buffer_error" ".*" "" - if { [istarget "x86_64-*-*"] || [istarget "i\[34567\]86-*-*"] } { + if { [istarget "x86_64-*-*"] || [istarget "i\[34567\]86-*-*"] \ + || [istarget "powerpc*-*-*"] } { gdb_test "ftrace set_point" "Fast tracepoint .*" \ "fast tracepoint at a long insn" @@ -178,6 +179,37 @@ proc test_fast_tracepoints {} { } } +proc test_ftrace_condition { condexp list } \ +{ with_test_prefix "ond $condexp" \ +{ + global executable + global hex + + clean_restart ${executable} + if ![runto_main] { + fail "Can't run to main to check for trace support" + return -1 + } + + gdb_test "break end" ".*" "" + gdb_test "tvariable \$tsv = 0" + gdb_test "ftrace set_point if $condexp" "Fast tracepoint .*" + gdb_trace_setactions "set action for tracepoint .*" "" \ + "collect globvar" "^$" + + gdb_test_no_output "tstart" "" + gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "" + gdb_test_no_output "tstop" "" + + set i 0 + foreach expval $list { + gdb_test "tfind" "Found trace frame $i, tracepoint .*" "tfind frame $i" + gdb_test "print globvar" "\\$\[0-9\]+ = $expval\[\r\n\]" "expect $expval" + set i [expr $i + 1] + } + gdb_test "tfind" "Target failed to find requested trace frame\." +}} + gdb_reinitialize_dir $srcdir/$subdir if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } { @@ -186,3 +218,35 @@ if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } { } test_fast_tracepoints + +# Test conditional goto and simple expression. +test_ftrace_condition "globvar > 7" { 8 9 10 } +test_ftrace_condition "globvar < 4" { 1 2 3 } +test_ftrace_condition "globvar >= 7" { 7 8 9 10 } +test_ftrace_condition "globvar <= 4" { 1 2 3 4 } +test_ftrace_condition "globvar == 5" { 5 } +test_ftrace_condition "globvar != 5" { 1 2 3 4 6 7 8 9 10 } +test_ftrace_condition "globvar > 3 && globvar < 7" { 4 5 6 } +test_ftrace_condition "globvar < 3 || globvar > 7" { 1 2 8 9 10 } +test_ftrace_condition "(globvar << 2) + 1 == 29" { 7 } +test_ftrace_condition "(globvar >> 2) == 2" { 8 9 10 } + +# Test emit_call by accessing trace state variables. +test_ftrace_condition "(\$tsv = \$tsv + 2) > 10" { 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 "powerpc*-*-*"] { + set arg0exp "\$r3" +} elseif [istarget "aarch64*"] { + set arg0exp "\$x0" +} else { + set arg0exp "" +} + +if { "$arg0exp" != "" } { + test_ftrace_condition "($arg0exp > 500)" { 6 7 8 9 10 } +} diff --git a/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp b/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp index 51ed479..1df4d65 100644 --- a/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp +++ b/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp @@ -56,6 +56,8 @@ if [is_amd64_regs_target] { set pcreg "rip" } elseif [is_x86_like_target] { set pcreg "eip" +} elseif [istarget "powerpc*-*-*"] { + set pcreg "pc" } else { # Other ports that support tracepoints should set the name of pc # register here. diff --git a/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp b/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp index 6b97d9d..1e6e541 100644 --- a/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp +++ b/gdb/testsuite/gdb.trace/mi-trace-unavailable.exp @@ -135,6 +135,8 @@ proc test_trace_unavailable { data_source } { set pcnum 16 } elseif [is_x86_like_target] { set pcnum 8 + } elseif [istarget "powerpc*-*-*"] { + set pcnum 64 } else { # Other ports support tracepoint should define the number # of its own pc register. diff --git a/gdb/testsuite/gdb.trace/pending.exp b/gdb/testsuite/gdb.trace/pending.exp index 0399807..ed36cac 100644 --- a/gdb/testsuite/gdb.trace/pending.exp +++ b/gdb/testsuite/gdb.trace/pending.exp @@ -441,6 +441,8 @@ proc pending_tracepoint_with_action_resolved { trace_type } \ set pcreg "rip" } elseif [is_x86_like_target] { set pcreg "eip" + } elseif [istarget "powerpc*-*-*"] { + set pcreg "pc" } gdb_trace_setactions "set action for pending tracepoint" "" \ diff --git a/gdb/testsuite/gdb.trace/pendshr1.c b/gdb/testsuite/gdb.trace/pendshr1.c index d3b5463..2fd0fba 100644 --- a/gdb/testsuite/gdb.trace/pendshr1.c +++ b/gdb/testsuite/gdb.trace/pendshr1.c @@ -38,6 +38,8 @@ pendfunc (int x) SYMBOL(set_point1) ":\n" #if (defined __x86_64__ || defined __i386__) " call " SYMBOL(pendfunc1) "\n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); } diff --git a/gdb/testsuite/gdb.trace/pendshr2.c b/gdb/testsuite/gdb.trace/pendshr2.c index b8a51a5..3f40c76 100644 --- a/gdb/testsuite/gdb.trace/pendshr2.c +++ b/gdb/testsuite/gdb.trace/pendshr2.c @@ -35,6 +35,8 @@ pendfunc2 (int x) SYMBOL(set_point2) ":\n" #if (defined __x86_64__ || defined __i386__) " call " SYMBOL(foo) "\n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); } diff --git a/gdb/testsuite/gdb.trace/range-stepping.c b/gdb/testsuite/gdb.trace/range-stepping.c index 113f0e2..606db25 100644 --- a/gdb/testsuite/gdb.trace/range-stepping.c +++ b/gdb/testsuite/gdb.trace/range-stepping.c @@ -26,6 +26,8 @@ tracepoint jump. */ #if (defined __x86_64__ || defined __i386__) # define NOP " .byte 0xe9,0x00,0x00,0x00,0x00\n" /* jmp $+5 (5-byte nop) */ +#elif (defined __PPC64__ || defined __PPC__) +# define NOP " nop\n" #else # define NOP "" /* port me */ #endif diff --git a/gdb/testsuite/gdb.trace/report.exp b/gdb/testsuite/gdb.trace/report.exp index 2fa676b..e0160f7 100644 --- a/gdb/testsuite/gdb.trace/report.exp +++ b/gdb/testsuite/gdb.trace/report.exp @@ -158,6 +158,10 @@ if [is_amd64_regs_target] { set fpreg "ebp" set spreg "esp" set pcreg "eip" +} elseif [istarget "powerpc*-*-*"] { + set fpreg "r31" + set spreg "r1" + set pcreg "pc" } else { set fpreg "fp" set spreg "sp" diff --git a/gdb/testsuite/gdb.trace/trace-break.c b/gdb/testsuite/gdb.trace/trace-break.c index f381ec6..ced0e92 100644 --- a/gdb/testsuite/gdb.trace/trace-break.c +++ b/gdb/testsuite/gdb.trace/trace-break.c @@ -41,6 +41,8 @@ marker (void) SYMBOL(set_point) ":\n" #if (defined __x86_64__ || defined __i386__) " call " SYMBOL(func) "\n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); @@ -48,6 +50,8 @@ marker (void) SYMBOL(after_set_point) ":\n" #if (defined __x86_64__ || defined __i386__) " call " SYMBOL(func) "\n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); } diff --git a/gdb/testsuite/gdb.trace/trace-break.exp b/gdb/testsuite/gdb.trace/trace-break.exp index 4283ca6..9d6551a 100644 --- a/gdb/testsuite/gdb.trace/trace-break.exp +++ b/gdb/testsuite/gdb.trace/trace-break.exp @@ -49,6 +49,10 @@ if [is_amd64_regs_target] { set fpreg "ebp" set spreg "esp" set pcreg "eip" +} elseif [istarget "powerpc*-*-*"] { + set fpreg "r31" + set spreg "r1" + set pcreg "pc" } # Set breakpoint and tracepoint at the same address. diff --git a/gdb/testsuite/gdb.trace/trace-mt.c b/gdb/testsuite/gdb.trace/trace-mt.c index 38aeff5..855de54 100644 --- a/gdb/testsuite/gdb.trace/trace-mt.c +++ b/gdb/testsuite/gdb.trace/trace-mt.c @@ -37,6 +37,8 @@ thread_function(void *arg) SYMBOL(set_point1) ":\n" #if (defined __x86_64__ || defined __i386__) " call " SYMBOL(func) "\n" +#elif (defined __PPC64__ || defined __PPC__) + " nop\n" #endif ); } diff --git a/gdb/testsuite/gdb.trace/tspeed.exp b/gdb/testsuite/gdb.trace/tspeed.exp index d44eba9..209312c 100644 --- a/gdb/testsuite/gdb.trace/tspeed.exp +++ b/gdb/testsuite/gdb.trace/tspeed.exp @@ -27,7 +27,7 @@ if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ } # Typically we need a little extra time for this test. -set timeout 180 +set timeout 360 set ws "\[\r\n\t \]+" set cr "\[\r\n\]+" diff --git a/gdb/testsuite/gdb.trace/unavailable.exp b/gdb/testsuite/gdb.trace/unavailable.exp index 5be9704..ad62e75 100644 --- a/gdb/testsuite/gdb.trace/unavailable.exp +++ b/gdb/testsuite/gdb.trace/unavailable.exp @@ -34,6 +34,10 @@ if [is_amd64_regs_target] { set fpreg "ebp" set spreg "esp" set pcreg "eip" +} elseif [istarget "powerpc*-*-*"] { + set fpreg "r31" + set spreg "r1" + set pcreg "pc" } else { set fpreg "fp" set spreg "sp" diff --git a/gdb/testsuite/gdb.trace/while-dyn.exp b/gdb/testsuite/gdb.trace/while-dyn.exp index 198421e..ef92b2d 100644 --- a/gdb/testsuite/gdb.trace/while-dyn.exp +++ b/gdb/testsuite/gdb.trace/while-dyn.exp @@ -47,6 +47,8 @@ if [is_amd64_regs_target] { set fpreg "\$rbp" } elseif [is_x86_like_target] { set fpreg "\$ebp" +} elseif [istarget "powerpc*-*-*"] { + set fpreg "\$r31" } else { set fpreg "\$fp" }