https://sourceware.org/git/?p=elfutils.git;a=commit;h=cf1b5fe170fa24f32871ef284ff2968c73816f98 commit cf1b5fe170fa24f32871ef284ff2968c73816f98 Author: Mark Wielaard Date: Fri Dec 6 17:20:00 2019 +0100 Make sure to always build with build-ids. We really need build-ids for various things. If the system compiler doesn't generate build-ids warn and generate them anyway for both the binaries and the tests. Signed-off-by: Mark Wielaard diff --git a/configure.ac b/configure.ac index 5a2dc373..36a6b6c2 100644 --- a/configure.ac +++ b/configure.ac @@ -197,6 +197,15 @@ if test "$ac_cv_zdefs" = "yes"; then dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS" fi +# We really want build-ids. Warn and force generating them if gcc was +# configure without --enable-linker-build-id +AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl +AC_LINK_IFELSE([AC_LANG_PROGRAM()],[ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no],AC_MSG_FAILURE([unexpected compile failure]))]) +if test "$ac_cv_buildid" = "no"; then + AC_MSG_WARN([compiler doesn't generate build-id by default]) + LDFLAGS="$LDFLAGS -Wl,--build-id" +fi + ZRELRO_LDFLAGS="-Wl,-z,relro" AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl save_LDFLAGS="$LDFLAGS" diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 6f92fbf1..6533996a 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -101,7 +101,7 @@ export DEBUGINFOD_TIMEOUT=10 # cannot find it without debuginfod. echo "int main() { return 0; }" > ${PWD}/prog.c tempfiles prog.c -gcc -g -o prog ${PWD}/prog.c +gcc -Wl,--build-id -g -o prog ${PWD}/prog.c testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ -a prog | grep 'Build ID' | cut -d ' ' -f 7` @@ -138,7 +138,7 @@ cmp $filename ${PWD}/prog.c # Build another, non-stripped binary echo "int main() { return 0; }" > ${PWD}/prog2.c tempfiles prog2.c -gcc -g -o prog2 ${PWD}/prog2.c +gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ -a prog2 | grep 'Build ID' | cut -d ' ' -f 7` --- a/configure 1970-01-01 01:00:00.000000000 +0100 +++ b/configure 2019-12-11 14:18:11.812008097 +0100 @@ -5325,6 +5325,43 @@ dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS" fi +# We really want build-ids. Warn and force generating them if gcc was +# configure without --enable-linker-build-id +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler generates build-ids" >&5 +$as_echo_n "checking whether the compiler generates build-ids... " >&6; } +if ${ac_cv_buildid+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "unexpected compile failure +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buildid" >&5 +$as_echo "$ac_cv_buildid" >&6; } +if test "$ac_cv_buildid" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler doesn't generate build-id by default" >&5 +$as_echo "$as_me: WARNING: compiler doesn't generate build-id by default" >&2;} + LDFLAGS="$LDFLAGS -Wl,--build-id" +fi + ZRELRO_LDFLAGS="-Wl,-z,relro" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports $ZRELRO_LDFLAGS" >&5 $as_echo_n "checking whether gcc supports $ZRELRO_LDFLAGS... " >&6; }