1// { dg-do assemble } 2// { dg-options "-O" } 3// GROUPS passed old-abort 4typedef unsigned char uchar; 5typedef unsigned short ushort; 6typedef unsigned long ulong; 7extern int swap_endian; 8inline ushort 9swapshort(ushort value) 10{ 11 value &= 0xffff; 12 return ((value << 8) | (value >> 8)); 13} 14struct eshort 15{ 16 ushort data; 17 operator ushort() { return swap_endian ? swapshort(data) : data;} 18 eshort(ushort t) { data = swap_endian ? swapshort(t) : t;} 19 eshort() {} 20}; 21inline ulong 22swaplong(ulong value) 23{ 24 ulong v = (value << 16) | (value >> 16); 25 return ((v >> 8) & 0x00ff00ff) | ((v << 8) & 0xff00ff00); 26} 27struct elong 28{ 29 ulong data; 30 operator ulong() { return swap_endian ? swaplong(data) : data;} 31 elong(ulong t) { data = swap_endian ? swaplong(t) : t; } 32 elong() {} 33}; 34struct digiheader 35{ 36 uchar type[2]; 37 eshort soft_version; 38 eshort lo_boot_rev; 39 eshort hi_boot_rev; 40 eshort load_segment; 41 eshort length; 42 eshort exec_start; 43 eshort image_offset; 44 elong startup_code[2]; 45 elong checksum; 46}; 47extern void uncompress(uchar* buf, ulong len); 48extern ulong compress(char* filename, uchar* buffer, ulong); 49struct filehdr 50{ 51 eshort f_magic; 52 eshort f_nscns; 53 elong f_timdat; 54 elong f_symptr; 55 elong f_nsyms; 56 eshort f_opthdr; 57 eshort f_flags; 58}; 59struct aouthdr 60{ 61 eshort magic; 62 eshort vstamp; 63 elong tsize; 64 elong dsize; 65 elong bsize; 66 elong entry; 67 elong text_start; 68 elong data_start; 69 elong bss_start; 70 elong gprmask; 71 elong cprmask[4]; 72 elong gp_value; 73}; 74struct scnhdr 75{ 76 char s_name[8]; 77 elong s_paddr; 78 elong s_vaddr; 79 elong s_size; 80 elong s_scnptr; 81 elong s_relptr; 82 elong s_lnnoptr; 83 eshort s_nreloc; 84 eshort s_nlnno; 85 elong s_flags; 86}; 87int file_little_endian; 88int host_little_endian; 89int swap_endian; 90int docheck; 91int expand; 92ulong memsize; 93ulong compression_quality; 94char *compressfile; 95int debug_level; 96extern "C" int getopt (int, char**, char*); 97int 98main(int argc, char** argv) 99{ 100 uchar checksum; 101 uchar docrc; 102 ulong len; 103 ulong maxlen; 104 int i; 105 int c; 106 int magic; 107 int tsize; 108 int dsize; 109 int quality; 110 char dummy; 111 uchar* code; 112 uchar* buf; 113 char* ap; 114 digiheader *dh; 115 compression_quality = 10000; 116 docheck = 0; 117 while ((c = getopt(argc, argv, "Ccdf:k:q:x:")) != -1) 118 { 119 switch (c) 120 { 121 default: 122 goto usage; 123 } 124 } 125 if ((expand && (docheck || compressfile || quality)) || 126 (quality && !compressfile)) 127 { 128 usage: 129 return(2); 130 } 131 if (compressfile) 132 { 133 dh->image_offset = len; 134 135 len += compress(compressfile, code + len, maxlen - len); 136 } 137} 138