diff options
author | John-Mark Bell <jmb@netsurf-browser.org> | 2022-06-05 19:58:38 +0100 |
---|---|---|
committer | John-Mark Bell <jmb@netsurf-browser.org> | 2023-03-05 20:00:09 +0000 |
commit | 17154570d6c6f16dc031603728db07cae081ef18 (patch) | |
tree | ee3d08cdc4262492ec348e9df052a888855c9c75 | |
parent | c675a0029ddca4617c68d792bff5516ad5faf418 (diff) | |
download | toolchains-17154570d6c6f16dc031603728db07cae081ef18.tar.gz toolchains-17154570d6c6f16dc031603728db07cae081ef18.tar.bz2 |
Fix __standard_time()
Territory_ConvertDateAndTime modifies r0-r3. Previously, UnixLib
was only telling the compiler that r0 and r1 were modified. This
resulted in the register allocator assuming that the value of r2
on exit was the same as it was on entry and thus returning a
completely garbage value as the result of __standard_time().
Resolve this by telling the compiler the full facts.
-rw-r--r-- | arm-riscos-gnueabihf/recipes/patches/gccsdk/unixlib-stdtime.p | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/arm-riscos-gnueabihf/recipes/patches/gccsdk/unixlib-stdtime.p b/arm-riscos-gnueabihf/recipes/patches/gccsdk/unixlib-stdtime.p new file mode 100644 index 0000000..fcdc7f3 --- /dev/null +++ b/arm-riscos-gnueabihf/recipes/patches/gccsdk/unixlib-stdtime.p @@ -0,0 +1,26 @@ +Index: libunixlib/time/stdtime.c +=================================================================== +--- libunixlib/time/stdtime.c (revision 7698) ++++ libunixlib/time/stdtime.c (working copy) +@@ -23,9 +23,11 @@ + register const char *str __asm ("r4") = __str; + register const _kernel_oserror *err __asm ("r0"); + register char *term __asm ("r1"); ++ register size_t left __asm ("r2"); ++ register const char *ostr __asm ("r3"); + __asm__ volatile ("SWI\t%[SWI_Territory_ConvertDateAndTime]\n\t" + "MOVVC\tr0, #0\n\t" +- : "=r" (err), "=r" (term) ++ : "=r" (err), "=r" (term), "=r" (left), "=r" (ostr) + : "r" (territory), "r" (ro_time), "r" (buf), "r" (size), "r" (str), + [SWI_Territory_ConvertDateAndTime] "i" (Territory_ConvertDateAndTime | (1<<17)) + : "r14", "cc", "memory"); +@@ -48,7 +50,7 @@ + #ifdef __TARGET_SCL__ + -1, + #else +- __locale_territory[LC_TIME], ++ __locale_global.locale_territory[LC_TIME], + #endif + riscos_time, + result, |