On 9/19/26 19:20, Warner Losh wrote:
From: Rick Richard <[email protected]>

TARGET_BIG_ENDIAN and HOST_BIG_ENDIAN are always defined.

lseek and target_offset64() transpose upper and lower halves
on 32-bit ABIs, -strace prints wrong off_t.

Signed-off-by: Rick Richard <[email protected]>
[ fixed defined() too ]
Reviewed-by: Warner Losh <[email protected]>
Signed-off-by: Warner Losh <[email protected]>
---
  bsd-user/bsd-file.h          | 2 +-
  bsd-user/freebsd/os-misc.h   | 2 +-
  bsd-user/freebsd/os-thread.h | 2 +-
  3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/bsd-user/bsd-file.h b/bsd-user/bsd-file.h
index 0fefc07232..a2c2e38e50 100644
--- a/bsd-user/bsd-file.h
+++ b/bsd-user/bsd-file.h
@@ -986,7 +986,7 @@ static abi_long do_bsd_lseek(CPUArchState *env, abi_long 
arg1, abi_long arg2,
          ret = get_errno(res);
          set_second_rval(env, 0xFFFFFFFF);
      } else {
-#ifdef TARGET_BIG_ENDIAN
+#if TARGET_BIG_ENDIAN
          ret = ((res >> 32) & 0xFFFFFFFF);
          set_second_rval(env, res & 0xFFFFFFFF);
  #else
diff --git a/bsd-user/freebsd/os-misc.h b/bsd-user/freebsd/os-misc.h
index 0f87b21cc8..e9f9eed4b4 100644
--- a/bsd-user/freebsd/os-misc.h
+++ b/bsd-user/freebsd/os-misc.h
@@ -336,7 +336,7 @@ static inline abi_long do_freebsd_kldsym(abi_long fileid, 
abi_long cmd,
  #if TARGET_ABI_BITS == 32
  static inline uint64_t target_offset64(uint32_t word0, uint32_t word1)
  {
-#ifdef TARGET_BIG_ENDIAN
+#if TARGET_BIG_ENDIAN
      return ((uint64_t)word0 << 32) | word1;
  #else
      return ((uint64_t)word1 << 32) | word0;

These first two should be converted to C if's.

r~


diff --git a/bsd-user/freebsd/os-thread.h b/bsd-user/freebsd/os-thread.h
index 4258b24095..6552c60337 100644
--- a/bsd-user/freebsd/os-thread.h
+++ b/bsd-user/freebsd/os-thread.h
@@ -18,7 +18,7 @@
  int safe_thr_suspend(struct timespec *timeout);
  int safe__umtx_op(void *, int, unsigned long, void *, void *);
-#if defined(HOST_BIG_ENDIAN) == defined(TARGET_BIG_ENDIAN) && \
+#if HOST_BIG_ENDIAN == TARGET_BIG_ENDIAN && \
      (TARGET_ABI_BITS == HOST_LONG_BITS || defined(UMTX_OP__32BIT))
  #define _UMTX_OPTIMIZED
  #if defined(TARGET_ABI32)



Reply via email to