Hi Thirumalai,
can you check your patch again? It fails to apply for me against
current main. Hunk #1 seems to have a whitespace problem only, but hunk
#2 is suddenly missing the uxth opcode.
Also, would you mind to add a Fixes: tag?
Thanks,
Corinna
On Jan 8 08:30, Thirumalai Nagalingam wrote:
> Hi,
>
> This patch Update _endian.h so that it explicitly throws an error when
> encountering
> an unsupported architecture instead of returning the unmodified x.
> Also tighten the arch detection logic by adding an explicit LE check.
>
> Thanks & regards
> Thirumalai Nagalingam
>
> In-lined patch:
>
> diff --git a/winsup/cygwin/include/machine/_endian.h
> b/winsup/cygwin/include/machine/_endian.h
> index 681ae4abe..e591f375d 100644
> --- a/winsup/cygwin/include/machine/_endian.h
> +++ b/winsup/cygwin/include/machine/_endian.h
> @@ -28,8 +28,10 @@ __ntohl(__uint32_t _x)
> {
> #if defined(__x86_64__)
> __asm__("bswap %0" : "=r" (_x) : "0" (_x));
> -#elif defined(__aarch64__)
> +#elif defined(__aarch64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
> __asm__("rev %w0, %w0" : "=r" (_x) : "0" (_x));
> +#else
> +#error "unsupported architecture"
> #endif
> return _x;
> }
> @@ -41,10 +43,12 @@ __ntohs(__uint16_t _x)
> __asm__("xchgb %b0,%h0" /* swap bytes */
> : "=Q" (_x)
> : "0" (_x));
> -#elif defined(__aarch64__)
> +#elif defined(__aarch64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
> __asm__("\n\
> rev16 %0, %0 \n\
> " : "=r" (_x) : "0" (_x));
> +#else
> +#error "unsupported architecture"
> #endif
> return _x;
> }