S390: Skip prologue using SAL information, if possible
authorAndreas Arnez <arnez@linux.vnet.ibm.com>
Wed, 11 Mar 2015 10:11:45 +0000 (11:11 +0100)
committerAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Wed, 11 Mar 2015 10:11:45 +0000 (11:11 +0100)
Instead of analyzing the prologue and possibly coming to a wrong
conclusion, this change tries to skip the prologue with the use of
skip_prologue_using_sal.  Only if that fails, the prologue analyzer is
invoked as before.

gdb/ChangeLog:

* s390-linux-tdep.c (s390_skip_prologue): Skip the prologue using
SAL, if possible.

gdb/ChangeLog
gdb/s390-linux-tdep.c

index 9101efd..d247a6a 100644 (file)
@@ -1,5 +1,10 @@
 2015-03-11  Andreas Arnez  <arnez@linux.vnet.ibm.com>
 
+       * s390-linux-tdep.c (s390_skip_prologue): Skip the prologue using
+       SAL, if possible.
+
+2015-03-11  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
        * s390-linux-nat.c (struct arch_lwp_info): New.
        (s390_fix_watch_points): Rename to...
        (s390_prepare_to_resume): ...this.  Skip the PER info update
index e33eb8e..cafa57b 100644 (file)
@@ -1462,7 +1462,16 @@ static CORE_ADDR
 s390_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   struct s390_prologue_data data;
-  CORE_ADDR skip_pc;
+  CORE_ADDR skip_pc, func_addr;
+
+  if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
+    {
+      CORE_ADDR post_prologue_pc
+       = skip_prologue_using_sal (gdbarch, func_addr);
+      if (post_prologue_pc != 0)
+       return max (pc, post_prologue_pc);
+    }
+
   skip_pc = s390_analyze_prologue (gdbarch, pc, (CORE_ADDR)-1, &data);
   return skip_pc ? skip_pc : pc;
 }