diff --git a/src/bele.h b/src/bele.h index 5c7c1b64..3a2fd86f 100644 --- a/src/bele.h +++ b/src/bele.h @@ -187,18 +187,16 @@ inline int sign_extend(unsigned v, unsigned bits) { const unsigned sign_bit = 1u << (bits - 1); v &= sign_bit | (sign_bit - 1); - //v = (v ^ sign_bit) - sign_bit; v |= 0 - (v & sign_bit); - return (int) v; + return ACC_ICAST(int, v); } inline upx_int64_t sign_extend(upx_uint64_t v, unsigned bits) { const upx_uint64_t sign_bit = UPX_UINT64_C(1) << (bits - 1); v &= sign_bit | (sign_bit - 1); - //v = (v ^ sign_bit) - sign_bit; v |= 0 - (v & sign_bit); - return (upx_int64_t) v; + return ACC_ICAST(upx_int64_t, v); } inline int get_be16_signed(const void *p) @@ -282,12 +280,12 @@ inline unsigned acc_swap32p(const upx_uint32_t *p) inline void acc_swab16s(upx_uint16_t *p) { - *p = (upx_uint16_t) acc_swab16(*p); + *p = ACC_ICONV(upx_uint16_t, acc_swab16(*p)); } inline void acc_swab32s(upx_uint32_t *p) { - *p = (upx_uint32_t) acc_swab32(*p); + *p = ACC_ICONV(upx_uint32_t, acc_swab32(*p)); } @@ -486,15 +484,12 @@ template T* operator - (T* ptr, const LE64& v); // global overloads **************************************************************************/ -#if 1 && !defined(ALIGN_DOWN) inline unsigned ALIGN_DOWN(unsigned a, const LE32& b) { return ALIGN_DOWN(a, (unsigned) b); } inline unsigned ALIGN_DOWN(const LE32& a, unsigned b) { return ALIGN_DOWN((unsigned) a, b); } inline unsigned ALIGN_UP (unsigned a, const LE32& b) { return ALIGN_UP (a, (unsigned) b); } inline unsigned ALIGN_UP (const LE32& a, unsigned b) { return ALIGN_UP ((unsigned) a, b); } -#endif -#if !defined(UPX_MAX) inline unsigned UPX_MAX(unsigned a, const BE16& b) { return UPX_MAX(a, (unsigned) b); } inline unsigned UPX_MAX(const BE16& a, unsigned b) { return UPX_MAX((unsigned) a, b); } inline unsigned UPX_MIN(unsigned a, const BE16& b) { return UPX_MIN(a, (unsigned) b); } @@ -514,7 +509,6 @@ inline unsigned UPX_MAX(unsigned a, const LE32& b) { return UPX_MAX(a, (unsig inline unsigned UPX_MAX(const LE32& a, unsigned b) { return UPX_MAX((unsigned) a, b); } inline unsigned UPX_MIN(unsigned a, const LE32& b) { return UPX_MIN(a, (unsigned) b); } inline unsigned UPX_MIN(const LE32& a, unsigned b) { return UPX_MIN((unsigned) a, b); } -#endif /************************************************************************* diff --git a/src/compress_lzma.cpp b/src/compress_lzma.cpp index 79b691e0..2f275e4e 100644 --- a/src/compress_lzma.cpp +++ b/src/compress_lzma.cpp @@ -424,7 +424,8 @@ STDMETHODIMP ProgressInfo::SetRatioInfo(const UInt64 *inSize, const UInt64 *outS #if (ACC_CC_INTELC_GNUC) -# pragma warning(disable: 424) // #424: extra ";" ignored +//# pragma warning(disable: 424) // #424: extra ";" ignored +# pragma warning(error: 424) // #424: extra ";" ignored #endif #if (WITH_LZMA >= 0x449) @@ -530,8 +531,8 @@ int upx_lzma_compress ( const upx_bytep src, unsigned src_len, os.b_pos = 0; // extra stuff in first byte: 5 high bits convenience for stub decompressor unsigned t = res->lit_context_bits + res->lit_pos_bits; - os.WriteByte((t << 3) | res->pos_bits); - os.WriteByte((res->lit_pos_bits << 4) | (res->lit_context_bits)); + os.WriteByte(Byte((t << 3) | res->pos_bits)); + os.WriteByte(Byte((res->lit_pos_bits << 4) | (res->lit_context_bits))); #endif rh = enc.Code(&is, &os, NULL, NULL, &progress); diff --git a/src/conf.h b/src/conf.h index 099ccda9..6cbff67e 100644 --- a/src/conf.h +++ b/src/conf.h @@ -41,7 +41,10 @@ #endif #include "miniacc.h" #if !(ACC_CC_CLANG || ACC_CC_GNUC) -# error "only clang and gcc are officially supported" + // other compilers may work, but we're NOT interested into supporting them +#endif +#if !defined(UINT_MAX) || (UINT_MAX != 0xffffffffL) +# error "UINT_MAX" #endif // FIXME - quick hack for arm-wince-gcc-3.4 (Debian pocketpc-*.deb packages) @@ -81,6 +84,9 @@ typedef acc_uintptr_t upx_uintptr_t; #define UPX_INT64_C ACC_INT64_C #define UPX_UINT64_C ACC_UINT64_C +#define upx_byte unsigned char +#define upx_bytep upx_byte * + /************************************************************************* // @@ -132,12 +138,6 @@ typedef acc_uintptr_t upx_uintptr_t; # undef ucl_compress_config_t # undef ucl_compress_config_p #endif -#if !defined(UINT_MAX) || (UINT_MAX < 0xffffffffL) -# error "UINT_MAX" -#endif - -#define upx_byte unsigned char -#define upx_bytep upx_byte * /************************************************************************* @@ -245,25 +245,15 @@ typedef acc_uintptr_t upx_uintptr_t; #endif -#if (ACC_CC_CLANG || ACC_CC_GNUC || (ACC_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) || ACC_CC_PATHSCALE) -# define __packed_struct(s) struct s { -# define __packed_struct_end() } __attribute__((__packed__,__aligned__(1))); -#elif (ACC_CC_WATCOMC) -# define __packed_struct(s) _Packed struct s { -# define __packed_struct_end() }; -#endif -#if !defined(__packed_struct) -# define __packed_struct(s) struct s { -# define __packed_struct_end() }; -#endif - - /************************************************************************* // **************************************************************************/ -#define UNUSED(var) ACC_UNUSED(var) -#define COMPILE_TIME_ASSERT(e) ACC_COMPILE_TIME_ASSERT(e) +#define __packed_struct(s) __acc_struct_packed(s) +#define __packed_struct_end() __acc_struct_packed_end() + +#define UNUSED(var) ACC_UNUSED(var) +#define COMPILE_TIME_ASSERT(e) ACC_COMPILE_TIME_ASSERT(e) #define __COMPILE_TIME_ASSERT_ALIGNOF_SIZEOF(a,b) { \ typedef a acc_tmp_a_t; typedef b acc_tmp_b_t; \ @@ -503,10 +493,10 @@ struct OptVar // optional assignments -template inline void oassign(T& self, const T& other) { +template inline void oassign(T &self, const T &other) { if (other.is_set) { self.v = other.v; self.is_set += 1; } } -template inline void oassign(unsigned& v, const T& other) { +template inline void oassign(unsigned &v, const T &other) { if (other.is_set) { v = other.v; } } @@ -514,7 +504,7 @@ template inline void oassign(unsigned& v, const T& other) { struct lzma_compress_config_t { typedef OptVar pos_bits_t; // pb - typedef OptVar lit_pos_bits_t; // lb + typedef OptVar lit_pos_bits_t; // lp typedef OptVar lit_context_bits_t; // lc typedef OptVar dict_size_t; typedef OptVar num_fast_bytes_t; diff --git a/src/except.h b/src/except.h index db0b0b2f..28c75ad3 100644 --- a/src/except.h +++ b/src/except.h @@ -200,8 +200,7 @@ public: **************************************************************************/ #undef NORET -#if 0 && defined(__GNUC__) -// (noreturn) is probably not the correct semantics for throwing exceptions +#if 1 && defined(__GNUC__) #define NORET __attribute__((__noreturn__)) #else #define NORET /*empty*/ diff --git a/src/linker.cpp b/src/linker.cpp index 9160d7fb..9fcb5c98 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -313,7 +313,7 @@ void ElfLinker::preprocessRelocations(char *start, char *end) assert(add == ull); assert(endptr && *endptr == '\0'); if (sign == '-') - add = -add; + add = 0 - add; } addRelocation(section->name, offset, t, symbol, add); diff --git a/src/p_w32pe.cpp b/src/p_w32pe.cpp index 6cd791cf..25621d8d 100644 --- a/src/p_w32pe.cpp +++ b/src/p_w32pe.cpp @@ -222,18 +222,18 @@ void PackW32Pe::defineSymbols(unsigned ncsection, unsigned upxsection, linker->defineSymbol("vp_size", ((addr & 0xfff) + 0x28 >= 0x1000) ? 0x2000 : 0x1000); // 2 pages or 1 page linker->defineSymbol("vp_base", addr &~ 0xfff); // page mask - linker->defineSymbol("VirtualProtect", -rvamin + + linker->defineSymbol("VirtualProtect", 0u-rvamin + ilinkerGetAddress("kernel32.dll", "VirtualProtect")); } linker->defineSymbol("reloc_delt", 0u - (unsigned) ih.imagebase - rvamin); linker->defineSymbol("start_of_relocs", crelocs); if (!isdll) - linker->defineSymbol("ExitProcess", -rvamin + + linker->defineSymbol("ExitProcess", 0u-rvamin + ilinkerGetAddress("kernel32.dll", "ExitProcess")); - linker->defineSymbol("GetProcAddress", -rvamin + + linker->defineSymbol("GetProcAddress", 0u-rvamin + ilinkerGetAddress("kernel32.dll", "GetProcAddress")); linker->defineSymbol("kernel32_ordinals", myimport); - linker->defineSymbol("LoadLibraryA", -rvamin + + linker->defineSymbol("LoadLibraryA", 0u-rvamin + ilinkerGetAddress("kernel32.dll", "LoadLibraryA")); linker->defineSymbol("start_of_imports", myimport); linker->defineSymbol("compressed_imports", cimports);