Recently, Somebody Somewhere wrote these words
>
>
> Can someone translate this errorspeak?
>
> Error while loading shared library /usr/X11R6/lib/libGL.so.1
> cannot make segment writable for relocation. Permission denied.
>
> I also get an error from the module on the symbol drm_cleanup_pci,
> which is apparently exported in some .c file in the source,
> although I have yet to find what that is when compiled.
Gentoo and google finally obliged on my request above.
It seems there are text relocations in the DRI stuff,
CONFIG_PAX_NOELFRELOCS is just for that purpose. After reading the
kernel help, I decided CONFIG_PAX_NOELFRELOCS has to stay. I never
quite got this little bit:
NOTE: if you are using dynamic ELF executables (as suggested
when using ASLR) then you must have made sure that you linked
your files using the PIC version of crt1 (the et_dyn.tar.gz
package
referenced there has already been updated to support this).
ASLR? Can someone elucidate or dumb it down please?
These files in the dri have relocations
TEXTREL in exe /usr/X11R6/lib/dri-old.libGL.so.1.2 (AFAIK, that is
the file from the common DRM tarball renamed by an install)
TEXTREL in exe /usr/X11R6/lib/libGL.so.1.2 (Made by X-6.9.0 with
#define BuildXF86DRI YES added to host.def)
TEXTREL library /usr/local/lib/libGL.so.1 exec /usr/X11R6/lib/libGLU.so.1.3
TEXTREL in exe /usr/X11R6/lib/libOSMesa.so.4.0
TEXTREL library /usr/local/lib/libGL.so.1 exec
/usr/X11R6/lib/libOSMesa.so.4.0
So I'll have to file another bug. Everyone can get patching or at
least stop wasting time on this.
Attached is a small gentoo script for checking for relocations. One
of the readelf commands produces the output "Nothing to do!"
Usage is script file(s) and it works with wildcards. I had to add
the interpeter line, so I gather it's an idea more than a tool.
--
With best Regards,
Declan Moriarty.
#!/bin/sh
get_textrel() {
exe=$1
echo -- $exe --
if file $exe | grep "ELF " >/dev/null ; then
readelf -d $exe 2>/dev/null | grep TEXTREL 2>&1>/dev/null &&
echo TEXTREL in exe $exe
ldd $exe | awk '{print $3}' | while read lib; do
readelf -d $lib | grep TEXTREL 2>&1>/dev/null && echo
TEXTREL library $lib exec $exe
done
fi
}
if [ "$1" = "" ]; then
echo Usage: $0 "<path/filename>"
#exit 1
#paths=`echo ${PATH} | tr ':' '\n'`
fi
for exe in "$@" $paths ; do
[ -f $exe ] && get_textrel $exe
[ -d $exe ] && (
for e in $exe/* ; do
get_textrel $e
done
)
done
--
http://linuxfromscratch.org/mailman/listinfo/hlfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page