[Mesa-dev] [PATCH 08/14] i965: Build the driver into a shared mesa_dri_drivers.so .

Eric Anholt eric at anholt.net
Wed Oct 2 13:05:35 PDT 2013


Emil Velikov <emil.l.velikov at gmail.com> writes:

> On 30/09/13 21:44, Eric Anholt wrote:
>> Previously, we've split things such that mesa core is in libdricore,
>> exposing the whole Mesa core interface in the global namespace, and the
>> i965_dri.so code all links against that.  Along with polluting application
>> namespace terribly, it requires extra PLT indirections and prevents LTO.
>> 
>> Instead, we can build all of the driver contents into the same .so with
>> just a few symbols exposed to be referenced from the actual driver .so
>> file, allowing LTO and reducing our exposed symbol count massively.
>> ---
>>  configure.ac                                  | 29 +++++++++++---
>>  src/mesa/drivers/dri/Makefile.am              | 54 ++++++++++++++++++++++++++-
>>  src/mesa/drivers/dri/common/Makefile.am       |  3 ++
>>  src/mesa/drivers/dri/common/dri_util.c        | 10 +++--
>>  src/mesa/drivers/dri/common/megadriver_stub.c | 41 ++++++++++++++++++++
>>  src/mesa/drivers/dri/i965/Makefile.am         | 27 +++-----------
>>  src/mesa/drivers/dri/i965/intel_screen.c      | 16 ++++++--
>>  src/mesa/drivers/dri/i965/intel_screen.h      |  2 +
>>  8 files changed, 147 insertions(+), 35 deletions(-)
>>  create mode 100644 src/mesa/drivers/dri/common/megadriver_stub.c
>> 
> [...]
>> diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
>> index 9a99ea9..3126ac8 100644
>> --- a/src/mesa/drivers/dri/common/dri_util.c
>> +++ b/src/mesa/drivers/dri/common/dri_util.c
>> @@ -106,10 +106,12 @@ dri2CreateNewScreen2(int scrn, int fd,
>>      /* If the driver exposes its vtable through its extensions list
>>       * (megadrivers), use that instead.
>>       */
>> -    for (int i = 0; driver_extensions[i]; i++) {
>> -       if (strcmp(driver_extensions[i]->name, __DRI_DRIVER_VTABLE) == 0) {
>> -          psp->driver =
>> -             ((__DRIDriverVtableExtension *)driver_extensions[i])->vtable;
>> +    if (driver_extensions) {
>> +       for (int i = 0; driver_extensions[i]; i++) {
>> +          if (strcmp(driver_extensions[i]->name, __DRI_DRIVER_VTABLE) == 0) {
>> +             psp->driver =
>> +                ((__DRIDriverVtableExtension *)driver_extensions[i])->vtable;
>> +          }
>>         }
>>      }
>>  
> I believe this hunk would need to be squashed in previous patch.
> Otherwise we'll fail with null ptr deref due to as driver_extensions is
> NULL, when called from dri*CreateNewScreen() context.

Thanks, fixed!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131002/f49b6dea/attachment-0001.pgp>


More information about the mesa-dev mailing list