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 9101efdf100fa7f563ce86820348dc041a44945c..d247a6a31a597457881ab40045fa6f311c10448f 100644 (file)
@@ -1,3 +1,8 @@
+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.
index e33eb8e8fd6d8de5236c06340c3215f2417ed3ed..cafa57b4d549a764ca91eab8413a914b3f212b28 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;
 }