* [PATCH] Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling.
@ 2021-07-01 21:00 Ludovic Courtès
2022-10-06 14:55 ` Carlos O'Donell
0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2021-07-01 21:00 UTC (permalink / raw)
To: libc-alpha; +Cc: Ludovic Courtès
Commit 87d583c6e8cd0e49f64da76636ebeec033298b4d replaces the sed script
with an "objdump -f" invocation to determine the 'OUTPUT_FORMAT' bit of
the libc.so linker script.
However, when cross-compiling, for example from x86_64-linux-gnu to
aarch64-linux-gnu, "objdump -f" would report the wrong
format ("elf64-little"). Conversely, "aarch64-linux-gnu-objdump -f"
reports "elf64-littleaarch64" as expected.
This patch changes 'configure.ac' to use AC_CHECK_TOOL rather than
'$CC -print-prog-name=objdump' to determine the value of the OBJDUMP
variable. That way, OBJDUMP is set to TRIPLET-objdump when
cross-compiling for TRIPLET.
---
aclocal.m4 | 2 --
configure | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++--
configure.ac | 1 +
3 files changed, 94 insertions(+), 5 deletions(-)
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
base-commit: eb68d7d23cc411acdf68a60f194343a6774d6194
--
2.32.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling.
2021-07-01 21:00 [PATCH] Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling Ludovic Courtès
@ 2022-10-06 14:55 ` Carlos O'Donell
2022-10-07 9:41 ` Ludovic Courtès
0 siblings, 1 reply; 5+ messages in thread
From: Carlos O'Donell @ 2022-10-06 14:55 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: libc-alpha
On Thu, Jul 01, 2021 at 11:00:19PM +0200, Ludovic Courtès via Libc-alpha wrote:
> Commit 87d583c6e8cd0e49f64da76636ebeec033298b4d replaces the sed script
> with an "objdump -f" invocation to determine the 'OUTPUT_FORMAT' bit of
> the libc.so linker script.
>
> However, when cross-compiling, for example from x86_64-linux-gnu to
> aarch64-linux-gnu, "objdump -f" would report the wrong
> format ("elf64-little"). Conversely, "aarch64-linux-gnu-objdump -f"
> reports "elf64-littleaarch64" as expected.
>
> This patch changes 'configure.ac' to use AC_CHECK_TOOL rather than
> '$CC -print-prog-name=objdump' to determine the value of the OBJDUMP
> variable. That way, OBJDUMP is set to TRIPLET-objdump when
> cross-compiling for TRIPLET.
I've been tackling a backlog of old glibc patches, and this one is up
next. Yes it's been over a year, but this patch still applies and the
idea is sound. I've tested this with build-many-glibcs (bmg) on x86_64
and it has no impact because bmg always sets OBJDUMP. My opinion is that
bmg is the "base standard" for how we build native and cross tooling and
so it your changes work here, they should work in other instances.
The change looks good to me.
No regresions on x86_64.
Would you like me to commit this? :-)
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
> ---
> aclocal.m4 | 2 --
> configure | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++--
> configure.ac | 1 +
> 3 files changed, 94 insertions(+), 5 deletions(-)
>
> 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
>
> base-commit: eb68d7d23cc411acdf68a60f194343a6774d6194
> --
> 2.32.0
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling.
2022-10-06 14:55 ` Carlos O'Donell
@ 2022-10-07 9:41 ` Ludovic Courtès
2022-10-13 20:56 ` Fangrui Song
0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2022-10-07 9:41 UTC (permalink / raw)
To: Carlos O'Donell; +Cc: libc-alpha
Hi Carlos,
Carlos O'Donell <carlos@redhat.com> skribis:
> On Thu, Jul 01, 2021 at 11:00:19PM +0200, Ludovic Courtès via Libc-alpha wrote:
>> Commit 87d583c6e8cd0e49f64da76636ebeec033298b4d replaces the sed script
>> with an "objdump -f" invocation to determine the 'OUTPUT_FORMAT' bit of
>> the libc.so linker script.
>>
>> However, when cross-compiling, for example from x86_64-linux-gnu to
>> aarch64-linux-gnu, "objdump -f" would report the wrong
>> format ("elf64-little"). Conversely, "aarch64-linux-gnu-objdump -f"
>> reports "elf64-littleaarch64" as expected.
>>
>> This patch changes 'configure.ac' to use AC_CHECK_TOOL rather than
>> '$CC -print-prog-name=objdump' to determine the value of the OBJDUMP
>> variable. That way, OBJDUMP is set to TRIPLET-objdump when
>> cross-compiling for TRIPLET.
>
> I've been tackling a backlog of old glibc patches, and this one is up
> next. Yes it's been over a year, but this patch still applies and the
> idea is sound. I've tested this with build-many-glibcs (bmg) on x86_64
> and it has no impact because bmg always sets OBJDUMP. My opinion is that
> bmg is the "base standard" for how we build native and cross tooling and
> so it your changes work here, they should work in other instances.
>
> The change looks good to me.
>
> No regresions on x86_64.
>
> Would you like me to commit this? :-)
I don’t have commit access AFAIK so I’ll happily defer to you. :-)
Thanks for taking the time to look at the backlog!
Ludo’.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling.
2022-10-07 9:41 ` Ludovic Courtès
@ 2022-10-13 20:56 ` Fangrui Song
2022-10-29 1:45 ` Carlos O'Donell
0 siblings, 1 reply; 5+ messages in thread
From: Fangrui Song @ 2022-10-13 20:56 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: Carlos O'Donell, libc-alpha
On 2022-10-07, Ludovic Courtès via Libc-alpha wrote:
>Hi Carlos,
>
>Carlos O'Donell <carlos@redhat.com> skribis:
>
>> On Thu, Jul 01, 2021 at 11:00:19PM +0200, Ludovic Courtès via Libc-alpha wrote:
>>> Commit 87d583c6e8cd0e49f64da76636ebeec033298b4d replaces the sed script
>>> with an "objdump -f" invocation to determine the 'OUTPUT_FORMAT' bit of
>>> the libc.so linker script.
>>>
>>> However, when cross-compiling, for example from x86_64-linux-gnu to
>>> aarch64-linux-gnu, "objdump -f" would report the wrong
>>> format ("elf64-little"). Conversely, "aarch64-linux-gnu-objdump -f"
>>> reports "elf64-littleaarch64" as expected.
>>>
>>> This patch changes 'configure.ac' to use AC_CHECK_TOOL rather than
>>> '$CC -print-prog-name=objdump' to determine the value of the OBJDUMP
>>> variable. That way, OBJDUMP is set to TRIPLET-objdump when
>>> cross-compiling for TRIPLET.
>>
>> I've been tackling a backlog of old glibc patches, and this one is up
>> next. Yes it's been over a year, but this patch still applies and the
>> idea is sound. I've tested this with build-many-glibcs (bmg) on x86_64
>> and it has no impact because bmg always sets OBJDUMP. My opinion is that
>> bmg is the "base standard" for how we build native and cross tooling and
>> so it your changes work here, they should work in other instances.
>>
>> The change looks good to me.
>>
>> No regresions on x86_64.
>>
>> Would you like me to commit this? :-)
>
>I don’t have commit access AFAIK so I’ll happily defer to you. :-)
>
>Thanks for taking the time to look at the backlog!
>
>Ludo’.
Thanks. This looks good.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling.
2022-10-13 20:56 ` Fangrui Song
@ 2022-10-29 1:45 ` Carlos O'Donell
0 siblings, 0 replies; 5+ messages in thread
From: Carlos O'Donell @ 2022-10-29 1:45 UTC (permalink / raw)
To: Fangrui Song, Ludovic Courtès; +Cc: libc-alpha
On 10/13/22 16:56, Fangrui Song wrote:
> On 2022-10-07, Ludovic Courtès via Libc-alpha wrote:
>> Hi Carlos,
>>
>> Carlos O'Donell <carlos@redhat.com> skribis:
>>
>>> On Thu, Jul 01, 2021 at 11:00:19PM +0200, Ludovic Courtès via Libc-alpha wrote:
>>>> Commit 87d583c6e8cd0e49f64da76636ebeec033298b4d replaces the sed script
>>>> with an "objdump -f" invocation to determine the 'OUTPUT_FORMAT' bit of
>>>> the libc.so linker script.
>>>>
>>>> However, when cross-compiling, for example from x86_64-linux-gnu to
>>>> aarch64-linux-gnu, "objdump -f" would report the wrong
>>>> format ("elf64-little"). Conversely, "aarch64-linux-gnu-objdump -f"
>>>> reports "elf64-littleaarch64" as expected.
>>>>
>>>> This patch changes 'configure.ac' to use AC_CHECK_TOOL rather than
>>>> '$CC -print-prog-name=objdump' to determine the value of the OBJDUMP
>>>> variable. That way, OBJDUMP is set to TRIPLET-objdump when
>>>> cross-compiling for TRIPLET.
>>>
>>> I've been tackling a backlog of old glibc patches, and this one is up
>>> next. Yes it's been over a year, but this patch still applies and the
>>> idea is sound. I've tested this with build-many-glibcs (bmg) on x86_64
>>> and it has no impact because bmg always sets OBJDUMP. My opinion is that
>>> bmg is the "base standard" for how we build native and cross tooling and
>>> so it your changes work here, they should work in other instances.
>>>
>>> The change looks good to me.
>>>
>>> No regresions on x86_64.
>>>
>>> Would you like me to commit this? :-)
>>
>> I don’t have commit access AFAIK so I’ll happily defer to you. :-)
>>
>> Thanks for taking the time to look at the backlog!
>>
>> Ludo’.
>
> Thanks. This looks good.
Tested again with bmg to cross x86_64 to aarch64. No regressions.
Pushed. Thank you!
--
Cheers,
Carlos.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-10-29 1:45 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-01 21:00 [PATCH] Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling Ludovic Courtès
2022-10-06 14:55 ` Carlos O'Donell
2022-10-07 9:41 ` Ludovic Courtès
2022-10-13 20:56 ` Fangrui Song
2022-10-29 1:45 ` Carlos O'Donell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).