aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite')
-rw-r--r--gdb/testsuite/ChangeLog18
-rw-r--r--gdb/testsuite/gdb.arch/amd64-entry-value.cc40
-rw-r--r--gdb/testsuite/gdb.arch/amd64-entry-value.exp34
3 files changed, 92 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index e3df529a..1a7b5da 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,23 @@
2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Display @entry parameter values even for references.
+ * gdb.arch/amd64-entry-value.cc (reference, datap, datap_input): New
+ functions.
+ (main): New variables regvar, nodatavarp, stackvar1, stackvar2. Call
+ reference and datap_input.
+ * gdb.arch/amd64-entry-value.exp (reference, breakhere_reference): New
+ breakpoints.
+ (continue to breakpoint: entry_reference: reference)
+ (entry_reference: bt at entry)
+ (continue to breakpoint: entry_reference: breakhere_reference)
+ (entry_reference: bt, entry_reference: ptype regparam)
+ (entry_reference: p regparam, entry_reference: ptype regparam@entry)
+ (entry_reference: p regparam@entry, entry_reference: p &regparam@entry)
+ (entry_reference: p regcopy, entry_reference: p nodataparam)
+ (entry_reference: p nodataparam@entry): New tests.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Support @entry in input expressions.
* gdb.arch/amd64-entry-value.exp (entry: p i@entry, entry: p j@entry)
(entry_stack: p s1@entry, entry_stack: p s2@entry)
diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value.cc b/gdb/testsuite/gdb.arch/amd64-entry-value.cc
index 7b7d050..2202e28 100644
--- a/gdb/testsuite/gdb.arch/amd64-entry-value.cc
+++ b/gdb/testsuite/gdb.arch/amd64-entry-value.cc
@@ -135,6 +135,40 @@ asm ("breakhere_stacktest:");
e (v, v);
}
+/* nodataparam has DW_AT_GNU_call_site_value but it does not have
+ DW_AT_GNU_call_site_data_value. GDB should not display dereferenced @entry
+ value for it. */
+
+static void __attribute__((noinline, noclone))
+reference (int &regparam, int &nodataparam, int r3, int r4, int r5, int r6,
+ int &stackparam1, int &stackparam2)
+{
+ int regcopy = regparam, nodatacopy = nodataparam;
+ int stackcopy1 = stackparam1, stackcopy2 = stackparam2;
+
+ regparam = 21;
+ nodataparam = 22;
+ stackparam1 = 31;
+ stackparam2 = 32;
+ e (v, v);
+asm ("breakhere_reference:");
+ e (v, v);
+}
+
+static int *__attribute__((noinline, noclone))
+datap ()
+{
+ static int two = 2;
+
+ return &two;
+}
+
+static void __attribute__((noinline, noclone))
+datap_input (int *datap)
+{
+ (*datap)++;
+}
+
static int __attribute__((noinline, noclone))
data (void)
{
@@ -183,6 +217,12 @@ main ()
validity (5, data ());
invalid (data2 ());
+ {
+ int regvar = 1, *nodatavarp = datap (), stackvar1 = 11, stackvar2 = 12;
+ reference (regvar, *nodatavarp, 3, 4, 5, 6, stackvar1, stackvar2);
+ datap_input (nodatavarp);
+ }
+
if (v)
a (1, 1.25);
else
diff --git a/gdb/testsuite/gdb.arch/amd64-entry-value.exp b/gdb/testsuite/gdb.arch/amd64-entry-value.exp
index 10a82ab..185249c 100644
--- a/gdb/testsuite/gdb.arch/amd64-entry-value.exp
+++ b/gdb/testsuite/gdb.arch/amd64-entry-value.exp
@@ -42,6 +42,8 @@ gdb_breakpoint "different"
gdb_breakpoint "breakhere_different"
gdb_breakpoint "breakhere_validity"
gdb_breakpoint "breakhere_invalid"
+gdb_breakpoint "reference"
+gdb_breakpoint "breakhere_reference"
# Test @entry values for register passed parameters.
@@ -158,6 +160,38 @@ gdb_test_no_output "set print entry-values default" "entry_invalid: set print en
gdb_test "frame" {\(inv=<optimized out>\).*} "entry_invalid: frame: default"
+# Test @entry values for DW_AT_GNU_call_site_data_value parameters.
+
+gdb_continue_to_breakpoint "entry_reference: reference"
+
+# GCC PR debug/49980: Missing stackparam1@entry and stackparam2@entry.
+gdb_test "bt" "#0 +reference \\(regparam=regparam@entry=@0x\[0-9a-f\]+: 1, nodataparam=@0x\[0-9a-f\]+: 2, \[^\r\n\]+, stackparam1=@0x\[0-9a-f\]+: 11, stackparam2=@0x\[0-9a-f\]+: 12\\) \[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in main \\(\\) \[^\r\n\]*" \
+ "entry_reference: bt at entry"
+
+gdb_continue_to_breakpoint "entry_reference: breakhere_reference"
+
+# GCC PR debug/49980: Missing stackparam1@entry and stackparam2@entry.
+gdb_test "bt" "#0 +reference \\(regparam=@0x\[0-9a-f\]+: 21, regparam@entry=@0x\[0-9a-f\]+: 1, nodataparam=@0x\[0-9a-f\]+: 22, \[^\r\n\]+, stackparam1=@0x\[0-9a-f\]+: 31, stackparam2=@0x\[0-9a-f\]+: 32\\) \[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in main \\(\\) \[^\r\n\]*" \
+ "entry_reference: bt"
+gdb_test "ptype regparam" " = int &" "entry_reference: ptype regparam"
+
+set test "entry_reference: p regparam"
+set addr ""
+gdb_test_multiple "p regparam" $test {
+ -re " = \\(int &\\) @(0x\[0-9a-f\]+): 21\r\n$gdb_prompt $" {
+ set addr $expect_out(1,string)
+ pass $test
+ }
+}
+
+gdb_test "ptype regparam@entry" " = int &" "entry_reference: ptype regparam@entry"
+gdb_test "p regparam@entry" " = \\(int &\\) @$addr: 1" "entry_reference: p regparam@entry"
+gdb_test "p &regparam@entry" " = \\(int \\*\\) $addr" "entry_reference: p &regparam@entry"
+gdb_test "p regcopy" " = 1" "entry_reference: p regcopy"
+gdb_test "p nodataparam" " = \\(int &\\) @0x\[0-9a-f\]+: 22" "entry_reference: p nodataparam"
+gdb_test "p nodataparam@entry" "Cannot resolve DW_AT_GNU_call_site_data_value" "entry_reference: p nodataparam@entry"
+
+
# Test virtual tail call frames.
gdb_continue_to_breakpoint "tailcall: breakhere"