Support building with OpenWatcom 1.8. Silence some compiler warnings.

This commit is contained in:
Markus F.X.J. Oberhumer
2008-12-31 16:56:38 +01:00
parent 063bd58802
commit 25f1765f36
27 changed files with 219 additions and 257 deletions
+18 -36
View File
@@ -282,12 +282,12 @@ inline unsigned acc_swap32p(const acc_uint32e_t *p)
inline void acc_swab16s(acc_uint16e_t *p)
{
*p = acc_swab16(*p);
*p = (acc_uint16e_t) acc_swab16(*p);
}
inline void acc_swab32s(acc_uint32e_t *p)
{
*p = acc_swab32(*p);
*p = (acc_uint32e_t) acc_swab32(*p);
}
@@ -313,8 +313,7 @@ inline void acc_ua_swab32s(void *p)
// to have gcc bug 17519 fixed - see http://gcc.gnu.org/PR17519 ]
**************************************************************************/
struct BE16
{
__packed_struct(BE16)
unsigned char d[2];
//inline BE16() { }
@@ -332,12 +331,10 @@ struct BE16
BE16& operator >>= (unsigned v) { set_be16(d, get_be16(d) >> v); return *this; }
operator unsigned () const { return get_be16(d); }
}
__attribute_packed;
__packed_struct_end()
struct BE32
{
__packed_struct(BE32)
unsigned char d[4];
//inline BE32() { }
@@ -355,12 +352,10 @@ struct BE32
BE32& operator >>= (unsigned v) { set_be32(d, get_be32(d) >> v); return *this; }
operator unsigned () const { return get_be32(d); }
}
__attribute_packed;
__packed_struct_end()
struct BE64
{
__packed_struct(BE64)
unsigned char d[8];
//inline BE64() { }
@@ -378,12 +373,10 @@ struct BE64
BE64& operator >>= (unsigned v) { set_be64(d, get_be64(d) >> v); return *this; }
operator acc_uint64l_t () const { return get_be64(d); }
}
__attribute_packed;
__packed_struct_end()
struct LE16
{
__packed_struct(LE16)
unsigned char d[2];
//inline LE16() { }
@@ -401,12 +394,10 @@ struct LE16
LE16& operator >>= (unsigned v) { set_le16(d, get_le16(d) >> v); return *this; }
operator unsigned () const { return get_le16(d); }
}
__attribute_packed;
__packed_struct_end()
struct LE32
{
__packed_struct(LE32)
unsigned char d[4];
//inline LE32() { }
@@ -424,12 +415,10 @@ struct LE32
LE32& operator >>= (unsigned v) { set_le32(d, get_le32(d) >> v); return *this; }
operator unsigned () const { return get_le32(d); }
}
__attribute_packed;
__packed_struct_end()
struct LE64
{
__packed_struct(LE64)
unsigned char d[8];
//inline LE64() { }
@@ -447,8 +436,7 @@ struct LE64
LE64& operator >>= (unsigned v) { set_le64(d, get_le64(d) >> v); return *this; }
operator acc_uint64l_t () const { return get_le64(d); }
}
__attribute_packed;
__packed_struct_end()
/*************************************************************************
@@ -623,16 +611,10 @@ namespace N_BELE_RTP {
}
namespace N_BELE_CTP {
template <class T>
inline const N_BELE_RTP::AbstractPolicy* getRTP();
template <>
inline const N_BELE_RTP::AbstractPolicy* getRTP<BEPolicy>()
{ return &N_BELE_RTP::be_policy; }
template <>
inline const N_BELE_RTP::AbstractPolicy* getRTP<LEPolicy>()
{ return &N_BELE_RTP::le_policy; }
inline const N_BELE_RTP::AbstractPolicy* getRTP(const BEPolicy*)
{ return &N_BELE_RTP::be_policy; }
inline const N_BELE_RTP::AbstractPolicy* getRTP(const LEPolicy*)
{ return &N_BELE_RTP::le_policy; }
}
+1 -1
View File
@@ -85,7 +85,7 @@ static int convert_errno_from_ucl(int r)
extern "C" {
static void wrap_nprogress_ucl(ucl_uint a, ucl_uint b, int state, ucl_voidp user)
static void __UCL_CDECL wrap_nprogress_ucl(ucl_uint a, ucl_uint b, int state, ucl_voidp user)
{
if (state != -1 && state != 3) return;
upx_callback_p cb = (upx_callback_p) user;
+23 -7
View File
@@ -111,6 +111,9 @@
# error "need Watcom C++ 11.0c or newer"
# endif
# if defined(__cplusplus)
# pragma warning 367 9 // w3: conditional expression in if statement is always true
# pragma warning 368 9 // w3: conditional expression in if statement is always false
# pragma warning 389 9 // w3: integral value may be truncated
# pragma warning 656 9 // w5: define this function inside its class definition (may improve code quality)
# endif
#endif
@@ -160,6 +163,9 @@
#if 0 && !defined(WITH_LZMA)
# define WITH_LZMA 1
#endif
#if 1 && (ACC_CC_WATCOMC)
# undef WITH_LZMA
#endif
#if defined(UPX_OFFICIAL_BUILD)
# if !defined(WITH_LZMA) || !defined(WITH_NRV) || !defined(WITH_UCL)
# error
@@ -302,16 +308,25 @@
#undef __attribute_packed
#if (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE)
# if (ACC_ARCH_I386) && (ACC_CC_INTELC && (__INTEL_COMPILER < 800))
# elif (0 && (ACC_ARCH_AMD64 || ACC_ARCH_I386))
# else
# define __attribute_packed __attribute__((__packed__,__aligned__(1)))
# endif
#if (ACC_CC_INTELC && (__INTEL_COMPILER < 800))
#elif (0 && (ACC_ARCH_AMD64 || ACC_ARCH_I386))
#elif (ACC_CC_GNUC || ACC_CC_INTELC || ACC_CC_PATHSCALE)
# define __attribute_packed __attribute__((__packed__,__aligned__(1)))
# define __packed_struct(s) struct s {
# define __packed_struct_end() } __attribute_packed;
#elif (ACC_CC_WATCOMC)
# define __attribute_packed
# define __packed_struct(s) _Packed struct s {
# define __packed_struct_end() };
#endif
#if !defined(__attribute_packed)
# define __attribute_packed
#endif
#if !defined(__packed_struct)
# define __packed_struct(s) struct s {
# define __packed_struct_end() };
#endif
/*************************************************************************
@@ -323,8 +338,9 @@
#define __COMPILE_TIME_ASSERT_ALIGNOF_SIZEOF(a,b) { \
typedef a acc_tmp_a_t; typedef b acc_tmp_b_t; \
struct acc_tmp_t { acc_tmp_b_t x; acc_tmp_a_t y; acc_tmp_b_t z; } __attribute_packed; \
__packed_struct(acc_tmp_t) acc_tmp_b_t x; acc_tmp_a_t y; acc_tmp_b_t z; __packed_struct_end() \
COMPILE_TIME_ASSERT(sizeof(struct acc_tmp_t) == 2*sizeof(b)+sizeof(a)) \
COMPILE_TIME_ASSERT(sizeof(((acc_tmp_t*)0)->x)+sizeof(((acc_tmp_t*)0)->y)+sizeof(((acc_tmp_t*)0)->z) == 2*sizeof(b)+sizeof(a)) \
}
#if defined(__acc_alignof)
# define __COMPILE_TIME_ASSERT_ALIGNOF(a,b) \
+9 -6
View File
@@ -47,7 +47,7 @@ static int F(Filter *f)
// scan
const upx_byte *b = f->buf;
#endif
const unsigned size = umin(f->buf_len, -(~0u<<(32 - (6+ W_CTO))));
const unsigned size = umin(f->buf_len, 0u - (~0u<<(32 - (6+ W_CTO))));
const unsigned size4 = size -4;
unsigned ic;
@@ -72,9 +72,11 @@ static int F(Filter *f)
}
if (getcto(f, buf) < 0) {
if (0!=W_CTO) // FIXME: what is this ???
return -1;
#if (W_CTO != 0)
return -1;
#else
f->cto = 0;
#endif
}
}
const unsigned char cto8 = f->cto;
@@ -95,8 +97,9 @@ static int F(Filter *f)
lastcall = ic;
}
else {
assert(0==W_CTO // FIXME: what is this ???
|| (~(~0u<<W_CTO) & (word>>(24+2 - W_CTO))) != cto8); // this should not happen
#if (W_CTO != 0)
assert((~(~0u<<W_CTO) & (word>>(24+2 - W_CTO))) != cto8); // this should not happen
#endif
lastnoncall = ic;
noncalls++;
}
@@ -122,7 +125,7 @@ static int F(Filter *f)
static int U(Filter *f)
{
upx_byte *b = f->buf;
const unsigned size4 = umin(f->buf_len - 4, -(~0u<<(32 - (6+ W_CTO))));
const unsigned size4 = umin(f->buf_len - 4, 0u - (~0u<<(32 - (6+ W_CTO))));
const unsigned addvalue = f->addvalue;
unsigned ic;
+7 -3
View File
@@ -1257,8 +1257,8 @@ template <class T> struct TestBELE {
static bool test(void)
{
COMPILE_TIME_ASSERT_ALIGNED1(T)
struct test1_t { char a; T b; } __attribute_packed;
struct test2_t { char a; T b[3]; } __attribute_packed;
__packed_struct(test1_t) char a; T b; __packed_struct_end()
__packed_struct(test2_t) char a; T b[3]; __packed_struct_end()
test1_t t1[7]; UNUSED(t1); test2_t t2[7]; UNUSED(t2);
COMPILE_TIME_ASSERT(sizeof(test1_t) == 1 + sizeof(T))
COMPILE_TIME_ASSERT_ALIGNED1(test1_t)
@@ -1270,7 +1270,11 @@ static bool test(void)
COMPILE_TIME_ASSERT(__acc_alignof(t1) == 1)
COMPILE_TIME_ASSERT(__acc_alignof(t2) == 1)
#endif
#if 1 && !defined(xUPX_OFFICIAL_BUILD)
#if 1 && (ACC_CC_WATCOMC)
test1_t t11; COMPILE_TIME_ASSERT(sizeof(t11.a) <= sizeof(t11.b))
test2_t t22; COMPILE_TIME_ASSERT(sizeof(t22.a) <= sizeof(t22.b))
#endif
#if 1 && !defined(UPX_OFFICIAL_BUILD)
T allbits; allbits = 0; allbits -= 1;
//++allbits; allbits++; --allbits; allbits--;
T v1; v1 = 1; v1 *= 2; v1 -= 1;
+18 -36
View File
@@ -52,8 +52,7 @@ struct ElfITypes
// The ELF file header. This appears at the start of every ELF file.
template <class TElfITypes>
struct Ehdr
{
__packed_struct(Ehdr)
typedef typename TElfITypes::Half Half;
typedef typename TElfITypes::Word Word;
typedef typename TElfITypes::Addr Addr;
@@ -76,13 +75,11 @@ struct Ehdr
# define WANT_EHDR_ENUM 1
# include "p_elf_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TElfITypes>
struct Dyn
{
__packed_struct(Dyn)
typedef typename TElfITypes::Xword Xword;
typedef typename TElfITypes::Addr Addr;
@@ -91,13 +88,11 @@ struct Dyn
# define WANT_DYN_ENUM 1
# include "p_elf_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TElfITypes>
struct External_Note
{
__packed_struct(External_Note)
typedef typename TElfITypes::Word Word;
Word xn_namesz; // includes terminating '\0'
@@ -105,8 +100,7 @@ struct External_Note
Word xn_type;
//char xn_name[N]; // terminate with '\0'
//char xn_data[M]; // aligned to 0 mod 4
}
__attribute_packed;
__packed_struct_end()
} // namespace N_Elf
@@ -119,8 +113,7 @@ __attribute_packed;
namespace N_Elf32 {
template <class TElfITypes>
struct Phdr
{
__packed_struct(Phdr)
typedef typename TElfITypes::Word Word;
typedef typename TElfITypes::Addr Addr;
typedef typename TElfITypes::Off Off;
@@ -136,13 +129,11 @@ struct Phdr
# define WANT_PHDR_ENUM 1
# include "p_elf_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TElfITypes>
struct Shdr
{
__packed_struct(Shdr)
typedef typename TElfITypes::Word Word;
typedef typename TElfITypes::Addr Addr;
typedef typename TElfITypes::Off Off;
@@ -160,13 +151,11 @@ struct Shdr
# define WANT_SHDR_ENUM 1
# include "p_elf_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TElfITypes>
struct Sym
{
__packed_struct(Sym)
typedef typename TElfITypes::Word Word;
typedef typename TElfITypes::Addr Addr;
typedef typename TElfITypes::Section Section;
@@ -184,8 +173,7 @@ struct Sym
static unsigned int get_st_bind(unsigned x) { return 0xf & (x>>4); }
static unsigned int get_st_type(unsigned x) { return 0xf & x ; }
static unsigned char make_st_info(unsigned bind, unsigned type) { return (bind<<4) + (0xf & type); }
}
__attribute_packed;
__packed_struct_end()
} // namespace N_Elf32
@@ -198,8 +186,7 @@ __attribute_packed;
namespace N_Elf64 {
template <class TElfITypes>
struct Phdr
{
__packed_struct(Phdr)
typedef typename TElfITypes::Word Word;
typedef typename TElfITypes::Xword Xword;
typedef typename TElfITypes::Addr Addr;
@@ -216,13 +203,11 @@ struct Phdr
# define WANT_PHDR_ENUM 1
# include "p_elf_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TElfITypes>
struct Shdr
{
__packed_struct(Shdr)
typedef typename TElfITypes::Word Word;
typedef typename TElfITypes::Xword Xword;
typedef typename TElfITypes::Addr Addr;
@@ -241,13 +226,11 @@ struct Shdr
# define WANT_SHDR_ENUM 1
# include "p_elf_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TElfITypes>
struct Sym
{
__packed_struct(Sym)
typedef typename TElfITypes::Word Word;
typedef typename TElfITypes::Xword Xword;
typedef typename TElfITypes::Addr Addr;
@@ -266,8 +249,7 @@ struct Sym
static unsigned int get_st_bind(unsigned x) { return 0xf & (x>>4); }
static unsigned int get_st_type(unsigned x) { return 0xf & x ; }
static unsigned char make_st_info(unsigned bind, unsigned type) { return (bind<<4) + (0xf & type); }
}
__attribute_packed;
__packed_struct_end()
} // namespace N_Elf64
+2 -1
View File
@@ -51,7 +51,8 @@ PackExe::PackExe(InputFile *f) :
super(f)
{
bele = &N_BELE_RTP::le_policy;
COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 32);
COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 32)
COMPILE_TIME_ASSERT_ALIGNED1(exe_header_t)
ih_exesize = ih_imagesize = ih_overlay = 0;
stack_for_lzma = 0;
use_clear_dirty_stack = false;
+2 -4
View File
@@ -74,8 +74,7 @@ protected:
virtual Linker* newLinker() const;
void addLoaderEpilogue(int flag);
struct exe_header_t
{
__packed_struct(exe_header_t)
LE16 ident;
LE16 m512;
LE16 p512;
@@ -91,8 +90,7 @@ protected:
LE16 relocoffs;
char __[2]; // overlnum
LE32 firstreloc;
}
__attribute_packed;
__packed_struct_end()
exe_header_t ih, oh;
+21 -21
View File
@@ -846,14 +846,14 @@ bool PackLinuxElf32::canPack()
{
union {
unsigned char buf[sizeof(Elf32_Ehdr) + 14*sizeof(Elf32_Phdr)];
struct { Elf32_Ehdr ehdr; Elf32_Phdr phdr; } e;
//struct { U_Elf32_Ehdr ehdr; U_Elf32_Phdr phdr; } e;
} u;
COMPILE_TIME_ASSERT(sizeof(u.buf) <= 512);
fi->seek(0, SEEK_SET);
fi->readx(u.buf, sizeof(u.buf));
fi->seek(0, SEEK_SET);
Elf32_Ehdr const *const ehdr = &u.e.ehdr;
Elf32_Ehdr const *const ehdr = (Elf32_Ehdr *) u.buf;
// now check the ELF header
if (checkEhdr(ehdr) != 0)
@@ -897,7 +897,7 @@ bool PackLinuxElf32::canPack()
&& 1==get_te32(&note.type)
&& 0==note.end
&& (1+ strlen(osabi_note))==get_te32(&note.namesz)
&& 0==strcmp(osabi_note, (char const *)&note.text)
&& 0==strcmp(osabi_note, (char const *)note.text)
) {
osabi0 = ei_osabi; // Specified by PT_NOTE.
}
@@ -937,7 +937,7 @@ bool PackLinuxElf32::canPack()
file_image = new char[file_size];
fi->seek(0, SEEK_SET);
fi->readx(file_image, file_size);
ehdri= *ehdr;
memcpy(&ehdri, ehdr, sizeof(Elf32_Ehdr));
phdri= (Elf32_Phdr *)(e_phoff + file_image); // do not free() !!
shdri= (Elf32_Shdr *)(e_shoff + file_image); // do not free() !!
@@ -1007,13 +1007,13 @@ PackLinuxElf64amd::canPack()
{
union {
unsigned char buf[sizeof(Elf64_Ehdr) + 14*sizeof(Elf64_Phdr)];
struct { Elf64_Ehdr ehdr; Elf64_Phdr phdr; } e;
//struct { Elf64_Ehdr ehdr; Elf64_Phdr phdr; } e;
} u;
COMPILE_TIME_ASSERT(sizeof(u) <= 1024);
fi->readx(u.buf, sizeof(u.buf));
fi->seek(0, SEEK_SET);
Elf64_Ehdr const *const ehdr = &u.e.ehdr;
Elf64_Ehdr const *const ehdr = (Elf64_Ehdr *) u.buf;
// now check the ELF header
if (checkEhdr(ehdr) != 0)
@@ -1895,11 +1895,11 @@ void PackLinuxElf32::unpack(OutputFile *fo)
{
#define MAX_ELF_HDR 512
union {
char buf[MAX_ELF_HDR];
struct { Elf32_Ehdr ehdr; Elf32_Phdr phdr; } e;
unsigned char buf[MAX_ELF_HDR];
//struct { Elf32_Ehdr ehdr; Elf32_Phdr phdr; } e;
} u;
Elf32_Ehdr *const ehdr = &u.e.ehdr;
Elf32_Phdr const *phdr = &u.e.phdr;
Elf32_Ehdr *const ehdr = (Elf32_Ehdr *) u.buf;
Elf32_Phdr const *phdr = (Elf32_Phdr *) (u.buf + sizeof(*ehdr));
unsigned szb_info = sizeof(b_info);
{
@@ -1958,7 +1958,7 @@ void PackLinuxElf32::unpack(OutputFile *fo)
}
}
phdr = &u.e.phdr;
phdr = (Elf32_Phdr *) (u.buf + sizeof(*ehdr));
for (unsigned j = 0; j < phnum; ++j) {
unsigned const size = find_LOAD_gap(phdr, j, phnum);
if (size) {
@@ -2003,11 +2003,11 @@ void PackLinuxElf64::unpack(OutputFile *fo)
{
#define MAX_ELF_HDR 1024
union {
char buf[MAX_ELF_HDR];
struct { Elf64_Ehdr ehdr; Elf64_Phdr phdr; } e;
unsigned char buf[MAX_ELF_HDR];
//struct { Elf64_Ehdr ehdr; Elf64_Phdr phdr; } e;
} u;
Elf64_Ehdr *const ehdr = &u.e.ehdr;
Elf64_Phdr const *phdr = &u.e.phdr;
Elf64_Ehdr *const ehdr = (Elf64_Ehdr *) u.buf;
Elf64_Phdr const *phdr = (Elf64_Phdr *) (u.buf + sizeof(*ehdr));
unsigned szb_info = sizeof(b_info);
{
@@ -2066,7 +2066,7 @@ void PackLinuxElf64::unpack(OutputFile *fo)
}
}
phdr = &u.e.phdr;
phdr = (Elf64_Phdr *) (u.buf + sizeof(*ehdr));
for (unsigned j = 0; j < phnum; ++j) {
unsigned const size = find_LOAD_gap(phdr, j, phnum);
if (size) {
@@ -2367,11 +2367,11 @@ void PackLinuxElf32x86::unpack(OutputFile *fo)
{
#define MAX_ELF_HDR 512
union {
char buf[MAX_ELF_HDR];
struct { Elf32_Ehdr ehdr; Elf32_Phdr phdr; } e;
unsigned char buf[MAX_ELF_HDR];
//struct { Elf32_Ehdr ehdr; Elf32_Phdr phdr; } e;
} u;
Elf32_Ehdr *const ehdr = &u.e.ehdr;
Elf32_Phdr const *phdr = &u.e.phdr;
Elf32_Ehdr *const ehdr = (Elf32_Ehdr *) u.buf;
Elf32_Phdr const *phdr = (Elf32_Phdr *) (u.buf + sizeof(*ehdr));
unsigned szb_info = sizeof(b_info);
{
@@ -2430,7 +2430,7 @@ void PackLinuxElf32x86::unpack(OutputFile *fo)
}
}
phdr = &u.e.phdr;
phdr = (Elf32_Phdr *) (u.buf + sizeof(*ehdr));
for (unsigned j = 0; j < phnum; ++j) {
unsigned const size = find_LOAD_gap(phdr, j, phnum);
if (size) {
+5 -5
View File
@@ -529,13 +529,13 @@ bool PackLinuxI386::canPack()
unsigned const e_phnum = get_te16(&ehdr.e_phnum);
if (e_phnum<=(512/sizeof(Elf32_Phdr))) {
union {
char buf2[512];
Elf32_Phdr phdr;
unsigned char buf2[512];
//Elf32_Phdr phdr;
} u;
fi->seek(get_te32(&ehdr.e_phoff), SEEK_SET);
fi->readx(u.buf2, sizeof(u.buf2));
fi->seek(0, SEEK_SET);
Elf32_Phdr const *phdr = &u.phdr;
Elf32_Phdr const *phdr = (Elf32_Phdr *) u.buf2;
for (unsigned j=0; j < e_phnum; ++phdr, ++j) {
if (phdr->PT_NOTE == get_te32(&phdr->p_type)) {
unsigned const offset = get_te32(&phdr->p_offset);
@@ -546,11 +546,11 @@ bool PackLinuxI386::canPack()
if (4==get_te32(&note.descsz)
&& 1==get_te32(&note.type)
&& 0==note.end ) {
if (0==strcmp("NetBSD", (char const *)&note.text)) {
if (0==strcmp("NetBSD", (char const *)note.text)) {
ei_osabi = Elf32_Ehdr::ELFOSABI_NETBSD;
break;
}
if (0==strcmp("OpenBSD", (char const *)&note.text)) {
if (0==strcmp("OpenBSD", (char const *)note.text)) {
ei_osabi = Elf32_Ehdr::ELFOSABI_OPENBSD;
break;
}
+4 -4
View File
@@ -198,11 +198,11 @@ void PackLinuxElf32x86interp::unpack(OutputFile *fo)
{
#define MAX_INTERP_HDR 512
union {
char buf[MAX_INTERP_HDR];
struct { Elf32_Ehdr ehdr; Elf32_Phdr phdr; } e;
unsigned char buf[MAX_INTERP_HDR];
//struct { Elf32_Ehdr ehdr; Elf32_Phdr phdr; } e;
} u;
Elf32_Ehdr *const ehdr = &u.e.ehdr;
Elf32_Phdr const *phdr = &u.e.phdr;
Elf32_Ehdr *const ehdr = (Elf32_Ehdr *) u.buf;
Elf32_Phdr const *phdr = (Elf32_Phdr *) (u.buf + sizeof(*ehdr));
unsigned szb_info = sizeof(b_info);
{
+4 -4
View File
@@ -57,7 +57,7 @@ PackMachBase<T>::PackMachBase(InputFile *f, unsigned cputype, unsigned flavor,
n_segment(0), rawmseg(NULL), msegcmd(NULL)
{
MachClass::compileTimeAssertions();
bele = N_BELE_CTP::getRTP<BeLePolicy>();
bele = N_BELE_CTP::getRTP((const BeLePolicy*) NULL);
}
template <class T>
@@ -574,7 +574,7 @@ void PackMachBase<T>::pack1(OutputFile *const fo, Filter &/*ft*/) // generate e
segcmdo.cmd = Mach_segment_command::LC_SEGMENT;
segcmdo.cmdsize = sizeof(segcmdo);
strncpy((char *)&segcmdo.segname, "__TEXT", sizeof(segcmdo.segname));
strncpy((char *)segcmdo.segname, "__TEXT", sizeof(segcmdo.segname));
segcmdo.vmaddr = PAGE_MASK & (~PAGE_MASK +
msegcmd[n_segment -1].vmsize + msegcmd[n_segment -1].vmaddr );
segcmdo.vmsize = 0; // adjust later
@@ -683,10 +683,10 @@ bool PackMachBase<T>::canPack()
)
return false;
rawmseg = (Mach_segment_command *)new char[mhdri.sizeofcmds];
rawmseg = (Mach_segment_command *)new char[(unsigned) mhdri.sizeofcmds];
fi->readx(rawmseg, mhdri.sizeofcmds);
msegcmd = new Mach_segment_command[mhdri.ncmds];
msegcmd = new Mach_segment_command[(unsigned) mhdri.ncmds];
unsigned char *ptr = (unsigned char *)rawmseg;
for (unsigned j= 0; j < mhdri.ncmds; ++j) {
msegcmd[j] = *(Mach_segment_command *)ptr;
+45 -69
View File
@@ -30,24 +30,22 @@
#define __UPX_P_MACHO_H
struct Mach_fat_header {
__packed_struct(Mach_fat_header)
BE32 magic;
enum { // note conflict with java bytecode PackLinuxI386
FAT_MAGIC = 0xcafebabe,
FAT_MAGIC_SWAB = 0xbebafeca
};
BE32 nfat_arch; // Number of Mach_fat_arch which follow.
}
__attribute_packed;
__packed_struct_end()
struct Mach_fat_arch {
__packed_struct(Mach_fat_arch)
BE32 cputype;
BE32 cpusubtype;
BE32 offset;
BE32 size;
BE32 align; /* shift count; log base 2 */
}
__attribute_packed;
__packed_struct_end()
/*************************************************************************
@@ -68,8 +66,7 @@ struct MachITypes
};
template <class TMachITypes>
struct Mach_header
{
__packed_struct(Mach_header)
typedef typename TMachITypes::Word Word;
Word magic;
@@ -81,12 +78,11 @@ struct Mach_header
Word flags;
#define WANT_MACH_HEADER_ENUM 1
#include "p_mach_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TMachITypes>
struct Mach_header64
{ // only difference is padding to 0 mod 8
__packed_struct(Mach_header64)
// only difference is padding to 0 mod 8
typedef typename TMachITypes::Word Word;
Word magic;
@@ -99,12 +95,10 @@ struct Mach_header64
Word reserved; // pad to 0 mod 8
#define WANT_MACH_HEADER_ENUM 1
#include "p_mach_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TMachITypes>
struct Mach_segment_command
{
__packed_struct(Mach_segment_command)
typedef typename TMachITypes::Word Word;
typedef typename TMachITypes::Addr Addr;
typedef typename TMachITypes::Off Off;
@@ -122,12 +116,10 @@ struct Mach_segment_command
Word flags;
#define WANT_MACH_SEGMENT_ENUM 1
#include "p_mach_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TMachITypes>
struct Mach_section_command
{
__packed_struct(Mach_section_command)
typedef typename TMachITypes::Word Word;
typedef typename TMachITypes::Addr Addr;
typedef typename TMachITypes::Off Off;
@@ -145,12 +137,10 @@ struct Mach_section_command
Word reserved2;
#define WANT_MACH_SECTION_ENUM 1
#include "p_mach_enum.h"
}
__attribute_packed;
__packed_struct_end()
template <class TMachITypes>
struct Mach_ppc_thread_state
{
__packed_struct(Mach_ppc_thread_state)
typedef typename TMachITypes::Addr Addr;
Addr srr0; /* Instruction address register (PC; entry addr) */
@@ -167,12 +157,10 @@ struct Mach_ppc_thread_state
Addr mq; /* MQ register (601 only) */
Addr vrsave; /* Vector Save Register */
}
__attribute_packed;
__packed_struct_end()
template <class TMachITypes>
struct Mach_i386_thread_state
{
__packed_struct(Mach_i386_thread_state)
typedef typename TMachITypes::Word Word;
Word eax, ebx, ecx, edx;
@@ -181,12 +169,10 @@ struct Mach_i386_thread_state
Word eflags;
Word eip, cs;
Word ds, es, fs, gs;
}
__attribute_packed;
__packed_struct_end()
template <class TMachITypes>
struct Mach_i386_new_thread_state
{
__packed_struct(Mach_i386_new_thread_state)
typedef typename TMachITypes::Word Word;
Word gs, fs, es, ds;
@@ -194,12 +180,10 @@ struct Mach_i386_new_thread_state
Word ebx, edx, ecx, eax;
Word eip, cs, efl;
Word uesp, ss;
}
__attribute_packed;
__packed_struct_end()
template <class TMachITypes>
struct Mach_ARM_thread_state
{
__packed_struct(Mach_ARM_thread_state)
typedef typename TMachITypes::Word Word;
Word r[13]; // r0-r12
@@ -207,8 +191,7 @@ struct Mach_ARM_thread_state
Word lr; // r14
Word pc; // r15
Word cpsr;
}
__attribute_packed;
__packed_struct_end()
} // namespace N_Mach
@@ -219,8 +202,7 @@ namespace N_Mach32 {
namespace N_Mach64 {
template <class TMachITypes>
struct Mach_ppc_thread_state64
{
__packed_struct(Mach_ppc_thread_state64)
typedef typename TMachITypes::Word Word;
typedef typename TMachITypes::Xword Xword;
@@ -237,8 +219,7 @@ struct Mach_ppc_thread_state64
Xword ctr; /* Count register */
Word vrsave; /* Vector Save Register */
}
__attribute_packed;
__packed_struct_end()
} // namespace N_Mach64
@@ -395,30 +376,28 @@ protected:
Mach_header mhdro;
Mach_segment_command segcmdo;
struct b_info { // 12-byte header before each compressed block
__packed_struct(b_info) // 12-byte header before each compressed block
TE32 sz_unc; // uncompressed_size
TE32 sz_cpr; // compressed_size
unsigned char b_method; // compression algorithm
unsigned char b_ftid; // filter id
unsigned char b_cto8; // filter parameter
unsigned char b_method; // compression algorithm
unsigned char b_ftid; // filter id
unsigned char b_cto8; // filter parameter
unsigned char b_unused;
}
__attribute_packed;
struct l_info { // 12-byte trailer in header for loader
__packed_struct_end()
__packed_struct(l_info) // 12-byte trailer in header for loader
TE32 l_checksum;
LE32 l_magic;
TE16 l_lsize;
unsigned char l_version;
unsigned char l_format;
}
__attribute_packed;
__packed_struct_end()
struct p_info { // 12-byte packed program header
__packed_struct(p_info) // 12-byte packed program header
TE32 p_progid;
TE32 p_filesize;
TE32 p_blocksize;
}
__attribute_packed;
__packed_struct_end()
struct l_info linfo;
@@ -456,8 +435,7 @@ protected:
virtual Linker* newLinker() const;
virtual void buildLoader(const Filter *ft);
struct Mach_thread_command
{
__packed_struct(Mach_thread_command)
BE32 cmd; /* LC_THREAD or LC_UNIXTHREAD */
BE32 cmdsize; /* total size of this command */
BE32 flavor;
@@ -465,8 +443,8 @@ protected:
Mach_ppc_thread_state state;
#define WANT_MACH_THREAD_ENUM
#include "p_mach_enum.h"
}
__attribute_packed;
__packed_struct_end()
Mach_thread_command threado;
};
@@ -492,8 +470,7 @@ protected:
virtual void buildLoader(const Filter *ft);
virtual void addStubEntrySections(Filter const *);
struct Mach_thread_command
{
__packed_struct(Mach_thread_command)
LE32 cmd; /* LC_THREAD or LC_UNIXTHREAD */
LE32 cmdsize; /* total size of this command */
LE32 flavor;
@@ -501,8 +478,8 @@ protected:
Mach_i386_thread_state state;
#define WANT_MACH_THREAD_ENUM
#include "p_mach_enum.h"
}
__attribute_packed;
__packed_struct_end()
Mach_thread_command threado;
};
@@ -529,8 +506,7 @@ protected:
virtual void buildLoader(const Filter *ft);
virtual void addStubEntrySections(Filter const *);
struct Mach_thread_command
{
__packed_struct(Mach_thread_command)
LE32 cmd; /* LC_THREAD or LC_UNIXTHREAD */
LE32 cmdsize; /* total size of this command */
LE32 flavor;
@@ -538,8 +514,8 @@ protected:
Mach_ARM_thread_state state;
#define WANT_MACH_THREAD_ENUM
#include "p_mach_enum.h"
}
__attribute_packed;
__packed_struct_end()
Mach_thread_command threado;
};
@@ -577,11 +553,11 @@ public:
#endif
enum { N_FAT_ARCH = 5 };
protected:
struct Fat_head {
__packed_struct(Fat_head)
struct Mach_fat_header fat;
struct Mach_fat_arch arch[N_FAT_ARCH];
}
__attribute_packed;
__packed_struct_end()
Fat_head fat_head;
// UI handler
+1 -1
View File
@@ -2,7 +2,7 @@
This file is part of the UPX executable compressor.
Copyright (C) 2007 John F. Reiser
Copyright (C) 2007-2007 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
+2 -2
View File
@@ -127,8 +127,8 @@ int PackPs1::readFileHeader()
{
fi->seek(0, SEEK_SET);
fi->readx(&ih, sizeof(ih));
if (memcmp(&ih.id, "PS-X EXE", 8) != 0 &&
memcmp(&ih.id, "EXE X-SP", 8) != 0)
if (memcmp(&ih.id[0], "PS-X EXE", 8) != 0 &&
memcmp(&ih.id[0], "EXE X-SP", 8) != 0)
return 0;
if (ih.text != 0 || ih.data != 0)
return 0;
+2 -2
View File
@@ -64,7 +64,7 @@ PackVmlinuxBase<T>::PackVmlinuxBase(InputFile *f,
n_ptload(0), phdri(NULL), shdri(NULL), shstrtab(NULL)
{
ElfClass::compileTimeAssertions();
bele = N_BELE_CTP::getRTP<BeLePolicy>();
bele = N_BELE_CTP::getRTP((const BeLePolicy*) NULL);
}
template <class T>
@@ -628,7 +628,7 @@ void prep_kernel(unsigned long a1, unsigned long a2)
fo->seek(0, SEEK_SET);
fo->write(&ehdro, sizeof(ehdro));
fo->write(&shdro, sizeof(shdro));
fo->write(&shdro[0], sizeof(shdro));
if (Ehdr::EM_PPC==my_e_machine) {
fo->seek(sizeof(unsigned), SEEK_CUR);
set_be32(&ppc32_extra, ppc32_extra - 2*sizeof(unsigned) + txt_c_len);
+1 -1
View File
@@ -744,7 +744,7 @@ int PackVmlinuzARMEL::readFileHeader()
{
unsigned int hdr[8];
fi->readx(&hdr, sizeof(hdr));
fi->readx(hdr, sizeof(hdr));
for (int j=0; j < 8; ++j) {
if (0xe1a00000!=get_te32(&hdr[j])) {
return 0;
+1 -1
View File
@@ -164,7 +164,7 @@ int PackW32Pe::readFileHeader()
char buf[6];
fi->seek(0x200, SEEK_SET);
fi->readx(buf, 6);
isrtm = memcmp(&buf, "32STUB" ,6) == 0;
isrtm = memcmp(buf, "32STUB" ,6) == 0;
return super::readFileHeader();
}
+1 -1
View File
@@ -485,7 +485,7 @@ void PackWcle::pack(OutputFile *fo)
const unsigned text_vaddr = IOT(ih.init_cs_object-1,my_base_address);
// attach some useful data at the end of preprocessed fixups
ifixups[sofixups++] = (unsigned char) ih.automatic_data_object;
ifixups[sofixups++] = (unsigned char) (ih.automatic_data_object & 0xff);
unsigned ic = objects*sizeof(*iobject_table);
memcpy(ifixups+sofixups,iobject_desc,ic);
iobject_desc.dealloc();
+8 -8
View File
@@ -287,21 +287,21 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
Packer *PackMaster::getPacker(InputFile *f)
{
Packer *p = visitAllPackers(try_pack, f, opt, f);
if (!p)
Packer *pp = visitAllPackers(try_pack, f, opt, f);
if (!pp)
throwUnknownExecutableFormat();
p->assertPacker();
return p;
pp->assertPacker();
return pp;
}
Packer *PackMaster::getUnpacker(InputFile *f)
{
Packer *p = visitAllPackers(try_unpack, f, opt, f);
if (!p)
Packer *pp = visitAllPackers(try_unpack, f, opt, f);
if (!pp)
throwNotPacked();
p->assertPacker();
return p;
pp->assertPacker();
return pp;
}
+37 -40
View File
@@ -106,7 +106,7 @@ PeFile::PeFile(InputFile *f) : super(f)
COMPILE_TIME_ASSERT_ALIGNED1(pe_header_t)
COMPILE_TIME_ASSERT_ALIGNED1(pe_header_t::ddirs_t)
COMPILE_TIME_ASSERT_ALIGNED1(pe_section_t)
COMPILE_TIME_ASSERT(RT_LAST == TABLESIZE(opt->win32_pe.compress_rt));
COMPILE_TIME_ASSERT(RT_LAST == TABLESIZE(opt->win32_pe.compress_rt))
isection = NULL;
oimport = NULL;
@@ -158,8 +158,7 @@ bool PeFile::testUnpackVersion(int version) const
int PeFile::readFileHeader()
{
struct exe_header_t
{
__packed_struct(exe_header_t)
LE16 mz;
LE16 m512;
LE16 p512;
@@ -167,9 +166,12 @@ int PeFile::readFileHeader()
LE16 relocoffs;
char __[34];
LE32 nexepos;
}
__attribute_packed;
COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 64);
__packed_struct_end()
COMPILE_TIME_ASSERT(sizeof(exe_header_t) == 64)
COMPILE_TIME_ASSERT_ALIGNED1(exe_header_t)
COMPILE_TIME_ASSERT(sizeof(((exe_header_t*)0)->_) == 18)
COMPILE_TIME_ASSERT(sizeof(((exe_header_t*)0)->__) == 34)
exe_header_t h;
int ic;
@@ -286,12 +288,10 @@ void PeFile::Interval::dump() const
// relocation handling
**************************************************************************/
struct PeFile::Reloc::reloc
{
__packed_struct(PeFile::Reloc::reloc)
LE32 pagestart;
LE32 size;
}
__attribute_packed;
__packed_struct_end()
void PeFile::Reloc::newRelocPos(void *p)
{
@@ -302,7 +302,8 @@ void PeFile::Reloc::newRelocPos(void *p)
PeFile::Reloc::Reloc(upx_byte *s,unsigned si) :
start(s), size(si), rel(NULL), rel1(NULL)
{
COMPILE_TIME_ASSERT(sizeof(reloc) == 8);
COMPILE_TIME_ASSERT(sizeof(reloc) == 8)
COMPILE_TIME_ASSERT_ALIGNED1(reloc)
memset(counts,0,sizeof(counts));
unsigned pos,type;
while (next(pos,type))
@@ -460,18 +461,17 @@ void PeFile::processRelocs() // pass1
// import handling
**************************************************************************/
struct import_desc
{
__packed_struct(import_desc)
LE32 oft; // orig first thunk
char _[8];
LE32 dllname;
LE32 iat; // import address table
}
__attribute_packed;
__packed_struct_end()
void PeFile::processImports(unsigned myimport, unsigned iat_off) // pass 2
{
COMPILE_TIME_ASSERT(sizeof(import_desc) == 20);
COMPILE_TIME_ASSERT(sizeof(import_desc) == 20)
COMPILE_TIME_ASSERT_ALIGNED1(import_desc)
// adjust import data
for (import_desc *im = (import_desc*) oimpdlls; im->dllname; im++)
@@ -755,7 +755,8 @@ unsigned PeFile::processImports() // pass 1
PeFile::Export::Export(char *_base) : base(_base), iv(_base)
{
COMPILE_TIME_ASSERT(sizeof(export_dir_t) == 40);
COMPILE_TIME_ASSERT(sizeof(export_dir_t) == 40)
COMPILE_TIME_ASSERT_ALIGNED1(export_dir_t)
ename = functionptrs = ordinals = NULL;
names = NULL;
memset(&edir,0,sizeof(edir));
@@ -903,19 +904,18 @@ void PeFile::processExports(Export *xport,unsigned newoffs) // pass2
// the virtual memory manager only for pages which are not yet loaded.
// of course it was impossible to debug this ;-)
struct tls
{
__packed_struct(tls)
LE32 datastart; // VA tls init data start
LE32 dataend; // VA tls init data end
LE32 tlsindex; // VA tls index
LE32 callbacks; // VA tls callbacks
char _[8]; // zero init, characteristics
}
__attribute_packed;
__packed_struct_end()
void PeFile::processTls(Interval *iv) // pass 1
{
COMPILE_TIME_ASSERT(sizeof(tls) == 24);
COMPILE_TIME_ASSERT(sizeof(tls) == 24)
COMPILE_TIME_ASSERT_ALIGNED1(tls)
if ((sotls = ALIGN_UP(IDSIZE(PEDIR_TLS),4)) == 0)
return;
@@ -997,15 +997,12 @@ void PeFile::processTls(Reloc *rel,const Interval *iv,unsigned newaddr) // pass
// resource handling
**************************************************************************/
struct PeFile::Resource::res_dir_entry
{
__packed_struct(PeFile::Resource::res_dir_entry)
LE32 tnl; // Type | Name | Language id - depending on level
LE32 child;
}
__attribute_packed;
__packed_struct_end()
struct PeFile::Resource::res_dir
{
__packed_struct(PeFile::Resource::res_dir)
char _[12]; // flags, timedate, version
LE16 namedentr;
LE16 identr;
@@ -1014,16 +1011,13 @@ struct PeFile::Resource::res_dir
res_dir_entry entries[1];
// it's usually safe to assume that every res_dir contains
// at least one res_dir_entry - check() complains otherwise
}
__attribute_packed;
__packed_struct_end()
struct PeFile::Resource::res_data
{
__packed_struct(PeFile::Resource::res_data)
LE32 offset;
LE32 size;
char _[8]; // codepage, reserved
}
__attribute_packed;
__packed_struct_end()
struct PeFile::Resource::upx_rnode
{
@@ -1032,14 +1026,14 @@ struct PeFile::Resource::upx_rnode
upx_rnode *parent;
};
struct PeFile::Resource::upx_rbranch : public upx_rnode
struct PeFile::Resource::upx_rbranch : public PeFile::Resource::upx_rnode
{
unsigned nc;
upx_rnode **children;
res_dir data;
};
struct PeFile::Resource::upx_rleaf : public upx_rnode
struct PeFile::Resource::upx_rleaf : public PeFile::Resource::upx_rnode
{
upx_rleaf *next;
unsigned newoffset;
@@ -1534,14 +1528,17 @@ unsigned PeFile::stripDebug(unsigned overlaystart)
if (IDADDR(PEDIR_DEBUG) == 0)
return overlaystart;
struct debug_dir_t
{
__packed_struct(debug_dir_t)
char _[16]; // flags, time/date, version, type
LE32 size;
char __[4]; // rva
LE32 fpos;
}
__attribute_packed;
__packed_struct_end()
COMPILE_TIME_ASSERT(sizeof(debug_dir_t) == 28)
COMPILE_TIME_ASSERT_ALIGNED1(debug_dir_t)
COMPILE_TIME_ASSERT(sizeof(((debug_dir_t*)0)->_) == 16)
COMPILE_TIME_ASSERT(sizeof(((debug_dir_t*)0)->__) == 4)
const debug_dir_t *dd = (const debug_dir_t*) (ibuf + IDADDR(PEDIR_DEBUG));
for (unsigned ic = 0; ic < IDSIZE(PEDIR_DEBUG) / sizeof(debug_dir_t); ic++, dd++)
+1
View File
@@ -97,6 +97,7 @@ namespace std { class bad_alloc { }; }
#elif (ACC_CC_SYMANTECC)
#define std
class bad_alloc { };
#elif (ACC_CC_WATCOMC && (__WATCOMC__ >= 1280))
#elif (ACC_CC_WATCOMC)
#define std
class bad_alloc { };
+1 -1
View File
@@ -5,7 +5,7 @@
#
# This file is part of the UPX executable compressor.
#
# Copyright (C) 2008 John F. Reiser
# Copyright (C) 2008-2008 John F. Reiser
# All Rights Reserved.
#
# UPX and the UCL library are free software; you can redistribute them
+1 -1
View File
@@ -3,7 +3,7 @@
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 2006 John F. Reiser
; Copyright (C) 2006-2006 John F. Reiser
; All Rights Reserved.
;
; UPX and the UCL library are free software; you can redistribute them
@@ -3,7 +3,7 @@
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 2006 John Reiser
; Copyright (C) 2006-2006 John Reiser
; All Rights Reserved.
;
; UPX and the UCL library are free software; you can redistribute them
@@ -3,7 +3,7 @@
;
; This file is part of the UPX executable compressor.
;
; Copyright (C) 2007 John Reiser
; Copyright (C) 2007-2007 John Reiser
; All Rights Reserved.
;
; UPX and the UCL library are free software; you can redistribute them
+2
View File
@@ -36,10 +36,12 @@
# pragma warning(disable: 4201 4214 4514)
#endif
#define ACC_WANT_ACC_INCI_H 1
#include "miniacc.h"
#define ACC_WANT_ACCLIB_HSREAD 1
#define ACC_WANT_ACCLIB_MISC 1
#define ACC_WANT_ACCLIB_UA 1
#define ACC_WANT_ACCLIB_WILDARGV 1
#undef HAVE_MKDIR
#include "miniacc.h"