Replace all __attribute_packed by new __packed_struct macros.

This commit is contained in:
Markus F.X.J. Oberhumer 2009-02-12 05:20:23 +01:00
parent be57adaee7
commit 9adef80d6b
13 changed files with 80 additions and 137 deletions

View File

@ -307,22 +307,15 @@
#endif
#undef __attribute_packed
#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;
# define __packed_struct_end() } __attribute__((__packed__,__aligned__(1)));
#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() };

View File

@ -49,8 +49,8 @@ public:
protected:
enum { FIXUP_EXTRA = 3 };
struct le_header_t
{ // 0x00
__packed_struct(le_header_t)
// 0x00
char _[2]; // signature: 'LE' || 'LX'
char byte_order; // 0 little endian
char word_order; // 0 little endian
@ -117,28 +117,23 @@ protected:
LE16 device_id;
LE16 ddk_version;
#endif
}
__attribute_packed;
__packed_struct_end()
struct le_object_table_entry_t
{
__packed_struct(le_object_table_entry_t)
LE32 virtual_size;
LE32 base_address;
LE32 flags;
LE32 pagemap_index;
LE32 npages;
LE32 reserved;
}
__attribute_packed;
__packed_struct_end()
struct le_pagemap_entry_t
{
__packed_struct(le_pagemap_entry_t)
unsigned char h;
unsigned char m;
unsigned char l;
unsigned char type; // 0x00-legal;0x40-iterated;0x80-invalid;0xC0-zeroed
}
__attribute_packed;
__packed_struct_end()
virtual void readObjectTable();
virtual void writeObjectTable();

View File

