]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
testsuite: libsframest: define a new function sframest_sfinfo_addr_range_p
authorIndu Bhagat <indu.bhagat@oracle.com>
Mon, 29 Apr 2024 19:02:25 +0000 (12:02 -0700)
committerIndu Bhagat <indu.bhagat@oracle.com>
Sun, 23 Mar 2025 19:04:06 +0000 (12:04 -0700)
Use this function consistently and remove unnecessary API
sframest_update_sfinfo.

ChangeLog:
* sframe-stacktrace.c
* sframe-state.c
* sframe-state.h

libsframe/testsuite/libsframe.stacktrace/libsframest/sframe-stacktrace.c
libsframe/testsuite/libsframe.stacktrace/libsframest/sframe-state.c
libsframe/testsuite/libsframe.stacktrace/libsframest/sframe-state.h

index 52ceb86f63f88a5ea5522275cea69780d5a42877..2893e17a30eded676c802770568957f5f9e43cf6 100644 (file)
@@ -166,9 +166,12 @@ sframe_unwind (struct sframest_ctx *sf, void **ra_lst, int *ra_size)
 
          /* Check if need to update the SFrame stack trace info for the return
             addr.  */
-         sfinfo = sframest_update_sfinfo (sf, sfinfo, return_addr);
-         if (!sfinfo || !sfinfo->dctx)
-           return sframe_bt_ret_set_errno (&err, SFRAME_BT_ERR_DECODE);
+         if (!sframest_sfinfo_addr_range_p (sfinfo, return_addr))
+           {
+             sfinfo = sframest_get_sfinfo (sf, pc);
+             if (!sfinfo || !sfinfo->dctx)
+               return sframe_bt_ret_set_errno (&err, SFRAME_BT_ERR_DECODE);
+           }
        }
       else
        {
index 37ade6a8abcadab044caf106d27d4dbd239260a5..cabecc6565cad7aa08d001a3fcf211f3bb5111f1 100644 (file)
@@ -80,6 +80,19 @@ sframe_bt_set_errno (int *errp, int error)
 
 #endif
 
+/* Return whether the given SFrame stack trace info object SFINFO has (stack
+   trace) information corresponding to addr.  */
+
+bool sframest_sfinfo_addr_range_p (struct sframest_info *sfinfo,
+                                  uint64_t addr)
+{
+  if (!sfinfo || !addr)
+    return false;
+
+  return (sfinfo->text_vma <= addr
+         && sfinfo->text_vma + sfinfo->text_size > addr);
+}
+
 /* Add .sframe info in D_DATA, which is associated with
    a dynamic shared object, to D_LIST.  */
 
@@ -159,16 +172,14 @@ sframe_find_context (struct sframest_ctx *sf, uint64_t addr)
   if (!sf)
     return NULL;
 
-  if (sf->prog_sfinfo.text_vma < addr
-      && sf->prog_sfinfo.text_vma + sf->prog_sfinfo.text_size > addr)
+  if (sframest_sfinfo_addr_range_p (&sf->prog_sfinfo, addr))
     return &sf->prog_sfinfo;
 
   d_list = &sf->dsos_sfinfo;
   for (i = 0; i < sf->dsos_sfinfo.used; ++i)
     {
       sfinfo = d_list->entry[i];
-      if ((sfinfo.text_vma <= addr)
-         && (sfinfo.text_vma + sfinfo.text_size >= addr))
+      if (sframest_sfinfo_addr_range_p (&sfinfo, addr))
        return &d_list->entry[i];
     }
 
@@ -199,34 +210,6 @@ sframest_get_sfinfo (struct sframest_ctx *sf, uint64_t raddr)
   return sfinfo;
 }
 
-struct sframest_info *
-sframest_update_sfinfo (struct sframest_ctx *sf,
-                       struct sframest_info *cur_sfinfo,
-                       uint64_t raddr)
-{
-  struct sframest_info *sfinfo = NULL;
-  int err = 0;
-
-  if (!sf || !cur_sfinfo)
-    return NULL;
-
-  /* Detect if current SFrame stack trace info object serves for raddr.  */
-  if (cur_sfinfo->text_vma < raddr
-      && cur_sfinfo->text_vma + cur_sfinfo->text_size > raddr)
-    return cur_sfinfo;
-
-  sfinfo = sframe_find_context (sf, raddr);
-  if (!sfinfo)
-    return NULL;
-
-  /* Decode the SFrame section the first time.  */
-  if (!sfinfo->dctx)
-    sfinfo->dctx = sframe_decode (sfinfo->buf, sfinfo->buflen, &err);
-
-  return sfinfo;
-}
-
-
 /* Open /proc image associated with the process id and return the file
    descriptor.  */
 
index 8bc4a86da1d4d4f93a1e3efc092cc5c92af7fe3b..e5c8dde3625544bd9500f0fa9468b04fd6f8ec3c 100644 (file)
@@ -93,9 +93,8 @@ int sframe_callback (struct dl_phdr_info *info,
                     size_t size ATTRIBUTE_UNUSED,
                     void *data);
 
-struct sframest_info *sframest_update_sfinfo (struct sframest_ctx *sf,
-                                             struct sframest_info *cur_sfinfo,
-                                             uint64_t raddr);
+bool sframest_sfinfo_addr_range_p (struct sframest_info *sfinfo,
+                                  uint64_t addr);
 
 struct sframest_info *sframest_get_sfinfo (struct sframest_ctx *sf,
                                           uint64_t raddr);