[patch] Fix non-build-id core files on build-id system

Jan Kratochvil jan.kratochvil at redhat.com
Tue Nov 12 20:36:42 UTC 2013


Hi Mark,

I did not verify it on older elfutils but it is apparently a regression by
some of the patches of mine.

This is easily reproducible on Fedora if you generate core file with GDB gcore
command.  GDB gcore does not dump the first ELF page containing build-id.

There is no testcase, there could be one.  OTOH this fix is clear IMO.


Thanks,
Jan


before fix:

$ ./src/unstrip -n --core=evince.gcore -e /usr/bin/evince
0x3346e00000+0x223000 ae24812f4a2f0e38e4f3a05c04542b11ff13fc2a at 0x3346e001d8 /usr/lib64/ld-2.17.so /usr/lib/debug/usr/lib64/ld-2.17.so.debug ld-linux-x86-64.so.2
0x334ee00000+0x202000 aae267a75db7db4eb6bb5557415abcf8ed045721 at 0x334f0001d8 /usr/lib64/libgthread-2.0.so.0.3600.3 /usr/lib/debug/usr/lib64/libgthread-2.0.so.0.3600.3.debug libgthread-2.0.so.0
0x3350a00000+0x202000 9536d9f85d7040ed885d6d838b5ec9a56b573e8b at 0x3350c001d8 /usr/lib64/libX11-xcb.so.1.0.0 /usr/lib/debug/usr/lib64/libX11-xcb.so.1.0.0.debug libX11-xcb.so.1
0x7ffff7ffd000+0x2000 406ec7b7e65c439482ef245908fa4c1c759f59cf at 0x7ffff7ffd340 . - linux-vdso.so.1
0x3347a00000+0x21b420 ca6269ab1bb7236b6ea622550fa204d935da9d8b at 0x3347a00248 /lib64/libpthread.so.0 /usr/lib/debug/usr/lib64/libpthread-2.17.so.debug libpthread.so.0

after fix:

