mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 05:18:07 -05:00
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.
This commit is contained in:
parent
9d9a8b079a
commit
949ed7aae1
3 changed files with 161 additions and 0 deletions
|
@ -1108,6 +1108,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/glibc-bootstrap-system-2.2.5.patch \
|
||||
%D%/packages/patches/glibc-bootstrap-system-2.16.0.patch \
|
||||
%D%/packages/patches/glibc-bootstrap-system.patch \
|
||||
%D%/packages/patches/glibc-cross-objdump.patch \
|
||||
%D%/packages/patches/glibc-dl-cache.patch \
|
||||
%D%/packages/patches/glibc-hidden-visibility-ldconfig.patch \
|
||||
%D%/packages/patches/glibc-hurd-clock_gettime_monotonic.patch \
|
||||
|
|
|
@ -691,6 +691,7 @@ (define-public glibc
|
|||
"glibc-allow-kernel-2.6.32.patch"
|
||||
"glibc-reinstate-prlimit64-fallback.patch"
|
||||
"glibc-supported-locales.patch"
|
||||
"glibc-cross-objdump.patch"
|
||||
"glibc-hurd-clock_t_centiseconds.patch"
|
||||
"glibc-hurd-clock_gettime_monotonic.patch"
|
||||
"glibc-hurd-mach-print.patch"
|
||||
|
|
159
gnu/packages/patches/glibc-cross-objdump.patch
Normal file
159
gnu/packages/patches/glibc-cross-objdump.patch
Normal file
|
@ -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
|
Loading…
Reference in a new issue