public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
From: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
To: elfutils-devel@sourceware.org
Subject: [PATCH] Getter and setter for Dwfl's offline_next_address
Date: Wed,  6 Mar 2024 16:22:49 -0300	[thread overview]
Message-ID: <20240306192249.242130-1-yakoyoku@gmail.com> (raw)

Added new functions dwfl_get_offline_next_address and
dwfl_set_offline_next_address which will get plus set said field from
the Dwfl struct. This is a requirement for listing functions from their
addresses when using libdwfl offline, otherwise wrong symbols are going
to be returned.

Signed-off-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
---
This is meant to replace a patch that only had the setter [1].

Link: https://sourceware.org/pipermail/elfutils-devel/2024q1/006874.html [1]

 libdwfl/libdwfl.h            |  6 +++++
 libdwfl/offline.c            | 12 ++++++++++
 tests/dwfl-offline-address.c | 43 ++++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+)
 create mode 100644 tests/dwfl-offline-address.c

diff --git a/libdwfl/libdwfl.h b/libdwfl/libdwfl.h
index 49ad6664..08aa61c4 100644
--- a/libdwfl/libdwfl.h
+++ b/libdwfl/libdwfl.h
@@ -109,6 +109,12 @@ extern int dwfl_errno (void);
 extern const char *dwfl_errmsg (int err);
 
 
+/* Get the next offline address.  */
+extern GElf_Addr dwfl_get_offline_next_address (Dwfl *dwfl);
+
+/* Set the next offline address.  */
+extern void dwfl_set_offline_next_address (Dwfl *dwfl, GElf_Addr addr);
+
 /* Start reporting the current set of segments and modules to the library.
    All existing segments are wiped.  Existing modules are marked to be
    deleted, and will not be found via dwfl_addrmodule et al if they are not
diff --git a/libdwfl/offline.c b/libdwfl/offline.c
index e9ab0cc1..ca770fac 100644
--- a/libdwfl/offline.c
+++ b/libdwfl/offline.c
@@ -35,6 +35,18 @@
 #include "libdwflP.h"
 #include <fcntl.h>
 
+GElf_Addr
+dwfl_get_offline_next_address (Dwfl *dwfl)
+{
+  return dwfl->offline_next_address;
+}
+
+void
+dwfl_set_offline_next_address (Dwfl *dwfl, GElf_Addr addr)
+{
+  dwfl->offline_next_address = addr;
+}
+
 /* Since dwfl_report_elf lays out the sections already, this will only be
    called when the section headers of the debuginfo file are being
    consulted instead, or for the section placed at 0.  With binutils
diff --git a/tests/dwfl-offline-address.c b/tests/dwfl-offline-address.c
new file mode 100644
index 00000000..9a33b95a
--- /dev/null
+++ b/tests/dwfl-offline-address.c
@@ -0,0 +1,43 @@
+#include <config.h>
+#include <assert.h>
+#include <inttypes.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdio_ext.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <argp.h>
+#include ELFUTILS_HEADER(dwfl)
+#include <dwarf.h>
+#include "system.h"
+
+#define OFFLINE_REDZONE 0x10000
+
+static const Dwfl_Callbacks offline_callbacks =
+  {
+    .find_debuginfo = INTUSE(dwfl_standard_find_debuginfo),
+    .section_address = INTUSE(dwfl_offline_section_address),
+  };
+
+int
+main (int argc, char **argv)
+{
+  Dwfl *dwfl = dwfl_begin (&offline_callbacks);
+  assert (dwfl != NULL);
+
+  if (dwfl_get_offline_next_address (dwfl) != OFFLINE_REDZONE)
+    {
+      dwfl_end (dwfl);
+      return 1;
+    }
+
+  int result = 0;
+  dwfl_set_offline_next_address (dwfl, 0);
+  if (dwfl_get_offline_next_address (dwfl) != 0)
+	  result = 1;
+
+  dwfl_end (dwfl);
+
+  return result;
+}
-- 
2.44.0


             reply	other threads:[~2024-03-06 19:23 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-06 19:22 Martin Rodriguez Reboredo [this message]
2024-03-15 17:27 ` Aaron Merey
2024-03-20 22:52 ` Mark Wielaard
2024-03-24 14:11   ` Martin Rodriguez Reboredo
2024-03-24 17:08     ` Mark Wielaard
2024-03-24 19:17       ` Martin Rodriguez Reboredo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240306192249.242130-1-yakoyoku@gmail.com \
    --to=yakoyoku@gmail.com \
    --cc=elfutils-devel@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).