[patch 2/7] Change how we do nosegneg

Mark McLoughlin markmc at redhat.com
Thu Jul 24 08:12:48 UTC 2008


On Wed, 2008-07-23 at 17:41 -0700, Roland McGrath wrote:

> So let's structure things around that: the kernel build for an arch that
> uses vdso might include a kernelcap.conf file (or might not).  
> 
> For simplicity and consistency in the .spec file, we'll install a file for
> all variants even when it's an empty placeholder.  For the magic, the diff
> below probably covers it (wholly untested).  Then it's up to BuildKernel
> just to add/remove ldconfig-kernelcap.conf as part of the build (perhaps
> eventually done by the upstream makefiles).
> 
> The .conf files have to not conflict (reuse same bit with different name)
> across all installed kernels (or else ldconfig will complain).  So a single
> kernel-%{KVERREL}.conf file would be fine.  But instead I made it
> kernel-%{KVERREL}.variant.conf just to stay consistent with all existing
> names like /lib/module/FOO and the fact that no two kernel rpms conflict on
> the same file name (even if identical).

All sounds fairly reasonable to me, but why not have "make vdso_install"
install the file?

Looking at your patch, if you're going have a file per-variant, you need
to install it in BuildKernel. And you also only want to do it on
vdso_arches.

Another wholly untested patch below :)

Cheers,
Mark.

Index: devel/kernel.spec
===================================================================
--- devel.orig/kernel.spec	2008-07-24 08:49:22.000000000 +0100
+++ devel.orig/kernel.spec	2008-07-24 08:49:22.000000000 +0100
@@ -1312,6 +1312,13 @@ BuildKernel() {
     make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw=
 %ifarch %{vdso_arches}
     make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
+    if [ ! -s ldconfig-kernelcap.conf ]; then
+      echo > ldconfig-kernelcap.conf "\
+# Placeholder file, no vDSO hwcap entries used in this kernel."
+    fi
+
+    %{__install} -D -m 444 ldconfig-kernelcap.conf \
+        $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf
 %endif
 
     # And save the headers/makefiles etc for building modules against
@@ -1509,22 +1516,6 @@ BuildKernel vmlinux vmlinux kdump vmlinu
 
 cd linux-%{kversion}.%{_target_cpu}
 
-%if %{includexen}
-%if %{with_xen}
-mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
-rm -f $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf
-cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf <<\EOF
-# This directive teaches ldconfig to search in nosegneg subdirectories
-# and cache the DSOs there with extra bit 0 set in their hwcap match
-# fields.  In Xen guest kernels, the vDSO tells the dynamic linker to
-# search in nosegneg subdirectories and to match this extra hwcap bit
-# in the ld.so.cache file.
-hwcap 0 nosegneg
-EOF
-chmod 444 $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf
-%endif
-%endif
-
 %if %{with_doc}
 mkdir -p $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}/Documentation
 
@@ -1728,6 +1719,7 @@ fi
 /lib/modules/%{KVERREL}%{?2:.%{2}}/weak-updates\
 %ifarch %{vdso_arches}\
 /lib/modules/%{KVERREL}%{?2:.%{2}}/vdso\
+/etc/ld.so.conf.d/kernelcap-%{KVERREL}%{?2:.%{2}}.conf\
 %endif\
 /lib/modules/%{KVERREL}%{?2:.%{2}}/modules.block\
 /lib/modules/%{KVERREL}%{?2:.%{2}}/modules.networking\





More information about the Fedora-kernel-list mailing list