430.34 driver: undefined symbol: noCompositeExtension, 415.27 driver works fine

I tried to upgrade to the latest long-lived branch 430.34.
The X.Org server fails to load the nvidia_drv.so because of an undefined symbol:

[    27.571] (II) LoadModule: "nvidia"
[    27.619] (II) Loading /usr/lib/xorg/modules/drivers/nvidia_drv.so
[    27.650] (EE) Failed to load /usr/lib/xorg/modules/drivers/nvidia_drv.so: /usr/lib/xorg/modules/drivers/nvidia_drv.so: undefined symbol: noCompositeExtension
[    27.650] (II) UnloadModule: "nvidia"
[    27.650] (II) Unloading nvidia
[    27.650] (EE) Failed to load module "nvidia" (loader failed, 7)

I am using

X.Org X Server 1.19.6
Release Date: 2017-12-20
[    26.354] X Protocol Version 11, Revision 0
[    26.355] Current version of pixman: 0.34.0
[    26.556] 	X.Org ANSI C Emulation: 0.4
[    26.556] 	X.Org Video Driver: 23.0
[    26.556] 	X.Org XInput driver : 24.1
[    26.556] 	X.Org Server Extension : 10.0


| NVIDIA-SMI 415.27       Driver Version: 415.27       CUDA Version: 10.0     |
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|   0  Quadro P2000        Off  | 00000000:04:00.0  On |                  N/A |
| 51%   45C    P8     6W /  75W |    111MiB /  5058MiB |      0%      Default |

| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|    0       247      G   X                                            108MiB |

The installation is custom/buildroot based. The very same installation works fine with the 415.28 driver.
Am I missing any newly required library?

See my Xorg.log and xorg.conf attached.
xorg.conf.txt (1.81 KB)

Xorg (430.34).0.log (4.49 KB)

That looks like you upgraded xorg but didn’t rebuild the nvidia driver. Tried that already?

No, I have first built the X-server and then nvidia driver. Also, it does work with other versions of the driver which I have compiled at the same time as the failing driver.

I could solve the issue. The driver now seems to have a dependency to libXcomposite (composite extension). This was not the case earlier and I can’t find any remark in the README about it. Actually the README mentions the composite extension to be optional.

Anyhow after adding libXcomposite and also rebuilding the x-server with the composite extension enabled, the X-server starts normally again.

Note: the test was now done using the 435.21 driver version.

Just chiming in to clarify this: the dependency here is on the xserver being compiled with support for the Composite extension. What the README is describing is that actually having the extension enabled at runtime is optional – that’s in fact why the X driver is looking for the noCompositeExtension symbol in the first place, to determine at runtime whether the extension is enabled.

The reason this changed is that the driver previously had support for X servers that predate the Composite extension, so it jumped through a bunch of hoops to determine whether the server was new enough to support it. Now that support for those ancient X servers has been dropped, the driver just looks for noCompositeExtension directly. This is similar to how other extensions such as Xinerama are handled.

The X server was compiled with the --disable-composite parameter, thus composite extension should have been disabled. Also, a binary search noCompositeExtension did not find anything in the xserver (only result was in the NVIDIA driver).

Since I now have the composite extension added, the performance of the output is reduced. (I see duplicated/dropped frames). This can be solved by disabling the the composite extension in the xorg.conf.