@ -148,14 +148,12 @@ Linker* PackArmPe::newLinker() const
// 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 PackArmPe::processImports(unsigned myimport, unsigned iat_off) // pass 2
{

View File

@ -66,19 +66,16 @@ protected:
long coff_offset;
struct external_scnhdr_t
{
__packed_struct(external_scnhdr_t)
char _[12]; // name, paddr
LE32 vaddr;
LE32 size;
LE32 scnptr;
char misc[12]; // relptr, lnnoptr, nreloc, nlnno
char __[4]; // flags
}
__attribute_packed;
__packed_struct_end()
struct coff_header_t
{
__packed_struct(coff_header_t)
// ext_file_hdr
LE16 f_magic;
LE16 f_nscns;
@ -99,8 +96,7 @@ protected:
// section headers
external_scnhdr_t sh[3];
}
__attribute_packed;
__packed_struct_end()
coff_header_t coff_hdr;
external_scnhdr_t *text,*data,*bss;

View File

@ -145,26 +145,23 @@ protected:
Elf32_Shdr const *sec_dynsym;
Elf32_Shdr const *sec_dynstr;
struct cprElfHdr1 {
__packed_struct(cprElfHdr1)
Elf32_Ehdr ehdr;
Elf32_Phdr phdr[1];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
struct cprElfHdr2 {
__packed_struct(cprElfHdr2)
Elf32_Ehdr ehdr;
Elf32_Phdr phdr[2];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
struct cprElfHdr3 {
__packed_struct(cprElfHdr3)
Elf32_Ehdr ehdr;
Elf32_Phdr phdr[3];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
cprElfHdr3 elfout;
@ -227,26 +224,23 @@ protected:
Elf64_Phdr *phdri; // for input file
acc_uint64l_t page_mask; // AND clears the offset-within-page
struct cprElfHdr1 {
__packed_struct(cprElfHdr1)
Elf64_Ehdr ehdr;
Elf64_Phdr phdr[1];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
struct cprElfHdr2 {
__packed_struct(cprElfHdr2)
Elf64_Ehdr ehdr;
Elf64_Phdr phdr[2];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
struct cprElfHdr3 {
__packed_struct(cprElfHdr3)
Elf64_Ehdr ehdr;
Elf64_Phdr phdr[3];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
cprElfHdr3 elfout;

View File

@ -87,26 +87,23 @@ protected:
unsigned n_mru;
struct cprElfHdr1 {
__packed_struct(cprElfHdr1)
Elf_LE32_Ehdr ehdr;
Elf_LE32_Phdr phdr[1];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
struct cprElfHdr2 {
__packed_struct(cprElfHdr2)
Elf_LE32_Ehdr ehdr;
Elf_LE32_Phdr phdr[2];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
struct cprElfHdr3 {
__packed_struct(cprElfHdr3)
Elf_LE32_Ehdr ehdr;
Elf_LE32_Phdr phdr[3];
l_info linfo;
}
__attribute_packed;
__packed_struct_end()
cprElfHdr3 elfout;

View File

@ -67,8 +67,7 @@ protected:
virtual int readFileHeader();
virtual bool checkFileHeader();
struct ps1_exe_t
{
__packed_struct(ps1_exe_t)
// ident string
char id[8];
// is NULL
@ -91,33 +90,26 @@ protected:
char origin[60];
// backup of the original header (epc - is_len)
// id & the upx header ...
}
__attribute_packed;
__packed_struct_end()
// for unpack
struct ps1_exe_hb_t
{
__packed_struct(ps1_exe_hb_t)
LE32 ih_bkup[10];
// plus checksum for the backup
LE32 ih_csum;
}
__attribute_packed;
__packed_struct_end()
struct ps1_exe_chb_t
{
__packed_struct(ps1_exe_chb_t)
unsigned char id;
unsigned char len;
LE16 ih_csum;
unsigned char ih_bkup;
}
__attribute_packed;
__packed_struct_end()
struct bss_nfo
{
__packed_struct(bss_nfo)
LE16 hi1, op1, lo1, op2;
LE16 hi2, op3, lo2, op4;
}
__attribute_packed;
__packed_struct_end()
ps1_exe_t ih, oh;
ps1_exe_hb_t bh;

View File

@ -62,8 +62,7 @@ protected:
virtual int readFileHeader();
virtual bool checkFileHeader();
struct tos_header_t
{
__packed_struct(tos_header_t)
BE16 fh_magic;
BE32 fh_text;
BE32 fh_data;
@ -72,8 +71,7 @@ protected:
BE32 fh_reserved;
BE32 fh_flag;
BE16 fh_reloc;
}
__attribute_packed;
__packed_struct_end()
tos_header_t ih, oh;

View File

@ -92,30 +92,28 @@ protected:
unsigned b_len; // total length of b_info blocks
// must agree with stub/linux.hh
struct b_info { // 12-byte header before each compressed block
__packed_struct(b_info) // 12-byte header before each compressed block
unsigned sz_unc; // uncompressed_size
unsigned 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_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
LE32 l_checksum;
LE32 l_magic;
LE16 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
unsigned p_progid;
unsigned p_filesize;
unsigned p_blocksize;
}
__attribute_packed;
__packed_struct_end()
struct l_info linfo;
@ -135,31 +133,28 @@ protected:
PackUnixBe32(InputFile *f) : super(f) { bele = &N_BELE_RTP::be_policy; }
// must agree with stub/linux.hh
struct b_info { // 12-byte header before each compressed block
__packed_struct(b_info) // 12-byte header before each compressed block
BE32 sz_unc; // uncompressed_size
BE32 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_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
BE32 l_checksum;
BE32 l_magic;
BE16 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
BE32 p_progid;
BE32 p_filesize;
BE32 p_blocksize;
}
__attribute_packed;
__packed_struct_end()
};
@ -170,31 +165,28 @@ protected:
PackUnixLe32(InputFile *f) : super(f) { bele = &N_BELE_RTP::le_policy; }
// must agree with stub/linux.hh
struct b_info { // 12-byte header before each compressed block
__packed_struct(b_info) // 12-byte header before each compressed block
LE32 sz_unc; // uncompressed_size
LE32 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_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
LE32 l_checksum;
LE32 l_magic;
LE16 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
LE32 p_progid;
LE32 p_filesize;
LE32 p_blocksize;
}
__attribute_packed;
__packed_struct_end()
};

View File

@ -301,7 +301,7 @@ void PackVmlinuxBase<T>::pack(OutputFile *fo)
if (UPX_E_OK!=r || len_unc<=len_cpr) // FIXME: allow no compression
throwInternalError("Ehdr compression failed");
struct b_info { // 12-byte header before each compressed block
__packed_struct(b_info) // 12-byte header before each compressed block
unsigned sz_unc; // uncompressed_size
unsigned sz_cpr; // compressed_size
unsigned char b_method; // compression algorithm
@ -309,8 +309,7 @@ void PackVmlinuxBase<T>::pack(OutputFile *fo)
unsigned char b_cto8; // filter parameter
unsigned char b_unused; // FIXME: !=0 for partial-block unfilter
// unsigned f_offset, f_len; // only if partial-block unfilter
}
__attribute_packed;
__packed_struct_end()
struct b_info hdr_info;
set_be32(&hdr_info.sz_unc, len_unc);

View File

@ -64,8 +64,7 @@ protected:
// virtual upx_byte *getLoader() const;
// virtual int getLoaderSize() const;
struct boot_sect_t
{
__packed_struct(boot_sect_t)
char _[0x1f1];
unsigned char setup_sects;
char __[2];
@ -86,11 +85,11 @@ protected:
char _8[0x248 - (0x234 + 1)];
LE32 payload_offset;
LE32 payload_length;
// some more uninteresting fields here ...
// see /usr/src/linux/Documentation/i386/boot.txt
}
__attribute_packed h;
__packed_struct_end()
boot_sect_t h;
MemBuffer setup_buf;
int setup_size;

View File

@ -173,14 +173,12 @@ int PackW32Pe::readFileHeader()
// 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 PackW32Pe::processImports(unsigned myimport, unsigned) // pass 2
{

View File

@ -106,8 +106,7 @@ protected:
unsigned crelocs; // rva of preprocessed fixups
int big_relocs;
struct pe_header_t
{
__packed_struct(pe_header_t)
// 0x0
char _[4]; // pemagic
LE16 cpu;
@ -142,19 +141,15 @@ protected:
// 0x74
LE32 ddirsentries; // usually 16
struct ddirs_t
{
__packed_struct(ddirs_t)
LE32 vaddr;
LE32 size;
}
__attribute_packed;
__packed_struct_end()
struct ddirs_t ddirs[16];
}
__attribute_packed;
ddirs_t ddirs[16];
__packed_struct_end()
struct pe_section_t
{
__packed_struct(pe_section_t)
char name[8];
LE32 vsize;
LE32 vaddr;
@ -162,8 +157,7 @@ protected:
LE32 rawdataptr;
char _[12];
LE32 flags;
}
__attribute_packed;
__packed_struct_end()
pe_header_t ih, oh;
pe_section_t *isection;
@ -333,8 +327,7 @@ protected:
class Export : private noncopyable
{
struct export_dir_t
{
__packed_struct(export_dir_t)
char _[12]; // flags, timedate, version
LE32 name;
char __[4]; // ordinal base
@ -343,8 +336,7 @@ protected:
LE32 addrtable;
LE32 nameptrtable;
LE32 ordinaltable;
}
__attribute_packed;
__packed_struct_end()
export_dir_t edir;
char *ename;