diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/arch-arm/include/endian.h | 54 | ||||
-rw-r--r-- | libc/include/byteswap.h | 3 | ||||
-rw-r--r-- | libc/netbsd/gethnamaddr.c | 30 |
3 files changed, 42 insertions, 45 deletions
diff --git a/libc/arch-arm/include/endian.h b/libc/arch-arm/include/endian.h index e34872fcb..6de0889ef 100644 --- a/libc/arch-arm/include/endian.h +++ b/libc/arch-arm/include/endian.h @@ -33,14 +33,14 @@ #ifdef __GNUC__ -/* NOTE: header <machine/cpu-features.h> could not be included directly - * since it defines extra macros, such as PLD. +/* + * REV and REV16 weren't available on ARM5 or ARM4. + * We don't include <machine/cpu-features.h> because it pollutes the + * namespace with macros like PLD. */ -#if defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || \ - defined(__ARM_ARCH_7__) || \ - defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || \ - defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || \ - defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) +#if !defined __ARM_ARCH_5__ && !defined __ARM_ARCH_5T__ && \ + !defined __ARM_ARCH_5TE__ && !defined __ARM_ARCH_5TEJ__ && \ + !defined __ARM_ARCH_4T__ && !defined __ARM_ARCH_4__ /* According to RealView Assembler User's Guide, REV and REV16 are available * in Thumb code and 16-bit instructions when used in Thumb-2 code. @@ -50,44 +50,40 @@ * * REV16 Rd, Rm * Rd and Rm must both be Lo registers. + * + * The +l constraint takes care of this without constraining us in ARM mode. */ -#ifdef __thumb__ -#define REV_LO_REG asm("r4") -#else -#define REV_LO_REG -#endif - -#define __swap16md(x) ({ \ - register u_int16_t _x REV_LO_REG = (x); \ - __asm volatile ("rev16 %0, %0" : "+r" (_x)); \ - _x; \ +#define __swap16md(x) ({ \ + register u_int16_t _x = (x); \ + __asm volatile ("rev16 %0, %0" : "+l" (_x)); \ + _x; \ }) -#define __swap32md(x) ({ \ - register u_int32_t _x REV_LO_REG = (x); \ - __asm volatile ("rev %0, %0" : "+r" (_x)); \ - _x; \ +#define __swap32md(x) ({ \ + register u_int32_t _x = (x); \ + __asm volatile ("rev %0, %0" : "+l" (_x)); \ + _x; \ }) -#define __swap64md(x) ({ \ - u_int64_t _x = (x); \ - (u_int64_t) __swap32md(_x >> 32) | \ - (u_int64_t) __swap32md(_x & 0xffffffff) << 32; \ +#define __swap64md(x) ({ \ + u_int64_t _swap64md_x = (x); \ + (u_int64_t) __swap32md(_swap64md_x >> 32) | \ + (u_int64_t) __swap32md(_swap64md_x & 0xffffffff) << 32; \ }) /* Tell sys/endian.h we have MD variants of the swap macros. */ #define MD_SWAP -#endif /* __ARM_ARCH__ */ -#endif /* __GNUC__ */ +#endif /* __ARM_ARCH__ */ +#endif /* __GNUC__ */ #ifdef __ARMEB__ #define _BYTE_ORDER _BIG_ENDIAN #else #define _BYTE_ORDER _LITTLE_ENDIAN #endif -#define __STRICT_ALIGNMENT +#define __STRICT_ALIGNMENT #include <sys/types.h> #include <sys/endian.h> -#endif /* !_ARM_ENDIAN_H_ */ +#endif /* !_ARM_ENDIAN_H_ */ diff --git a/libc/include/byteswap.h b/libc/include/byteswap.h index 16d2ad4f9..74b0e9180 100644 --- a/libc/include/byteswap.h +++ b/libc/include/byteswap.h @@ -28,7 +28,8 @@ #ifndef _BYTESWAP_H_ #define _BYTESWAP_H_ -#include <sys/endian.h> +/* endian.h rather than sys/endian.h so we get the machine-specific file. */ +#include <endian.h> #define bswap_16(x) swap16(x) #define bswap_32(x) swap32(x) diff --git a/libc/netbsd/gethnamaddr.c b/libc/netbsd/gethnamaddr.c index 1c219b2a2..3ebe53e2c 100644 --- a/libc/netbsd/gethnamaddr.c +++ b/libc/netbsd/gethnamaddr.c @@ -104,9 +104,9 @@ static void map_v4v6_address(const char *, char *); static void map_v4v6_hostent(struct hostent *, char **, char *); static void addrsort(char **, int, res_state); -void _sethtent(int); -void _endhtent(void); -struct hostent *_gethtent(void); +static void _sethtent(int); +static void _endhtent(void); +static struct hostent *_gethtent(void); void ht_sethostent(int); void ht_endhostent(void); struct hostent *ht_gethostbyname(char *); @@ -114,11 +114,11 @@ struct hostent *ht_gethostbyaddr(const char *, int, int); void dns_service(void); #undef dn_skipname int dn_skipname(const u_char *, const u_char *); -int _gethtbyaddr(void *, void *, va_list); -int _gethtbyname(void *, void *, va_list); -struct hostent *_gethtbyname2(const char *, int); -int _dns_gethtbyaddr(void *, void *, va_list); -int _dns_gethtbyname(void *, void *, va_list); +static int _gethtbyaddr(void *, void *, va_list); +static int _gethtbyname(void *, void *, va_list); +static struct hostent *_gethtbyname2(const char *, int); +static int _dns_gethtbyaddr(void *, void *, va_list); +static int _dns_gethtbyname(void *, void *, va_list); static struct hostent *gethostbyname_internal(const char *, int, res_state); @@ -692,7 +692,7 @@ gethostbyaddr(const char *addr, /* XXX should have been def'd as u_char! */ return hp; } -void +static void _sethtent(int f) { res_static rs = __res_get_static(); @@ -704,7 +704,7 @@ _sethtent(int f) rs->stayopen = f; } -void +static void _endhtent(void) { res_static rs = __res_get_static(); @@ -716,7 +716,7 @@ _endhtent(void) } } -struct hostent * +static struct hostent * _gethtent(void) { char *p; @@ -829,7 +829,7 @@ _gethtbyname(void *rv, void *cb_data, va_list ap) return NS_SUCCESS; } -struct hostent * +static struct hostent * _gethtbyname2(const char *name, int af) { struct hostent *p; @@ -920,7 +920,7 @@ _gethtbyname2(const char *name, int af) } /*ARGSUSED*/ -int +static int _gethtbyaddr(void *rv, void *cb_data, va_list ap) { struct hostent *p; @@ -1053,7 +1053,7 @@ gethostent(void) } /*ARGSUSED*/ -int +static int _dns_gethtbyname(void *rv, void *cb_data, va_list ap) { querybuf *buf; @@ -1113,7 +1113,7 @@ _dns_gethtbyname(void *rv, void *cb_data, va_list ap) } /*ARGSUSED*/ -int +static int _dns_gethtbyaddr(void *rv, void *cb_data, va_list ap) { char qbuf[MAXDNAME + 1], *qp, *ep; |