Mesa (master): shared-glapi: implement _glapi_get_proc_name().

Paul Berry stereotype441 at kemper.freedesktop.org
Thu Oct 25 21:26:34 UTC 2012


Module: Mesa
Branch: master
Commit: 03984b26c4855efb64824cb42ea5bad579b48334
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=03984b26c4855efb64824cb42ea5bad579b48334

Author: Paul Berry <stereotype441 at gmail.com>
Date:   Tue Oct 23 10:49:33 2012 -0700

shared-glapi: implement _glapi_get_proc_name().

Previously this function was only implemented for non-shared-glapi
builds.  Since the function is only intended for debugging purposes we
use a simple O(n) algorithm.

Acked-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Matt Turner <mattst88 at gmail.com>

---

 src/mapi/mapi/mapi_glapi.c |    4 ++--
 src/mapi/mapi/stub.c       |   22 ++++++++++++++++++++++
 src/mapi/mapi/stub.h       |    3 +++
 3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/src/mapi/mapi/mapi_glapi.c b/src/mapi/mapi/mapi_glapi.c
index adfc0cb..4627c4d 100644
--- a/src/mapi/mapi/mapi_glapi.c
+++ b/src/mapi/mapi/mapi_glapi.c
@@ -219,8 +219,8 @@ _glapi_get_proc_address(const char *funcName)
 const char *
 _glapi_get_proc_name(unsigned int offset)
 {
-   /* not implemented */
-   return NULL;
+   const struct mapi_stub *stub = stub_find_by_slot(offset);
+   return stub ? stub_get_name(stub) : NULL;
 }
 
 unsigned long
diff --git a/src/mapi/mapi/stub.c b/src/mapi/mapi/stub.c
index 6fb8556..688dc81 100644
--- a/src/mapi/mapi/stub.c
+++ b/src/mapi/mapi/stub.c
@@ -153,6 +153,28 @@ stub_find_dynamic(const char *name, int generate)
    return stub;
 }
 
+static const struct mapi_stub *
+search_table_by_slot(const struct mapi_stub *table, size_t num_entries,
+                     int slot)
+{
+   size_t i;
+   for (i = 0; i < num_entries; ++i) {
+      if (table[i].slot == slot)
+         return &table[i];
+   }
+   return NULL;
+}
+
+const struct mapi_stub *
+stub_find_by_slot(int slot)
+{
+   const struct mapi_stub *stub =
+      search_table_by_slot(public_stubs, ARRAY_SIZE(public_stubs), slot);
+   if (stub)
+      return stub;
+   return search_table_by_slot(dynamic_stubs, num_dynamic_stubs, slot);
+}
+
 void
 stub_fix_dynamic(struct mapi_stub *stub, const struct mapi_stub *alias)
 {
diff --git a/src/mapi/mapi/stub.h b/src/mapi/mapi/stub.h
index b2b6f18..98e2553 100644
--- a/src/mapi/mapi/stub.h
+++ b/src/mapi/mapi/stub.h
@@ -42,6 +42,9 @@ stub_find_public(const char *name);
 struct mapi_stub *
 stub_find_dynamic(const char *name, int generate);
 
+const struct mapi_stub *
+stub_find_by_slot(int slot);
+
 void
 stub_fix_dynamic(struct mapi_stub *stub, const struct mapi_stub *alias);
 




More information about the mesa-commit mailing list