$ ./src/unstrip -n --core=evince.gcore -e /usr/bin/evince
0x3346e00000+0x223000 ae24812f4a2f0e38e4f3a05c04542b11ff13fc2a at 0x3346e001d8 /usr/lib64/ld-2.17.so /usr/lib/debug/usr/lib64/ld-2.17.so.debug ld-linux-x86-64.so.2
0x7ffff7ffd000+0x2000 406ec7b7e65c439482ef245908fa4c1c759f59cf at 0x7ffff7ffd340 . - linux-vdso.so.1
0x7ffff11dc000+0x20c888 5ed0a296fe4b0730be68fe96c31c1a890a4a601a at 0x7ffff11dc248 /lib64/libnss_files.so.2 /usr/lib/debug/usr/lib64/libnss_files-2.17.so.debug libnss_files.so.2
0x3348600000+0x215400 96465ae157dd8e4b708f261e70ba6dc1c14d643e at 0x33486001d8 /lib64/libgcc_s.so.1 /usr/lib/debug/usr/lib64/libgcc_s-4.8.2-20131017.so.1.debug libgcc_s.so.1
0x3348e00000+0x263208 524d2f95d5c1ab4f17f594dddbc384ae1ac27700 at 0x3348e001d8 /lib64/libpcre.so.1 /usr/lib/debug/usr/lib64/libpcre.so.1.2.0.debug libpcre.so.1
0x3353e00000+0x205148 4283fad4047e41416789c6a56fc15561d485ccdb at 0x3353e001d8 /lib64/libXxf86vm.so.1 /usr/lib/debug/usr/lib64/libXxf86vm.so.1.0.0.debug libXxf86vm.so.1
0x3354a00000+0x216058 6fd4502f5f8494a665ca12b2f7832f1e6fb61269 at 0x3354a001d8 /lib64/libxcb-glx.so.0 /usr/lib/debug/usr/lib64/libxcb-glx.so.0.0.0.debug libxcb-glx.so.0
0x7ffff7938000+0x20bb90 969b99bf83f5b8a7a460946f74411b3aa8ab5ed4 at 0x7ffff79381d8 /lib64/libdrm.so.2 /usr/lib/debug/usr/lib64/libdrm.so.2.4.0.debug libdrm.so.2
0x334c600000+0x211850 cbb560dab6cb1db437afbf0adbfb01a545bd3601 at 0x334c6001d8 /lib64/libudev.so.1 /usr/lib/debug/usr/lib64/libudev.so.1.3.5.debug libudev.so.1
0x3356600000+0x2259d8 9082fa8f2cee5fca9830124dfa28b47bf63fff39 at 0x3356600210 /lib64/libglapi.so.0 /usr/lib/debug/usr/lib64/libglapi.so.0.0.0.debug libglapi.so.0
0x3356a00000+0x20f658 9107eb92c0fc2249204c06fd97a3d8b2b7444ba0 at 0x3356a001d8 /lib64/libwayland-server.so.0 /usr/lib/debug/usr/lib64/libwayland-server.so.0.1.0.debug libwayland-server.so.0
0x3357200000+0x2063c0 0e78b81b7aba5d48f6cf0f06671d8cc545b1b14a at 0x33572001d8 /lib64/libgbm.so.1 /usr/lib/debug/usr/lib64/libgbm.so.1.0.0.debug libgbm.so.1
0x3353600000+0x203058 d25c2b963600885bf1b7b6e9c599aa93618ad713 at 0x33536001d8 /lib64/libxcb-shape.so.0 /usr/lib/debug/usr/lib64/libxcb-shape.so.0.0.0.debug libxcb-shape.so.0
0x3352e00000+0x206058 360440775ace8ad1f060038dfa8dc7fa843210d1 at 0x3352e001d8 /lib64/libxcb-xfixes.so.0 /usr/lib/debug/usr/lib64/libxcb-xfixes.so.0.0.0.debug libxcb-xfixes.so.0
0x3356200000+0x204068 17fe8d356bebb2ea2b46324d479abaff83380ab7 at 0x33562001d8 /lib64/libxcb-dri2.so.0 /usr/lib/debug/usr/lib64/libxcb-dri2.so.0.0.0.debug libxcb-dri2.so.0
0x3350a00000+0x201030 9536d9f85d7040ed885d6d838b5ec9a56b573e8b at 0x3350a001d8 /lib64/libX11-xcb.so.1 /usr/lib/debug/usr/lib64/libX11-xcb.so.1.0.0.debug libX11-xcb.so.1
0x3351600000+0x21b168 a1aa32c91bc181cb69ebc81bbfd03a1349ea4e33 at 0x33516001d8 /lib64/libgraphite2.so.3 /usr/lib/debug/usr/lib64/libgraphite2.so.3.0.1.debug libgraphite2.so.3
0x334c200000+0x2290e0 beb4e1c267494fc8f1c1e91968c17441117690cb at 0x334c2001d8 /lib64/libexpat.so.1 /usr/lib/debug/usr/lib64/libexpat.so.1.6.0.debug libexpat.so.1
0x334e200000+0x2459e0 2dfbbf1c59cf000f447a8a954fa27a90b02a7261 at 0x334e2001d8 /lib64/libdbus-1.so.3 /usr/lib/debug/usr/lib64/libdbus-1.so.3.7.4.debug libdbus-1.so.3
0x3360600000+0x224c28 aa6d357575a6b1e798627ba87d05ea2591192bb3 at 0x33606001d8 /lib64/libatspi.so.0 /usr/lib/debug/usr/lib64/libatspi.so.0.0.1.debug libatspi.so.0
0x334b200000+0x203128 0636c58a786b4e2adab10caaace8ee85be51ca5c at 0x334b2001d8 /lib64/libXau.so.6 /usr/lib/debug/usr/lib64/libXau.so.6.0.0.debug libXau.so.6
0x3349e00000+0x219a98 096a9d75fe22198401bacef684c6ef27a2a9977a at 0x3349e00248 /lib64/libresolv.so.2 /usr/lib/debug/usr/lib64/libresolv-2.17.so.debug libresolv.so.2
0x3349200000+0x222848 a04a64f6c31f7a7fa78721e51dbecc73ec05986f at 0x3349200210 /lib64/libselinux.so.1 /usr/lib/debug/usr/lib64/libselinux.so.1.debug libselinux.so.1
0x334a200000+0x207628 98af07c114710f13a6ea4ee510bb8baf997abfd4 at 0x334a2001d8 /lib64/libffi.so.6 /usr/lib/debug/usr/lib64/libffi.so.6.0.1.debug libffi.so.6
0x335ba00000+0x204070 54e016b5c74ed12cc732926e9a04388c47681b78 at 0x335ba001d8 /lib64/libgpg-error.so.0 /usr/lib/debug/usr/lib64/libgpg-error.so.0.9.0.debug libgpg-error.so.0
0x335c200000+0x27cea0 168671917fe954e3a04fe09bfb92b2bad9095374 at 0x335c2001d8 /lib64/libgcrypt.so.11 /usr/lib/debug/usr/lib64/libgcrypt.so.11.8.2.debug libgcrypt.so.11
0x3348a00000+0x207c38 4137276861a4d112640637314aa8d7df5f7eb67c at 0x3348a00248 /lib64/librt.so.1 /usr/lib/debug/usr/lib64/librt-2.17.so.debug librt.so.1
0x3353200000+0x25d1d0 6f825e06a6ed79f86f7e4902e254e8f82ea2a927 at 0x3353200210 /lib64/libGL.so.1 /usr/lib/debug/usr/lib64/libGL.so.1.2.0.debug libGL.so.1
0x334f200000+0x209268 b995e32fa22a66b84be2e0a39fd1c34cef5b644d at 0x334f2001d8 /lib64/libXrender.so.1 /usr/lib/debug/usr/lib64/libXrender.so.1.3.0.debug libXrender.so.1
0x3355e00000+0x2080a8 e8650ead8d5ea0e906dec794544dcf5fccbb88b3 at 0x3355e001d8 /lib64/libxcb-render.so.0 /usr/lib/debug/usr/lib64/libxcb-render.so.0.0.0.debug libxcb-render.so.0
0x3354600000+0x202058 61ea5679d37606684638dc96298a4ccbf465a5bb at 0x33546001d8 /lib64/libxcb-shm.so.0 /usr/lib/debug/usr/lib64/libxcb-shm.so.0.0.0.debug libxcb-shm.so.0
0x3355a00000+0x221f08 df0e04a8db882e9a546942b03614cb94bf38df5e at 0x3355a00210 /lib64/libEGL.so.1 /usr/lib/debug/usr/lib64/libEGL.so.1.0.0.debug libEGL.so.1
0x3355200000+0x2a7428 673929ab705ceb1793b5891a3624eae84c1e8511 at 0x3355200210 /lib64/libpixman-1.so.0 /usr/lib/debug/usr/lib64/libpixman-1.so.0.30.0.debug libpixman-1.so.0
0x334ea00000+0x229428 dc01f51e41eed711d28c7897df73c211398c6a38 at 0x334ea001d8 /lib64/libpng15.so.15 /usr/lib/debug/usr/lib64/libpng15.so.15.13.0.debug libpng15.so.15
0x334ca00000+0x2a26a8 d8f1820ba77c0664b6b45c051763ccf6e023dea3 at 0x334ca001d8 /lib64/libfreetype.so.6 /usr/lib/debug/usr/lib64/libfreetype.so.6.10.0.debug libfreetype.so.6
0x3352200000+0x2527d8 e4d24c9c13487718ecaa9462069657d6f59fc284 at 0x33522001d8 /lib64/libharfbuzz.so.0 /usr/lib/debug/usr/lib64/libharfbuzz.so.0.919.0.debug libharfbuzz.so.0
0x334ce00000+0x211918 518a13998b26dbc6f775e6af00d44e18873ac9f1 at 0x334ce001d8 /lib64/libXext.so.6 /usr/lib/debug/usr/lib64/libXext.so.6.4.0.debug libXext.so.6
0x335e200000+0x2071d0 4fb38142310c33bd7ae3cfeaa824d4878602229c at 0x335e2001d8 /lib64/libwayland-cursor.so.0 /usr/lib/debug/usr/lib64/libwayland-cursor.so.0.0.0.debug libwayland-cursor.so.0
0x335de00000+0x2622f8 ac0083c85a3a2b6449e7c71de3ff95ef90a73b62 at 0x335de001d8 /lib64/libxkbcommon.so.0 - libxkbcommon.so.0
0x3356e00000+0x20c548 8fbbe37450c3d65988157fb2a0134befd5b53b21 at 0x3356e001d8 /lib64/libwayland-client.so.0 /usr/lib/debug/usr/lib64/libwayland-client.so.0.1.0.debug libwayland-client.so.0
0x3353a00000+0x2020b8 987ddb23b8b51635380e60428f50cf04fa5be93c at 0x3353a001d8 /lib64/libXdamage.so.1 /usr/lib/debug/usr/lib64/libXdamage.so.1.1.0.debug libXdamage.so.1
0x3357a00000+0x202098 b6dde2b5ef6170127458689bdf11401c16e31a75 at 0x3357a001d8 /lib64/libXcomposite.so.1 /usr/lib/debug/usr/lib64/libXcomposite.so.1.0.0.debug libXcomposite.so.1
0x3359200000+0x20a328 ce999788b99875cf05bc8e49cf59cb47ccb1b779 at 0x33592001d8 /lib64/libXcursor.so.1 /usr/lib/debug/usr/lib64/libXcursor.so.1.0.2.debug libXcursor.so.1
0x3358600000+0x2091c8 5685de62aeec733616999e0c4d62979b8e80ffac at 0x33586001d8 /lib64/libXrandr.so.2 /usr/lib/debug/usr/lib64/libXrandr.so.2.2.0.debug libXrandr.so.2
0x3358a00000+0x202128 fe2b7a1513251589f3536b94e0b1df39cf323efa at 0x3358a001d8 /lib64/libXinerama.so.1 /usr/lib/debug/usr/lib64/libXinerama.so.1.0.0.debug libXinerama.so.1
0x334da00000+0x23b630 7b9e4c88b7c403e0df9dec2817076491374eb8da at 0x334da001d8 /lib64/libfontconfig.so.1 /usr/lib/debug/usr/lib64/libfontconfig.so.1.7.0.debug libfontconfig.so.1
0x3358200000+0x214988 81056f0a0aedf73bdce2a3915e901a2f6616448e at 0x33582001d8 /lib64/libpangoft2-1.0.so.0 /usr/lib/debug/usr/lib64/libpangoft2-1.0.so.0.3400.1.debug libpangoft2-1.0.so.0
0x335f600000+0x22ab98 123ff9454a8250146b09774b627062dd3cf8c44c at 0x335f6001d8 /lib64/libatk-bridge-2.0.so.0 /usr/lib/debug/usr/lib64/libatk-bridge-2.0.so.0.0.0.debug libatk-bridge-2.0.so.0
0x3351200000+0x205118 c8d7df7e02163bc9c5cca7dd47c883be38d566b0 at 0x33512001d8 /lib64/libXfixes.so.3 /usr/lib/debug/usr/lib64/libXfixes.so.3.1.0.debug libXfixes.so.3
0x3351a00000+0x20f288 1fea9019115f54b6ec68adb0d40fdd3a4c9dc965 at 0x3351a001d8 /lib64/libXi.so.6 /usr/lib/debug/usr/lib64/libXi.so.6.1.0.debug libXi.so.6
0x334aa00000+0x224278 cfb1feaee9f25bab217ef00e61b5375a3acd7d22 at 0x334aa001d8 /lib64/liblzma.so.5 /usr/lib/debug/usr/lib64/liblzma.so.5.0.99.debug liblzma.so.5
0x3347e00000+0x203130 393c787f57358b1fbb8dc6fa97df7c5dc9eb2f1c at 0x3347e00248 /lib64/libdl.so.2 /usr/lib/debug/usr/lib64/libdl-2.17.so.debug libdl.so.2
0x334be00000+0x21d368 e5cda16b7285dde2b9bff465d63d2c5030b23aac at 0x334be001d8 /lib64/libxcb.so.1 /usr/lib/debug/usr/lib64/libxcb.so.1.1.0.debug libxcb.so.1
0x334ae00000+0x204180 c6d2f64e0a1101a7d7e762b3cfda27b3cf803ccb at 0x334ae00210 /lib64/libuuid.so.1 /usr/lib/debug/usr/lib64/libuuid.so.1.3.0.debug libuuid.so.1
0x3347200000+0x3c0260 cf1203bfc556e2f72d1e0312167fa783daa9a265 at 0x3347200280 /lib64/libc.so.6 /usr/lib/debug/usr/lib64/libc-2.17.so.debug libc.so.6
0x3347a00000+0x21b420 ca6269ab1bb7236b6ea622550fa204d935da9d8b at 0x3347a00248 /lib64/libpthread.so.0 /usr/lib/debug/usr/lib64/libpthread-2.17.so.debug libpthread.so.0
0x3347600000+0x301158 a5bf99449a1e32eb16494ae0400dc4c9409fc812 at 0x3347600248 /lib64/libm.so.6 /usr/lib/debug/usr/lib64/libm-2.17.so.debug libm.so.6
0x3348200000+0x215208 dfbabda73462123b964323e0e1dff03a8d7d6fca at 0x33482001d8 /lib64/libz.so.1 /usr/lib/debug/usr/lib64/libz.so.1.2.7.debug libz.so.1
0x3349600000+0x32b540 e1a401c535a0feb8b026f35115edd0ce77fa9afd at 0x33496001d8 /lib64/libglib-2.0.so.0 /usr/lib/debug/usr/lib64/libglib-2.0.so.0.3600.3.debug libglib-2.0.so.0
0x334a600000+0x24ef88 7a72ef88a9ac81502af8cbe0a31f604e4795a8cc at 0x334a6001d8 /lib64/libgobject-2.0.so.0 /usr/lib/debug/usr/lib64/libgobject-2.0.so.0.3600.3.debug libgobject-2.0.so.0
0x334d200000+0x358228 cb6de6eefb469501e160697eb4d68d8ef352c59d at 0x334d2001d8 /lib64/libgio-2.0.so.0 /usr/lib/debug/usr/lib64/libgio-2.0.so.0.3600.3.debug libgio-2.0.so.0
0x335ea00000+0x250138 4a8fa4ea06c408bc6055245734208a4d813c2fee at 0x335ea001d8 /lib64/libsecret-1.so.0 - libsecret-1.so.0
0x334ee00000+0x201040 aae267a75db7db4eb6bb5557415abcf8ed045721 at 0x334ee001d8 /lib64/libgthread-2.0.so.0 /usr/lib/debug/usr/lib64/libgthread-2.0.so.0.3600.3.debug libgthread-2.0.so.0
0x334ba00000+0x203178 5a54a9f65b00e2ab7f6011fc787ddbe4c6996f7c at 0x334ba001d8 /lib64/libgmodule-2.0.so.0 /usr/lib/debug/usr/lib64/libgmodule-2.0.so.0.3600.3.debug libgmodule-2.0.so.0
0x3354200000+0x31cdd8 53ce0625450aee8f0e35d43aeafb83a952d3445e at 0x33542001d8 /lib64/libcairo.so.2 /usr/lib/debug/usr/lib64/libcairo.so.2.11200.14.debug libcairo.so.2
0x3358e00000+0x2498c0 9d8d4107806c27682193619510c9e8c145554b37 at 0x3358e001d8 /lib64/libpango-1.0.so.0 /usr/lib/debug/usr/lib64/libpango-1.0.so.0.3400.1.debug libpango-1.0.so.0
0x335d600000+0x208160 7ab5ce49c45454acd52d45e1fe35c3cea72ec9b9 at 0x335d6001d8 /lib64/libcairo-gobject.so.2 /usr/lib/debug/usr/lib64/libcairo-gobject.so.2.11200.14.debug libcairo-gobject.so.2
0x3355600000+0x222810 aaef995596d6df2a61c9af324d498a6efc7589a8 at 0x33556001d8 /lib64/libgdk_pixbuf-2.0.so.0 /usr/lib/debug/usr/lib64/libgdk_pixbuf-2.0.so.0.2800.2.debug libgdk_pixbuf-2.0.so.0
0x3359a00000+0x20c5e8 26caae48768413308f2d7bdf6de057414f71b579 at 0x3359a001d8 /lib64/libpangocairo-1.0.so.0 /usr/lib/debug/usr/lib64/libpangocairo-1.0.so.0.3400.1.debug libpangocairo-1.0.so.0
0x335a200000+0x222b38 baf83e77e1ff5cdd34b5dd46ee3c936f877658c8 at 0x335a2001d8 /lib64/libatk-1.0.so.0 /usr/lib/debug/usr/lib64/libatk-1.0.so.0.20809.1.debug libatk-1.0.so.0
0x335fa00000+0x2a7ea8 9726ba5c8bc92f7c9a53148f81a83628f10bc818 at 0x335fa001d8 /lib64/libgdk-3.so.0 /usr/lib/debug/usr/lib64/libgdk-3.so.0.800.6.debug libgdk-3.so.0
0x335ee00000+0x6cc440 8372141f5dfaf6be22a67161fdc39947767b8631 at 0x335ee001d8 /lib64/libgtk-3.so.0 /usr/lib/debug/usr/lib64/libgtk-3.so.0.800.6.debug libgtk-3.so.0
0x334d600000+0x367038 64ff7313247367f0d9b5ad7c5b1f89e457ded820 at 0x334d6001d8 /lib64/libxml2.so.2 /usr/lib/debug/usr/lib64/libxml2.so.2.9.1.debug libxml2.so.2
0x334e600000+0x207338 dfbf90303d74fc84927575f2df1a26e84ae1da43 at 0x334e6001d8 /lib64/libgailutil-3.so.0 /usr/lib/debug/usr/lib64/libgailutil-3.so.0.0.0.debug libgailutil-3.so.0
0x7ffff7b5b000+0x245ee0 3dff6698c80f3d4bd7c29882692cc8d09ce224ff at 0x7ffff7b5b1d8 /lib64/libevview3.so.3 - libevview3.so.3
0x7ffff7da2000+0x237fa8 2b8da625d25cd04c2fb8a2b6c445cef27265b405 at 0x7ffff7da21d8 /lib64/libevdocument3.so.4 - libevdocument3.so.4
0x334b600000+0x33ae00 e24f007c70e555b5108b18b2aee2cc0f008aaeb7 at 0x334b6001d8 /lib64/libX11.so.6 /usr/lib/debug/usr/lib64/libX11.so.6.3.0.debug libX11.so.6
0x3352a00000+0x21b120 e8152e8ce343924eac53bcb13b47dcbb366cb1b7 at 0x3352a001d8 /lib64/libICE.so.6 /usr/lib/debug/usr/lib64/libICE.so.6.3.0.debug libICE.so.6
0x334de00000+0x207168 62d5a4d2fb81390000793c540a07d364d4681d0c at 0x334de001d8 /lib64/libSM.so.6 /usr/lib/debug/usr/lib64/libSM.so.6.0.1.debug libSM.so.6
0x400000+0x264bb8 c4ebbb69667209721bde71e3491af97086dc7873 at 0x400284 /usr/bin/evince - evince
-------------- next part --------------
commit 0a5641d518d570021bda6f050c3832dd37a0d3ae
Author: Jan Kratochvil <jan.kratochvil at redhat.com>
Date:   Tue Nov 12 20:03:59 2013 +0100

    Fix non-build-id core files on build-id system
    
    libdwfl/
    2013-11-12  Jan Kratochvil  <jan.kratochvil at redhat.com>
    
    	Fix non-build-id core files on build-id system.
    	* link_map.c (report_r_debug): Remove valid clearing if build-id cannot
    	be read from memory.
    
    Signed-off-by: Jan Kratochvil <jan.kratochvil at redhat.com>

diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c
index b094b9b..5d4d364 100644
--- a/libdwfl/link_map.c
+++ b/libdwfl/link_map.c
@@ -415,9 +415,11 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata,
 						&buffer, &buffer_available,
 						build_id_vaddr, build_id_len,
 						memory_callback_arg))
-			/* File has valid build-id which cannot be verified
-			   in memory.  */
-			valid = false;
+			{
+			  /* File has valid build-id which cannot be read from
+			     memory.  This happens for core files without bit 4
+			     (0x10) set in Linux /proc/PID/coredump_filter.  */
+			}
 		      else
 			{
 			  if (memcmp (build_id_bits, buffer, build_id_len) != 0)


More information about the elfutils-devel mailing list