mesa: Reduce libGL.so binary size by about 15%
authorArlie Davis <arlied@google.com>
Thu, 17 Sep 2015 22:19:24 +0000 (15:19 -0700)
committerAndreas Boll <andreas.boll.dev@gmail.com>
Thu, 21 Jan 2016 14:03:53 +0000 (15:03 +0100)
commitdaa775b58e6dcc800dd611678b32cb1c5184f5b0
tree7be0b3e9aa6a19610f5239db9ec82e609e431bab
parentdaa0fd7843dfc3f2f209a1b755df01f4dbc8122f
mesa: Reduce libGL.so binary size by about 15%

This patch significantly reduces the size of the libGL.so binary. It does
not change the (externally visible) behavior of libGL.so at all.

gl_gentable.py generates a function, _glapi_create_table_from_handle.
This function allocates a large dispatch table, consisting of 1300 or so
function pointers, and fills this dispatch table by doing symbol lookups
on a given shared library.  Previously, gl_gentable.py would generate a
single, very large _glapi_create_table_from_handle function, with a short
cluster of lines for each entry point (function).  The idiom it generates
was a NULL check, a call to snprintf, a call to dlsym / GetProcAddress,
and then a store into the dispatch table.  Since this function processes
a large number of entry points, this code is duplicated many times over.

We can encode the same information much more compactly, by using a lookup
table.  The previous total size of _glapi_create_table_from_handle on x64
was 125848 bytes.  By using a lookup table, the size of
_glapi_create_table_from_handle (and the related lookup tables) is reduced
to 10840 bytes.  In other words, this enormous function is reduced by 91%.
The size of the entire libGL.so binary (measured when stripped) itself drops
by 15%.

So the purpose of this change is to reduce the binary size, which frees up
disk space, memory, etc.

size lib/libGL.so.1.2.0 on my system shows (Andreas)
   text    data     bss     dec     hex filename
 565947   11256    2720  579923   8d953 lib/libGL.so.1.2.0 before
 469211   21848    2720  493779   788d3 lib/libGL.so.1.2.0 after

v2: Incorporate Matt's feedback.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Tested-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Signed-off-by: Andreas Boll <andreas.boll.dev@gmail.com>
src/mapi/glapi/gen/gl_gentable.py