]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
Minimal use of symbol callback functions.
authorUlrich Drepper <drepper@redhat.com>
Sat, 12 Jan 2008 07:15:51 +0000 (07:15 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 12 Jan 2008 07:15:51 +0000 (07:15 +0000)
libcpu/ChangeLog
libcpu/i386_disasm.c

index f4478795fcba3bc4b03783fb26f75f99f1de7b55..e87f75733bfe7a6b029df8e923a3f05af7b0cc44 100644 (file)
@@ -1,9 +1,14 @@
 2008-01-11  Ulrich Drepper  <drepper@redhat.com>
 
-       * i386_disasm.c (struct output)buffer): Add labelbuf, labelbufsize,
+       * i386_disasm.c (struct output_buffer): Remove symcb and symcbarg.
+       (i386_disasm): Remove appropriate initializers.
+       Use symcb to lookup symbol strings.
+
+       * i386_disasm.c (struct output_buffer): Add labelbuf, labelbufsize,
        symaddr_use, and symaddr fields.
        (i386_disasm): Remove labelbuf and labelbufsize variables.
        Add back %e format.  Implement %a and %l formats.
+
        * i386_data.h (general_mod$r_m): Set symaddr_use and symaddr for %rip
        base addressing.
 
index 57a870f1f7a943e8623cfe134811271015a9e2fb..f8a06cc49f07e984011dc3035c8afa02e883a23a 100644 (file)
@@ -197,8 +197,6 @@ struct output_data
   const uint8_t *data;
   const uint8_t **param_start;
   const uint8_t *end;
-  DisasmGetSymCB_t symcb;
-  void *symcbarg;
   char *labelbuf;
   size_t labelbufsize;
   enum
@@ -237,7 +235,6 @@ struct output_data
   } while (0)
 
 
-#include <stdio.h>
 int
 i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr,
             const char *fmt, DisasmOutputCB_t outcb, DisasmGetSymCB_t symcb,
@@ -260,9 +257,7 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr,
       .bufsize = bufsize,
       .bufcntp = &bufcnt,
       .param_start = &param_start,
-      .end = end,
-      .symcb = symcb,
-      .symcbarg = symcbarg
+      .end = end
     };
 
   int retval = 0;
@@ -840,11 +835,17 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr,
 
                      // XXX Lookup symbol based on symaddr
                      const char *symstr = NULL;
+                     if (symcb != NULL
+                         && symcb (0 /* XXX */, 0 /* XXX */, symaddr,
+                                   &output_data.labelbuf,
+                                   &output_data.labelbufsize, symcbarg) == 0)
+                       symstr = output_data.labelbuf;
 
                      size_t bufavail = bufsize - bufcnt;
                      int r = 0;
                      if (symstr != NULL)
-                       r = snprintf (&buf[bufcnt], bufavail, "# %s", symstr);
+                       r = snprintf (&buf[bufcnt], bufavail, "# <%s>",
+                                     symstr);
                      else if (output_data.symaddr_use == addr_abs_always
                               || output_data.symaddr_use == addr_rel_always)
                        r = snprintf (&buf[bufcnt], bufavail, "# %#" PRIx64,