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.
Cheers Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev