This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [committed, PATCH] BZ #18409: Remove a trailing `\' in make-syscalls.sh
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Thu, 14 May 2015 15:03:26 -0300
- Subject: Re: [committed, PATCH] BZ #18409: Remove a trailing `\' in make-syscalls.sh
- Authentication-results: sourceware.org; auth=none
- References: <CAMe9rOoRSZwvvkZQJQp=n_VqkgoDj=X8sK6v+BFXBFLfCpq2Jg at mail dot gmail dot com> <5553A664 dot 8090904 at linaro dot org> <CAMe9rOq1nieEWJrR-oed_yX_jtOa9vWHgAWs+AbyJbBW0zgWZw at mail dot gmail dot com>
On 13-05-2015 16:34, H.J. Lu wrote:
> On Wed, May 13, 2015 at 12:30 PM, Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>> Hi
>>
>> On 13-05-2015 13:20, H.J. Lu wrote:
>>> commit c14874927b499ddfdbb03745bb32bfc778b8595f
>>> Author: Roland McGrath <roland@hack.frob.com>
>>> Date: Tue May 22 16:00:50 2012 -0700
>>>
>>> syscalls.list support for vDSO IFUNCs, use it for x32 gettimeofday and time.
>>>
>>> added
>>>
>>> \$(foreach p,\$(sysd-rules-targets),\$(objpfx)\$(patsubst %,\$p,$file).os): \\
>>> \$(..)sysdeps/unix/make-syscalls.sh\
>>> \$(make-target-directory)
>>>
>>> to sysdeps/unix/make-syscalls.sh which generates
>>>
>>> #### CALL=gettimeofday NUMBER=(0x40000000 + 96) ARGS=i:pP SOURCE=-
>>> ifeq (,$(filter gettimeofday,$(unix-syscalls)))
>>> unix-syscalls += gettimeofday
>>> $(foreach p,$(sysd-rules-targets),$(foreach
>>> o,$(object-suffixes-noshared),$(objpfx)$(patsubst
>>> %,$p,gettimeofday)$o)): \
>>> $(..)sysdeps/unix/make-syscalls.sh
>>> $(make-target-directory)
>>> (echo '#define SYSCALL_NAME gettimeofday'; \
>>> echo '#define SYSCALL_NARGS 2'; \
>>> echo '#define SYSCALL_SYMBOL __gettimeofday'; \
>>> echo '#include <syscall-template.S>'; \
>>> echo 'weak_alias (__gettimeofday, gettimeofday)'; \
>>> echo 'libc_hidden_weak (gettimeofday)'; \
>>> ) | $(compile-syscall) $(foreach p,$(patsubst
>>> %gettimeofday,%,$(basename $(@F))),$($(p)CPPFLAGS))
>>> $(foreach p,$(sysd-rules-targets),$(objpfx)$(patsubst %,$p,gettimeofday).os): \
>>> $(..)sysdeps/unix/make-syscalls.sh $(make-target-directory)
>>> ^^^^^^^^^ Missing newline
>>> (echo '#include <dl-vdso.h>'; \
>>> echo 'extern void *__gettimeofday_ifunc (void) __asm
>>> ("__gettimeofday");'; \
>>> echo 'void *'; \
>>> echo '__gettimeofday_ifunc (void)'; \
>>> echo '{'; \
>>> echo ' PREPARE_VERSION_KNOWN (symver, LINUX_2_6);'; \
>>> echo ' return _dl_vdso_vsym ("__vdso_gettimeofday", &symver);'; \
>>> echo '}'; \
>>> echo 'asm (".type __gettimeofday, %gnu_indirect_function");'; \
>>> echo 'asm (".globl __GI___gettimeofday\n"'; \
>>> echo ' "__GI___gettimeofday = __gettimeofday");'; \
>>> echo 'weak_alias (__gettimeofday, gettimeofday)'; \
>>> echo 'libc_hidden_weak (gettimeofday)'; \
>>> ) | $(compile-stdin.c) $(foreach p,$(patsubst
>>> %gettimeofday,%,$(basename $(@F))),$($(p)CPPFLAGS))
>>> endif
>>>
>>> This only affected x32. I checked in this patch after tested on
>>> x32.
>>>
>>> Adhemerval, can you check if your problem with dash in
>>>
>>> https://sourceware.org/ml/libc-alpha/2015-04/msg00277.html
>>>
>>> is fixed by this?
>>>
>>> Thanks.
>>
>> I have been testing another more complete fix pointed out by Joseph [1]
>> and it fixes the x32 build with dash issue I was seeing. Shouldn't we
>> push this one?
>>
>> [1] https://sourceware.org/ml/libc-alpha/2015-02/msg00396.html
>
> Well, this part is the same as the one I checked in:
>
> \$(foreach p,\$(sysd-rules-targets),\$(objpfx)\$(patsubst %,\$p,$file).os): \\
> - \$(..)sysdeps/unix/make-syscalls.sh\
> + \$(..)sysdeps/unix/make-syscalls.sh
>
> At minimum, that patch should be rebased.
>
What about:
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index 910a22c..12f664e 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -272,28 +272,33 @@ while read file srcfile caller syscall args strong weak; do
vdso_symbol="${vdso_syscall%@*}"
vdso_symver="${vdso_syscall#*@}"
vdso_symver=`echo "$vdso_symver" | sed 's/\./_/g'`
- echo "\
+ cat <<EOF
+
\$(foreach p,\$(sysd-rules-targets),\$(objpfx)\$(patsubst %,\$p,$file).os): \\
\$(..)sysdeps/unix/make-syscalls.sh
\$(make-target-directory)
(echo '#include <dl-vdso.h>'; \\
- echo 'extern void *${strong}_ifunc (void) __asm (\"${strong}\");'; \\
+ echo 'extern void *${strong}_ifunc (void) __asm ("${strong}");'; \\
echo 'void *'; \\
echo '${strong}_ifunc (void)'; \\
echo '{'; \\
echo ' PREPARE_VERSION_KNOWN (symver, ${vdso_symver});'; \\
- echo ' return _dl_vdso_vsym (\"${vdso_symbol}\", &symver);'; \\
+ echo ' return _dl_vdso_vsym ("${vdso_symbol}", &symver);'; \\
echo '}'; \\
- echo 'asm (\".type ${strong}, %gnu_indirect_function\");'; \\"
+ echo 'asm (".type ${strong}, %gnu_indirect_function");'; \\
+EOF
# This is doing "libc_hidden_def (${strong})", but the compiler
# doesn't know that we've defined ${strong} in the same file, so
# we can't do it the normal way.
- echo "\
- echo 'asm (\".globl __GI_${strong}\\n\"'; \\
- echo ' \"__GI_${strong} = ${strong}\");'; \\"
+ cat <<EOF
+ echo 'asm (".globl __GI_${strong}");'; \\
+ echo 'asm ("__GI_${strong} = ${strong}");'; \\
+EOF
emit_weak_aliases
- echo ' ) | $(compile-stdin.c) '"\
-\$(foreach p,\$(patsubst %$file,%,\$(basename \$(@F))),\$(\$(p)CPPFLAGS))"
+ cat <<EOF
+ ) | \$(compile-stdin.c) \
+\$(foreach p,\$(patsubst %$file,%,\$(basename \$(@F))),\$(\$(p)CPPFLAGS))
+EOF
fi
if test $shared_only = t; then
I checked builds for x86_64, i386, x32, and aarch64 for both dash and bash.