diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-07-04 22:10:06 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-07-04 22:10:06 +0200 |
commit | 949ed7aae1e9418ea99f569efe6cb03349485508 (patch) | |
tree | 5e2f2ff230c3387585a46cc47fcd4dc9c156f845 /gnu/packages/patches | |
parent | 9d9a8b079ab9d0a1b267992a54b77d9aabad69fd (diff) | |
download | guix-949ed7aae1e9418ea99f569efe6cb03349485508.tar guix-949ed7aae1e9418ea99f569efe6cb03349485508.tar.gz |
gnu: glibc: Fix cross-compilation to aarch64-linux-gnu.
Fixes <https://bugs.gnu.org/49113>.
Reported by Maxime Devos <maximedevos@telenet.be>.
Previously, the cross-compiled libc.so linker script would read:
OUTPUT_FORMAT(elf64-little)
instead of:
OUTPUT_FORMAT(elf64-littleaarch64)
This is because glibc 2.33 runs "objdump -f" instead of
"aarch64-linux-gnu-objdump -f" to determine the output format.
* gnu/packages/patches/glibc-cross-objdump.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/base.scm (glibc)[source]: Use it.
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r-- | gnu/packages/patches/glibc-cross-objdump.patch | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/gnu/packages/patches/glibc-cross-objdump.patch b/gnu/packages/patches/glibc-cross-objdump.patch new file mode 100644 index 0000000000..1660d915f7 --- /dev/null +++ b/gnu/packages/patches/glibc-cross-objdump.patch @@ -0,0 +1,159 @@ +Arrange so that glibc uses 'TRIPLET-objdump -f' rather than 'objdump -f' +to determine the 'OUTPUT_FORMAT' value in libc.so when cross-compiling. + +Patch submitted upstream: + <https://sourceware.org/pipermail/libc-alpha/2021-July/128333.html>. + +diff --git a/aclocal.m4 b/aclocal.m4 +index c195c4db56..13a791ffde 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -118,8 +118,6 @@ AS=`$CC -print-prog-name=as` + LD=`$CC -print-prog-name=ld` + AR=`$CC -print-prog-name=ar` + AC_SUBST(AR) +-OBJDUMP=`$CC -print-prog-name=objdump` +-AC_SUBST(OBJDUMP) + OBJCOPY=`$CC -print-prog-name=objcopy` + AC_SUBST(OBJCOPY) + GPROF=`$CC -print-prog-name=gprof` +diff --git a/configure b/configure +index 9619c10991..fe0eda1cd5 100755 +--- a/configure ++++ b/configure +@@ -655,7 +655,6 @@ LD + AS + GPROF + OBJCOPY +-OBJDUMP + AR + LN_S + INSTALL_DATA +@@ -690,6 +689,7 @@ sysheaders + ac_ct_CXX + CXXFLAGS + CXX ++OBJDUMP + READELF + CPP + cross_compiling +@@ -2962,6 +2962,98 @@ else + READELF="$ac_cv_prog_READELF" + fi + ++if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. ++set dummy ${ac_tool_prefix}objdump; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_OBJDUMP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$OBJDUMP"; then ++ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++OBJDUMP=$ac_cv_prog_OBJDUMP ++if test -n "$OBJDUMP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 ++$as_echo "$OBJDUMP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_OBJDUMP"; then ++ ac_ct_OBJDUMP=$OBJDUMP ++ # Extract the first word of "objdump", so it can be a program name with args. ++set dummy objdump; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_OBJDUMP"; then ++ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ++ ac_cv_prog_ac_ct_OBJDUMP="objdump" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP ++if test -n "$ac_ct_OBJDUMP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 ++$as_echo "$ac_ct_OBJDUMP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_OBJDUMP" = x; then ++ OBJDUMP="false" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ OBJDUMP=$ac_ct_OBJDUMP ++ fi ++else ++ OBJDUMP="$ac_cv_prog_OBJDUMP" ++fi ++ + + # We need the C++ compiler only for testing. + ac_ext=cpp +@@ -4553,8 +4645,6 @@ AS=`$CC -print-prog-name=as` + LD=`$CC -print-prog-name=ld` + AR=`$CC -print-prog-name=ar` + +-OBJDUMP=`$CC -print-prog-name=objdump` +- + OBJCOPY=`$CC -print-prog-name=objcopy` + + GPROF=`$CC -print-prog-name=gprof` +diff --git a/configure.ac b/configure.ac +index 34ecbba540..924af12738 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -52,6 +52,7 @@ fi + AC_SUBST(cross_compiling) + AC_PROG_CPP + AC_CHECK_TOOL(READELF, readelf, false) ++AC_CHECK_TOOL(OBJDUMP, objdump, false) + + # We need the C++ compiler only for testing. + AC_PROG_CXX |