123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- From bb04c220d82598066eeadf49defaec1157d4d206 Mon Sep 17 00:00:00 2001
- From: Romain Naour <romain.naour@gmail.com>
- Date: Sat, 25 Jul 2020 11:46:01 +0200
- Subject: [PATCH] mips: Do not include hi and lo in clobber list for R6
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- From [1]
- "GCC 10 (PR 91233) won't silently allow registers that are not architecturally
- available to be present in the clobber list anymore, resulting in build failure
- for mips*r6 targets in form of:
- ...
- .../sysdep.h:146:2: error: the register ‘lo’ cannot be clobbered in ‘asm’ for the current target
- 146 | __asm__ volatile ( \
- | ^~~~~~~
- This is because base R6 ISA doesn't define hi and lo registers w/o DSP extension.
- This patch provides the alternative clobber list for r6 targets that won't include
- those registers."
- Since kernel 5.4 and mips support for generic vDSO [2], the kernel fail to build
- for mips r6 cpus with gcc 10 for the same reason as glibc.
- [1] https://sourceware.org/git/?p=glibc.git;a=commit;h=020b2a97bb15f807c0482f0faee2184ed05bcad8
- [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=24640f233b466051ad3a5d2786d2951e43026c9d
- Signed-off-by: Romain Naour <romain.naour@gmail.com>
- ---
- arch/mips/include/asm/vdso/gettimeofday.h | 45 +++++++++++++++++++++++
- 1 file changed, 45 insertions(+)
- diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h
- index 0ae9b4cbc153..ea600e0ebfe7 100644
- --- a/arch/mips/include/asm/vdso/gettimeofday.h
- +++ b/arch/mips/include/asm/vdso/gettimeofday.h
- @@ -36,12 +36,21 @@ static __always_inline long gettimeofday_fallback(
- register long nr asm("v0") = __NR_gettimeofday;
- register long error asm("a3");
-
- +#if MIPS_ISA_REV >= 6
- + asm volatile(
- + " syscall\n"
- + : "=r" (ret), "=r" (error)
- + : "r" (tv), "r" (tz), "r" (nr)
- + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- + "$14", "$15", "$24", "$25", "memory");
- +#else
- asm volatile(
- " syscall\n"
- : "=r" (ret), "=r" (error)
- : "r" (tv), "r" (tz), "r" (nr)
- : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- "$14", "$15", "$24", "$25", "hi", "lo", "memory");
- +#endif
-
- return error ? -ret : ret;
- }
- @@ -60,12 +69,21 @@ static __always_inline long clock_gettime_fallback(
- #endif
- register long error asm("a3");
-
- +#if MIPS_ISA_REV >= 6
- + asm volatile(
- + " syscall\n"
- + : "=r" (ret), "=r" (error)
- + : "r" (clkid), "r" (ts), "r" (nr)
- + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- + "$14", "$15", "$24", "$25", "memory");
- +#else
- asm volatile(
- " syscall\n"
- : "=r" (ret), "=r" (error)
- : "r" (clkid), "r" (ts), "r" (nr)
- : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- "$14", "$15", "$24", "$25", "hi", "lo", "memory");
- +#endif
-
- return error ? -ret : ret;
- }
- @@ -84,12 +102,21 @@ static __always_inline int clock_getres_fallback(
- #endif
- register long error asm("a3");
-
- +#if MIPS_ISA_REV >= 6
- + asm volatile(
- + " syscall\n"
- + : "=r" (ret), "=r" (error)
- + : "r" (clkid), "r" (ts), "r" (nr)
- + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- + "$14", "$15", "$24", "$25", "memory");
- +#else
- asm volatile(
- " syscall\n"
- : "=r" (ret), "=r" (error)
- : "r" (clkid), "r" (ts), "r" (nr)
- : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- "$14", "$15", "$24", "$25", "hi", "lo", "memory");
- +#endif
-
- return error ? -ret : ret;
- }
- @@ -108,12 +135,21 @@ static __always_inline long clock_gettime32_fallback(
- register long nr asm("v0") = __NR_clock_gettime;
- register long error asm("a3");
-
- +#if MIPS_ISA_REV >= 6
- + asm volatile(
- + " syscall\n"
- + : "=r" (ret), "=r" (error)
- + : "r" (clkid), "r" (ts), "r" (nr)
- + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- + "$14", "$15", "$24", "$25", "memory");
- +#else
- asm volatile(
- " syscall\n"
- : "=r" (ret), "=r" (error)
- : "r" (clkid), "r" (ts), "r" (nr)
- : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- "$14", "$15", "$24", "$25", "hi", "lo", "memory");
- +#endif
-
- return error ? -ret : ret;
- }
- @@ -128,12 +164,21 @@ static __always_inline int clock_getres32_fallback(
- register long nr asm("v0") = __NR_clock_getres;
- register long error asm("a3");
-
- +#if MIPS_ISA_REV >= 6
- + asm volatile(
- + " syscall\n"
- + : "=r" (ret), "=r" (error)
- + : "r" (clkid), "r" (ts), "r" (nr)
- + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- + "$14", "$15", "$24", "$25", "memory");
- +#else
- asm volatile(
- " syscall\n"
- : "=r" (ret), "=r" (error)
- : "r" (clkid), "r" (ts), "r" (nr)
- : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
- "$14", "$15", "$24", "$25", "hi", "lo", "memory");
- +#endif
-
- return error ? -ret : ret;
- }
- --
- 2.25.4
|