diff --git a/gdb/testsuite/gdb.python/py-recurse-unwind.c b/gdb/testsuite/gdb.python/py-recurse-unwind.c
index 02a835a..bd0330a 100644
--- a/gdb/testsuite/gdb.python/py-recurse-unwind.c
+++ b/gdb/testsuite/gdb.python/py-recurse-unwind.c
@@ -18,14 +18,26 @@
 /* This is the test program loaded into GDB by the py-recurse-unwind test.  */
 
 void
-ccc (int arg)
+ccc0 (int arg)
+{
+}
+
+void
+ccc1 (int arg)
+{
+}
+
+void
+ccc2 (int arg)
 {
 }
 
 void
 bbb (int arg)
 {
-  ccc (789);
+  ccc0 (789);
+  ccc1 (789);
+  ccc2 (789);
 }
 
 void
diff --git a/gdb/testsuite/gdb.python/py-recurse-unwind.exp b/gdb/testsuite/gdb.python/py-recurse-unwind.exp
index 9629a97..ed5e600 100644
--- a/gdb/testsuite/gdb.python/py-recurse-unwind.exp
+++ b/gdb/testsuite/gdb.python/py-recurse-unwind.exp
@@ -45,29 +45,44 @@ if ![runto_main] then {
     return 0
 }
 
-gdb_breakpoint "ccc"
 
-gdb_continue_to_breakpoint "ccc"
-
-# If the unwinder is active, the usage count will increment while
-# running to the breakpoint.  Reset it prior to doing the backtrace.
-gdb_test_no_output "python TestUnwinder.reset_count()"
-
-# The python based unwinder should be called a number of times while
-# generating the backtrace, but its sniffer always returns None.  So
-# it doesn't really contribute to generating any of the frames below.
-#
-# But that's okay.  Our goal here is to make sure that GDB doesn't
-# get hung up in potentially infinite recursion when invoking the
-# Python-based unwinder.
-
-gdb_test_sequence "bt"  "backtrace" {
-    "\\r\\n#0 .* ccc \\(arg=789\\) at "
-    "\\r\\n#1 .* bbb \\(arg=456\\) at "
-    "\\r\\n#2 .* aaa \\(arg=123\\) at "
-    "\\r\\n#3 .* main \\(.*\\) at"
+proc cont_and_backtrace { tst func } {
+
+    gdb_breakpoint "$func"
+
+    # We're testing different code paths within the unwinder's sniffer.
+    # Set the current path to be tested here.
+    gdb_test_no_output "python TestUnwinder.set_test(\"$tst\")" \
+                       "set code path within python unwinder to $tst"
+
+    # If the unwinder is active, the usage count will increment while
+    # running to the breakpoint.  Reset it prior to doing the backtrace.
+    gdb_test_no_output "python TestUnwinder.reset_count()" \
+                       "reset count for $tst"
+
+    gdb_continue_to_breakpoint "$func"
+
+    # The python based unwinder should be called a number of times while
+    # generating the backtrace, but its sniffer always returns None.  So
+    # it doesn't really contribute to generating any of the frames below.
+    #
+    # But that's okay.  Our goal here is to make sure that GDB doesn't
+    # get hung up in potentially infinite recursion when invoking the
+    # Python-based unwinder.
+
+    gdb_test_sequence "bt"  "backtrace for $tst" {
+	"\\r\\n#0 .* ccc. \\(arg=789\\) at "
+	"\\r\\n#1 .* bbb \\(arg=456\\) at "
+	"\\r\\n#2 .* aaa \\(arg=123\\) at "
+	"\\r\\n#3 .* main \\(.*\\) at"
+    }
+
+    # Test that the python-based unwinder / sniffer was actually called
+    # during generation of the backtrace.
+    gdb_test "python print(TestUnwinder.count > 0)" "True" \
+             "python unwinder called for $tst"
 }
 
-# Test that the python-based unwinder / sniffer was actually called
-# during generation of the backtrace.
-gdb_test "python print(TestUnwinder.count > 0)" "True"
+cont_and_backtrace "check_undefined_symbol" "ccc0"
+cont_and_backtrace "check_user_reg_pc" "ccc1"
+cont_and_backtrace "check_pae_pc" "ccc2"
diff --git a/gdb/testsuite/gdb.python/py-recurse-unwind.py b/gdb/testsuite/gdb.python/py-recurse-unwind.py
index 1da7aca..5eb87bb 100644
--- a/gdb/testsuite/gdb.python/py-recurse-unwind.py
+++ b/gdb/testsuite/gdb.python/py-recurse-unwind.py
@@ -40,13 +40,18 @@ class TestUnwinder(Unwinder):
     def inc_count (cls):
         cls.count += 1
 
+    test = 'check_undefined_symbol'
+
+    @classmethod
+    def set_test (cls, test) :
+       cls.test = test
+
     def __init__(self):
         Unwinder.__init__(self, "test unwinder")
         self.recurse_level = 0
 
     def __call__(self, pending_frame):
 
-
         if self.recurse_level > 0:
             gdb.write("TestUnwinder: Recursion detected - returning early.\n")
             return None
@@ -54,11 +59,25 @@ class TestUnwinder(Unwinder):
         self.recurse_level += 1
         TestUnwinder.inc_count()
 
-        try:
-            val = gdb.parse_and_eval("undefined_symbol")
+        if TestUnwinder.test == 'check_user_reg_pc' :
+
+            pc = pending_frame.read_register('pc')
+            pc_as_int = int(pc.cast(gdb.lookup_type('int')))
+            # gdb.write("In unwinder: pc=%x\n" % pc_as_int)
+
+        elif TestUnwinder.test == 'check_pae_pc' :
+
+            pc = gdb.parse_and_eval('$pc')
+            pc_as_int = int(pc.cast(gdb.lookup_type('int')))
+            # gdb.write("In unwinder: pc=%x\n" % pc_as_int)
+
+        elif TestUnwinder.test == 'check_undefined_symbol' :
+
+            try:
+                val = gdb.parse_and_eval("undefined_symbol")
 
-        except Exception as arg:
-            pass
+            except Exception as arg:
+                pass
 
         self.recurse_level -= 1
 
