On NetBSD int8_t and friends are preprocessor macros expanding to __int8_t (which is a typedef provided by machine dependent headers).
include/exec/softmmu_template.h tries to safe 3 lines of code by using preprosseor concatenation, which only will work if int8_t is not a define, or defined to int8_t. The attached patch fixes this. Martin
Do not rely on int8_t (and friends) not being preprocessor symbols (or symbols expanding to themselves). On NetBSD (for example) the glue(u, SDATA_TYPE) results in u__int8_t, which is undefined. There is no way to stop cpp expanding inner macros, so just add the few lines explicitly and get rid of the magic. --- include/exec/softmmu_template.h.orig 2013-11-27 23:15:55.000000000 +0100 +++ include/exec/softmmu_template.h 2013-12-16 20:57:50.000000000 +0100 @@ -30,23 +30,26 @@ #define SUFFIX q #define LSUFFIX q #define SDATA_TYPE int64_t +#define DATA_TYPE uint64_t #elif DATA_SIZE == 4 #define SUFFIX l #define LSUFFIX l #define SDATA_TYPE int32_t +#define DATA_TYPE uint32_t #elif DATA_SIZE == 2 #define SUFFIX w #define LSUFFIX uw #define SDATA_TYPE int16_t +#define DATA_TYPE uint16_t #elif DATA_SIZE == 1 #define SUFFIX b #define LSUFFIX ub #define SDATA_TYPE int8_t +#define DATA_TYPE uint8_t #else #error unsupported data size #endif -#define DATA_TYPE glue(u, SDATA_TYPE) /* For the benefit of TCG generated code, we want to avoid the complication of ABI-specific return type promotion and always return a value extended