Changeset 236 for trunk/src/emx/src/emxomf/emxaout.c
- Timestamp:
- May 26, 2003, 4:43:12 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/emx/src/emxomf/emxaout.c
-
Property cvs2svn:cvs-rev
changed from
1.2
to1.3
r235 r236 28 28 #include <sys/param.h> 29 29 #include <sys/emxload.h> 30 #include <sys/omflib.h> 30 31 #include <ar.h> 32 #include <a_out.h> 31 33 32 34 #define GROW_DEF_STATIC(NAME,TYPE) \ … … 42 44 (grow_by (&NAME##_grow, 1), NAME##_grow.count++) 43 45 44 /* The version number of this program. This is printed with the usage45 message. */46 47 #define VERSION "0.9d"48 #include "../../../../include/innotekversion.h"49 50 46 /* Insert private header files. */ 51 47 … … 150 146 GROW_DEF_STATIC (extdefs, struct extdef); 151 147 GROW_DEF_STATIC (symbols, struct symbol); 152 GROW_DEF_STATIC (trelocs, struct reloc );153 GROW_DEF_STATIC (drelocs, struct reloc );148 GROW_DEF_STATIC (trelocs, struct relocation_info); 149 GROW_DEF_STATIC (drelocs, struct relocation_info); 154 150 155 151 … … 212 208 { 213 209 void *p; 214 210 215 211 p = malloc (n); 216 212 if (p == NULL && n != 0) … … 227 223 { 228 224 void *p; 229 225 230 226 p = realloc (ptr, n); 231 227 if (p == NULL) … … 242 238 { 243 239 char *p; 244 240 245 241 p = xmalloc (strlen (s) + 1); 246 242 strcpy (p, s); … … 268 264 static void usage (void) 269 265 { 270 puts ("emxaout " VERSION INNOTEK_VERSION" -- Copyright (c) 1994-1996 by Eberhard Mattes\n");266 puts ("emxaout " VERSION " -- Copyright (c) 1994-1996 by Eberhard Mattes\n"); 271 267 puts ("Usage:"); 272 268 puts (" emxaout [-u] [-o <output_file>] <input_file>"); … … 706 702 ³n External name 707 703 ³1-2 Type index 708 À 704 À 709 705 710 706 Symbol indices are assigned sequentially by EXTDEF and COMDEF. */ … … 936 932 F (bit 7) 1=frame thread, 0=methods F0 through F5 937 933 Frame (bits 4-6) frame thread number (F=1) or frame method (F=0) 938 T (bit 3) 1=target thread, 1=methods 934 T (bit 3) 1=target thread, 1=methods 939 935 P (bit 2) Bit 2 of target method 940 936 Targt (bits 0-1) target thread number (T=1) or target method (T=0) */ … … 945 941 int frame_method, frame_index, target_method, target_index; 946 942 dword disp; 947 struct reloc r;943 struct relocation_info r; 948 944 struct thread th; 949 945 … … 958 954 fix_data = get_byte (); 959 955 if (first & 0x40) 960 r. pcrel = 0;956 r.r_pcrel = 0; 961 957 else 962 r. pcrel = 1;963 r. address = offset + cur_off;964 r. unused = 0;958 r.r_pcrel = 1; 959 r.r_address = offset + cur_off; 960 r.r_pad = 0; 965 961 locat = (first >> 2) & 0x0f; 966 962 if (fix_data & 0x80) … … 1015 1011 error2 ("FIXUPP: OFFSET-16(LR) fixup not supported"); 1016 1012 case 9: 1017 r. length = 2;1013 r.r_length = 2; 1018 1014 break; 1019 1015 case 11: … … 1028 1024 { 1029 1025 case 0: /* T0: SEGDEF */ 1030 r. ext= 0;1026 r.r_extern = 0; 1031 1027 if (target_index == seg_code + 1) 1032 r. symbolnum = N_TEXT;1028 r.r_symbolnum = N_TEXT; 1033 1029 else if (target_index == seg_data + 1) 1034 1030 { 1035 r. symbolnum = N_DATA;1031 r.r_symbolnum = N_DATA; 1036 1032 disp += (seg_code >= 0 ? segments[seg_code].size : 0); 1037 1033 } 1038 1034 else if (target_index == seg_bss + 1) 1039 1035 { 1040 r. symbolnum = N_BSS;1036 r.r_symbolnum = N_BSS; 1041 1037 disp += (seg_code >= 0 ? segments[seg_code].size : 0); 1042 1038 disp += (seg_data >= 0 ? segments[seg_data].size : 0); … … 1050 1046 break; 1051 1047 case 2: /* T2: EXTDEF */ 1052 r. ext= 1;1048 r.r_extern = 1; 1053 1049 if (target_index < 1 || target_index > GROW_COUNT (extdefs)) 1054 1050 error2 ("FIXUPP: EXTDEF index out of range"); 1055 r. symbolnum = target_index - 1;1051 r.r_symbolnum = target_index - 1; 1056 1052 break; 1057 1053 default: … … 1085 1081 abort (); 1086 1082 1087 if (r. address + 4 > segments[cur_seg].size)1083 if (r.r_address + 4 > segments[cur_seg].size) 1088 1084 error2 ("FIXUPP: fixup beyond end of segment"); 1089 *((dword *)(segments[cur_seg].data + r. address))1090 += r. pcrel ? disp - (r.address + 4) : disp;1085 *((dword *)(segments[cur_seg].data + r.r_address)) 1086 += r.r_pcrel ? disp - (r.r_address + 4) : disp; 1091 1087 } 1092 1088 } … … 1127 1123 for (i = 0; i < GROW_COUNT (extdefs); ++i) 1128 1124 { 1129 n. type = N_EXT;1130 n. string= 0;1131 n. value = extdefs[i].size;1132 n. other = 0;1133 n. desc = 0;1125 n.n_type = N_EXT; 1126 n.n_un.n_strx = 0; 1127 n.n_value = extdefs[i].size; 1128 n.n_other = 0; 1129 n.n_desc = 0; 1134 1130 j = GROW_ADD (symbols); 1135 1131 symbols[j].name = xstrdup (extdefs[i].name); … … 1143 1139 skip = TRUE; 1144 1140 else if (pubdefs[i].seg == seg_code + 1) 1145 n. type = N_TEXT | N_EXT;1141 n.n_type = N_TEXT | N_EXT; 1146 1142 else if (pubdefs[i].seg == seg_data + 1) 1147 n. type = N_DATA | N_EXT;1143 n.n_type = N_DATA | N_EXT; 1148 1144 else 1149 1145 skip = TRUE; 1150 1146 if (!skip) 1151 1147 { 1152 n. string= 0;1153 n. value = pubdefs[i].offset;1154 n. other = 0;1155 n. desc = 0;1148 n.n_un.n_strx = 0; 1149 n.n_value = pubdefs[i].offset; 1150 n.n_other = 0; 1151 n.n_desc = 0; 1156 1152 j = GROW_ADD (symbols); 1157 1153 symbols[j].name = xstrdup (pubdefs[i].name); … … 1173 1169 { 1174 1170 if (symbols[i].name == NULL) 1175 symbols[i].n. string= 0;1171 symbols[i].n.n_un.n_strx = 0; 1176 1172 else 1177 1173 { 1178 symbols[i].n. string= str_size;1174 symbols[i].n.n_un.n_strx = str_size; 1179 1175 str_size += strlen (symbols[i].name) + 1; 1180 1176 } … … 1192 1188 static void conv_modend (void) 1193 1189 { 1194 struct a_out_headerh;1190 struct exec h; 1195 1191 int i; 1196 1192 1197 1193 make_symtab (); 1198 h.magic = 0407;1199 h.machtype = 0;1200 h.flags = 0;1201 h. text_size= (seg_code >= 0 ? segments[seg_code].size : 0);1202 h. data_size= (seg_data >= 0 ? segments[seg_data].size : 0);1203 h. bss_size= (seg_bss >= 0 ? segments[seg_bss ].size : 0);1204 h. sym_size= GROW_COUNT (symbols) * sizeof (struct nlist);1205 h. entry = 0;1206 h. trsize = GROW_COUNT (trelocs) * sizeof (struct reloc);1207 h. drsize = GROW_COUNT (drelocs) * sizeof (struct reloc);1194 N_SET_MAGIC (h, OMAGIC); 1195 N_SET_MACHTYPE (h, 0); 1196 N_SET_FLAGS (h, 0); 1197 h.a_text = (seg_code >= 0 ? segments[seg_code].size : 0); 1198 h.a_data = (seg_data >= 0 ? segments[seg_data].size : 0); 1199 h.a_bss = (seg_bss >= 0 ? segments[seg_bss ].size : 0); 1200 h.a_syms = GROW_COUNT (symbols) * sizeof (struct nlist); 1201 h.a_entry = 0; 1202 h.a_trsize = GROW_COUNT (trelocs) * sizeof (struct relocation_info); 1203 h.a_drsize = GROW_COUNT (drelocs) * sizeof (struct relocation_info); 1208 1204 fwrite (&h, sizeof (h), 1, out_file); 1209 1205 if (seg_code >= 0) … … 1212 1208 fwrite (segments[seg_data].data, segments[seg_data].size, 1, out_file); 1213 1209 for (i = 0; i < GROW_COUNT (trelocs); ++i) 1214 fwrite (&trelocs[i], sizeof (struct reloc ), 1, out_file);1210 fwrite (&trelocs[i], sizeof (struct relocation_info), 1, out_file); 1215 1211 for (i = 0; i < GROW_COUNT (drelocs); ++i) 1216 fwrite (&drelocs[i], sizeof (struct reloc ), 1, out_file);1212 fwrite (&drelocs[i], sizeof (struct relocation_info), 1, out_file); 1217 1213 write_symtab (); 1218 1214 } -
Property cvs2svn:cvs-rev
changed from
Note:
See TracChangeset
for help on using the changeset viewer.