]> sourceware.org Git - newlib-cygwin.git/commitdiff
libgloss: Fix lseek semihosting bug on nios2 and m68k
authorSandra Loosemore <sandra@codesourcery.com>
Wed, 5 Feb 2020 04:34:13 +0000 (21:34 -0700)
committerCorinna Vinschen <corinna@vinschen.de>
Thu, 6 Feb 2020 10:02:38 +0000 (11:02 +0100)
When off_t is 32 bits, the value needs to be sign-extended to 64 bits
before shifting right to extract the high-order word.  Previously
negative offsets were incorrectly encoded.

Signed-off-by: Sandra Loosemore <sandra@codesourcery.com>
libgloss/m68k/io-lseek.c
libgloss/nios2/io-lseek.c

index 63ec564515e5ad4cc87ee6913fbf74bd272d165d..eaaf55746f7d3f94e9d21c8562bcbcb8ba98c69e 100644 (file)
@@ -38,7 +38,7 @@ off_t lseek (int fd, off_t offset, int whence)
 #if HOSTED
   gdb_parambuf_t parameters;
   parameters[0] = (uint32_t) fd;
-  parameters[1] = (uint32_t) ((offset >> 32) & 0xffffffff);
+  parameters[1] = (uint32_t) ((int64_t)offset >> 32);
   parameters[2] = (uint32_t) (offset & 0xffffffff);
   parameters[3] = __hosted_to_gdb_lseek_flags (whence);
   __hosted (HOSTED_LSEEK, parameters);
index bfc23c1bc86708f86488b64c9d7f34ad80f70324..d47fe0798109a48c01f65a8d7f0a1cbdf329f66e 100644 (file)
@@ -39,7 +39,7 @@ off_t lseek (int fd, off_t offset, int whence)
 #if HOSTED
   gdb_parambuf_t parameters;
   parameters[0] = (uint32_t) fd;
-  parameters[1] = (uint32_t) ((offset >> 32) & 0xffffffff);
+  parameters[1] = (uint32_t) ((int64_t)offset >> 32);
   parameters[2] = (uint32_t) (offset & 0xffffffff);
   parameters[3] = __hosted_to_gdb_lseek_flags (whence);
   __io_hosted (HOSTED_LSEEK, parameters);
This page took 0.082728 seconds and 5 git commands to generate.