00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #define SHLIBLEN 60
00032
00033 #define MF_IMPURE 00200
00034 #define MF_SQUEEZED 01000
00035 #define MF_USES_SL 02000
00036 #define MF_IS_SL 04000
00037
00038
00039 #define IMAGIC (MF_IMPURE|ZMAGIC)
00040 #define SPOMAGIC (MF_USES_SL|OMAGIC)
00041
00042
00043
00044 #define SLOMAGIC (MF_IS_SL|OMAGIC)
00045
00046
00047
00048
00049 #define QMAGIC (MF_SQUEEZED|ZMAGIC)
00050
00051
00052
00053
00054 #define SPZMAGIC (MF_USES_SL|ZMAGIC)
00055 #define SPQMAGIC (MF_USES_SL|QMAGIC)
00056 #define SLZMAGIC (MF_IS_SL|ZMAGIC)
00057 #define SLPZMAGIC (MF_USES_SL|SLZMAGIC)
00058
00059 #define N_SHARED_LIB(x) ((x).a_info & MF_USES_SL)
00060
00061
00062 #define N_TXTOFF(x) \
00063 ((x).a_info == OMAGIC \
00064 ? 32 \
00065 : (N_MAGIC(x) == ZMAGIC \
00066 ? TARGET_PAGE_SIZE \
00067 : 999))
00068
00069 #define N_TXTADDR(x) \
00070 (N_MAGIC(x) != ZMAGIC \
00071 ? (bfd_vma) 0 \
00072
00073
00074
00075 \
00076 : (N_SHARED_LIB(x) \
00077 ? ((x).a_entry & ~(bfd_vma) (TARGET_PAGE_SIZE - 1)) \
00078 : (bfd_vma) TEXT_START_ADDR))
00079
00080 #define N_SYMOFF(x) \
00081 (N_TXTOFF (x) + (x).a_text + (x).a_data + (x).a_trsize + (x).a_drsize)
00082
00083 #define N_STROFF(x) (N_SYMOFF (x) + (x).a_syms)
00084
00085 #define TEXT_START_ADDR 32768
00086 #define TARGET_PAGE_SIZE 32768
00087 #define SEGMENT_SIZE TARGET_PAGE_SIZE
00088 #define DEFAULT_ARCH bfd_arch_arm
00089
00090
00091
00092
00093 #define MY(OP) CONCAT2 (riscix_,OP)
00094 #define TARGETNAME "a.out-riscix"
00095 #define N_BADMAG(x) ((((x).a_info & ~007200) != ZMAGIC) && \
00096 (((x).a_info & ~006000) != OMAGIC) && \
00097 ((x).a_info != NMAGIC))
00098 #define N_MAGIC(x) ((x).a_info & ~07200)
00099
00100 #include "bfd.h"
00101 #include "sysdep.h"
00102 #include "libbfd.h"
00103
00104 #define WRITE_HEADERS(abfd, execp) \
00105 { \
00106 bfd_size_type text_size; \
00107 file_ptr text_end; \
00108 if (adata(abfd).magic == undecided_magic) \
00109 NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end); \
00110 \
00111 execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE; \
00112 execp->a_entry = bfd_get_start_address (abfd); \
00113 \
00114 execp->a_trsize = ((obj_textsec (abfd)->reloc_count) * \
00115 obj_reloc_entry_size (abfd)); \
00116 execp->a_drsize = ((obj_datasec (abfd)->reloc_count) * \
00117 obj_reloc_entry_size (abfd)); \
00118 NAME(aout,swap_exec_header_out) (abfd, execp, &exec_bytes); \
00119 \
00120 if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 \
00121 || bfd_bwrite ((PTR) &exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, \
00122 abfd) != EXEC_BYTES_SIZE) \
00123 return FALSE; \
00124 \
00125 \
00126 if (bfd_get_outsymbols (abfd) != (asymbol **) NULL \
00127 && bfd_get_symcount (abfd) != 0) \
00128 { \
00129 if (bfd_seek (abfd, (file_ptr) (N_SYMOFF(*execp)), SEEK_SET) != 0) \
00130 return FALSE; \
00131 \
00132 if (! NAME(aout,write_syms) (abfd)) return FALSE; \
00133 \
00134 if (bfd_seek (abfd, (file_ptr) (N_TRELOFF(*execp)), SEEK_SET) != 0) \
00135 return FALSE; \
00136 \
00137 if (! riscix_squirt_out_relocs (abfd, obj_textsec (abfd))) \
00138 return FALSE; \
00139 if (bfd_seek (abfd, (file_ptr) (N_DRELOFF(*execp)), SEEK_SET) != 0) \
00140 return FALSE; \
00141 \
00142 if (!NAME(aout,squirt_out_relocs) (abfd, obj_datasec (abfd))) \
00143 return FALSE; \
00144 } \
00145 }
00146
00147 #include "libaout.h"
00148 #include "aout/aout64.h"
00149
00150 static bfd_reloc_status_type
00151 riscix_fix_pcrel_26_done PARAMS ((bfd *, arelent *, asymbol *, PTR,
00152 asection *, bfd *, char **));
00153
00154 static bfd_reloc_status_type
00155 riscix_fix_pcrel_26 PARAMS ((bfd *, arelent *, asymbol *, PTR,
00156 asection *, bfd *, char **));
00157 static const bfd_target *
00158 MY (object_p) PARAMS ((bfd *));
00159
00160 reloc_howto_type *
00161 riscix_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_real_type));
00162
00163 void
00164 riscix_swap_std_reloc_out PARAMS ((bfd *, arelent *, struct reloc_std_external *));
00165
00166 bfd_boolean
00167 riscix_squirt_out_relocs PARAMS ((bfd *, asection *));
00168
00169 long
00170 MY (canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
00171
00172 const bfd_target *
00173 riscix_some_aout_object_p PARAMS ((bfd *, struct internal_exec *, const bfd_target *(*) (bfd *)));
00174
00175
00176 static reloc_howto_type riscix_std_reloc_howto[] = {
00177
00178 HOWTO( 0, 0, 0, 8, FALSE, 0, complain_overflow_bitfield,0,"8", TRUE, 0x000000ff,0x000000ff, FALSE),
00179 HOWTO( 1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield,0,"16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
00180 HOWTO( 2, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,0,"32", TRUE, 0xffffffff,0xffffffff, FALSE),
00181 HOWTO( 3, 2, 3, 26, TRUE, 0, complain_overflow_signed, riscix_fix_pcrel_26 , "ARM26", TRUE, 0x00ffffff,0x00ffffff, FALSE),
00182 HOWTO( 4, 0, 0, 8, TRUE, 0, complain_overflow_signed, 0,"DISP8", TRUE, 0x000000ff,0x000000ff, TRUE),
00183 HOWTO( 5, 0, 1, 16, TRUE, 0, complain_overflow_signed, 0,"DISP16", TRUE, 0x0000ffff,0x0000ffff, TRUE),
00184 HOWTO( 6, 0, 2, 32, TRUE, 0, complain_overflow_signed, 0,"DISP32", TRUE, 0xffffffff,0xffffffff, TRUE),
00185 HOWTO( 7, 2, 3, 26, FALSE, 0, complain_overflow_signed, riscix_fix_pcrel_26_done, "ARM26D",TRUE,0x00ffffff,0x00ffffff, FALSE),
00186 EMPTY_HOWTO (-1),
00187 HOWTO( 9, 0, -1, 16, FALSE, 0, complain_overflow_bitfield,0,"NEG16", TRUE, 0x0000ffff,0x0000ffff, FALSE),
00188 HOWTO( 10, 0, -2, 32, FALSE, 0, complain_overflow_bitfield,0,"NEG32", TRUE, 0xffffffff,0xffffffff, FALSE)
00189 };
00190
00191 #define RISCIX_TABLE_SIZE \
00192 (sizeof (riscix_std_reloc_howto) / sizeof (reloc_howto_type))
00193
00194 static bfd_reloc_status_type
00195 riscix_fix_pcrel_26_done (abfd, reloc_entry, symbol, data, input_section,
00196 output_bfd, error_message)
00197 bfd *abfd ATTRIBUTE_UNUSED;
00198 arelent *reloc_entry ATTRIBUTE_UNUSED;
00199 asymbol *symbol ATTRIBUTE_UNUSED;
00200 PTR data ATTRIBUTE_UNUSED;
00201 asection *input_section ATTRIBUTE_UNUSED;
00202 bfd *output_bfd ATTRIBUTE_UNUSED;
00203 char **error_message ATTRIBUTE_UNUSED;
00204 {
00205
00206 return bfd_reloc_ok;
00207 }
00208
00209 static bfd_reloc_status_type
00210 riscix_fix_pcrel_26 (abfd, reloc_entry, symbol, data, input_section,
00211 output_bfd, error_message)
00212 bfd *abfd;
00213 arelent *reloc_entry;
00214 asymbol *symbol;
00215 PTR data;
00216 asection *input_section;
00217 bfd *output_bfd;
00218 char **error_message ATTRIBUTE_UNUSED;
00219 {
00220 bfd_vma relocation;
00221 bfd_size_type addr = reloc_entry->address;
00222 long target = bfd_get_32 (abfd, (bfd_byte *) data + addr);
00223 bfd_reloc_status_type flag = bfd_reloc_ok;
00224
00225
00226 if (symbol->section == &bfd_und_section
00227 && (symbol->flags & BSF_WEAK) == 0)
00228 return output_bfd ? bfd_reloc_continue : bfd_reloc_undefined;
00229
00230
00231
00232 if (symbol->section->name != input_section->name
00233 && output_bfd != (bfd *)NULL)
00234 return bfd_reloc_continue;
00235
00236 relocation = (target & 0x00ffffff) << 2;
00237 relocation = (relocation ^ 0x02000000) - 0x02000000;
00238 relocation += symbol->value;
00239 relocation += symbol->section->output_section->vma;
00240 relocation += symbol->section->output_offset;
00241 relocation += reloc_entry->addend;
00242 relocation -= input_section->output_section->vma;
00243 relocation -= input_section->output_offset;
00244 relocation -= addr;
00245 if (relocation & 3)
00246 return bfd_reloc_overflow;
00247
00248
00249 if (relocation & 0x02000000)
00250 {
00251 if ((relocation & ~ (bfd_vma) 0x03ffffff) != ~ (bfd_vma) 0x03ffffff)
00252 flag = bfd_reloc_overflow;
00253 }
00254 else if (relocation & ~ (bfd_vma) 0x03ffffff)
00255 flag = bfd_reloc_overflow;
00256
00257 target &= ~0x00ffffff;
00258 target |= (relocation >> 2) & 0x00ffffff;
00259 bfd_put_32 (abfd, (bfd_vma) target, (bfd_byte *) data + addr);
00260
00261
00262
00263 reloc_entry->howto = &riscix_std_reloc_howto[7];
00264
00265 return flag;
00266 }
00267
00268 reloc_howto_type *
00269 riscix_reloc_type_lookup (abfd, code)
00270 bfd *abfd;
00271 bfd_reloc_code_real_type code;
00272 {
00273 #define ASTD(i,j) case i: return &riscix_std_reloc_howto[j]
00274 if (code == BFD_RELOC_CTOR)
00275 switch (bfd_get_arch_info (abfd)->bits_per_address)
00276 {
00277 case 32:
00278 code = BFD_RELOC_32;
00279 break;
00280 default: return (reloc_howto_type *) NULL;
00281 }
00282
00283 switch (code)
00284 {
00285 ASTD (BFD_RELOC_16, 1);
00286 ASTD (BFD_RELOC_32, 2);
00287 ASTD (BFD_RELOC_ARM_PCREL_BRANCH, 3);
00288 ASTD (BFD_RELOC_8_PCREL, 4);
00289 ASTD (BFD_RELOC_16_PCREL, 5);
00290 ASTD (BFD_RELOC_32_PCREL, 6);
00291 default: return (reloc_howto_type *) NULL;
00292 }
00293 }
00294
00295 #define MY_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
00296 #define MY_bfd_link_add_symbols _bfd_generic_link_add_symbols
00297 #define MY_final_link_callback should_not_be_used
00298 #define MY_bfd_final_link _bfd_generic_final_link
00299
00300 #define MY_bfd_reloc_type_lookup riscix_reloc_type_lookup
00301 #define MY_canonicalize_reloc riscix_canonicalize_reloc
00302 #define MY_object_p riscix_object_p
00303
00304 static const bfd_target *riscix_callback PARAMS ((bfd *));
00305
00306 void
00307 riscix_swap_std_reloc_out (abfd, g, natptr)
00308 bfd *abfd;
00309 arelent *g;
00310 struct reloc_std_external *natptr;
00311 {
00312 int r_index;
00313 asymbol *sym = *(g->sym_ptr_ptr);
00314 int r_extern;
00315 int r_length;
00316 int r_pcrel;
00317 int r_neg = 0;
00318 asection *output_section = sym->section->output_section;
00319
00320 PUT_WORD(abfd, g->address, natptr->r_address);
00321
00322 r_length = g->howto->size ;
00323 if (r_length < 0)
00324 {
00325 r_length = -r_length;
00326 r_neg = 1;
00327 }
00328
00329 r_pcrel = (int) g->howto->pc_relative;
00330
00331
00332
00333
00334
00335 if (r_length == 3)
00336 r_pcrel = r_pcrel ? 0 : 1;
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348 if (bfd_is_com_section (output_section)
00349 || output_section == &bfd_abs_section
00350 || output_section == &bfd_und_section)
00351 {
00352 if (bfd_abs_section.symbol == sym)
00353 {
00354
00355
00356 r_index = 0;
00357 r_extern = 0;
00358 }
00359 else
00360 {
00361
00362 r_extern = 1;
00363 r_index = (*g->sym_ptr_ptr)->udata.i;
00364 }
00365 }
00366 else
00367 {
00368
00369 r_extern = 0;
00370 r_index = output_section->target_index;
00371 }
00372
00373
00374 if (bfd_header_big_endian (abfd))
00375 {
00376 natptr->r_index[0] = r_index >> 16;
00377 natptr->r_index[1] = r_index >> 8;
00378 natptr->r_index[2] = r_index;
00379 natptr->r_type[0] =
00380 ( (r_extern ? RELOC_STD_BITS_EXTERN_BIG: 0)
00381 | (r_pcrel ? RELOC_STD_BITS_PCREL_BIG: 0)
00382 | (r_neg ? RELOC_STD_BITS_BASEREL_BIG: 0)
00383 | (r_length << RELOC_STD_BITS_LENGTH_SH_BIG));
00384 }
00385 else
00386 {
00387 natptr->r_index[2] = r_index >> 16;
00388 natptr->r_index[1] = r_index >> 8;
00389 natptr->r_index[0] = r_index;
00390 natptr->r_type[0] =
00391 ( (r_extern ? RELOC_STD_BITS_EXTERN_LITTLE: 0)
00392 | (r_pcrel ? RELOC_STD_BITS_PCREL_LITTLE: 0)
00393 | (r_neg ? RELOC_STD_BITS_BASEREL_LITTLE: 0)
00394 | (r_length << RELOC_STD_BITS_LENGTH_SH_LITTLE));
00395 }
00396 }
00397
00398 bfd_boolean
00399 riscix_squirt_out_relocs (abfd, section)
00400 bfd *abfd;
00401 asection *section;
00402 {
00403 arelent **generic;
00404 unsigned char *native, *natptr;
00405 size_t each_size;
00406
00407 unsigned int count = section->reloc_count;
00408 bfd_size_type natsize;
00409
00410 if (count == 0)
00411 return TRUE;
00412
00413 each_size = obj_reloc_entry_size (abfd);
00414 natsize = each_size;
00415 natsize *= count;
00416 native = (unsigned char *) bfd_zalloc (abfd, natsize);
00417 if (!native)
00418 return FALSE;
00419
00420 generic = section->orelocation;
00421
00422 for (natptr = native;
00423 count != 0;
00424 --count, natptr += each_size, ++generic)
00425 riscix_swap_std_reloc_out (abfd, *generic,
00426 (struct reloc_std_external *) natptr);
00427
00428 if (bfd_bwrite ((PTR) native, natsize, abfd) != natsize)
00429 {
00430 bfd_release (abfd, native);
00431 return FALSE;
00432 }
00433
00434 bfd_release (abfd, native);
00435 return TRUE;
00436 }
00437
00438
00439
00440
00441
00442 long
00443 MY(canonicalize_reloc) (abfd, section, relptr, symbols)
00444 bfd *abfd;
00445 sec_ptr section;
00446 arelent **relptr;
00447 asymbol **symbols;
00448 {
00449 arelent *tblptr = section->relocation;
00450 unsigned int count, c;
00451 extern reloc_howto_type NAME(aout,std_howto_table)[];
00452
00453
00454 if (section->flags & SEC_CONSTRUCTOR) {
00455 arelent_chain *chain = section->constructor_chain;
00456
00457 for (count = 0; count < section->reloc_count; count++) {
00458 *relptr++ = &chain->relent;
00459 chain = chain->next;
00460 }
00461 *relptr = 0;
00462 return section->reloc_count;
00463 }
00464 if (tblptr && section->reloc_count) {
00465 for (count = 0; count++ < section->reloc_count;)
00466 *relptr++ = tblptr++;
00467 *relptr = 0;
00468 return section->reloc_count;
00469 }
00470
00471 if (!NAME(aout,slurp_reloc_table) (abfd, section, symbols))
00472 return -1;
00473 tblptr = section->relocation;
00474
00475
00476 for (count = 0; count++ < section->reloc_count;)
00477 {
00478 c = tblptr->howto - NAME(aout,std_howto_table);
00479 BFD_ASSERT (c < RISCIX_TABLE_SIZE);
00480 tblptr->howto = &riscix_std_reloc_howto[c];
00481
00482 *relptr++ = tblptr++;
00483 }
00484 *relptr = 0;
00485 return section->reloc_count;
00486 }
00487
00488
00489
00490
00491 const bfd_target *
00492 riscix_some_aout_object_p (abfd, execp, callback_to_real_object_p)
00493 bfd *abfd;
00494 struct internal_exec *execp;
00495 const bfd_target *(*callback_to_real_object_p) PARAMS ((bfd *));
00496 {
00497 struct aout_data_struct *rawptr, *oldrawptr;
00498 const bfd_target *result;
00499 bfd_size_type amt = sizeof (struct aout_data_struct);
00500
00501 rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt);
00502
00503 if (rawptr == NULL)
00504 return 0;
00505
00506 oldrawptr = abfd->tdata.aout_data;
00507 abfd->tdata.aout_data = rawptr;
00508
00509
00510
00511
00512
00513 if (oldrawptr != NULL)
00514 *abfd->tdata.aout_data = *oldrawptr;
00515
00516 abfd->tdata.aout_data->a.hdr = &rawptr->e;
00517 *(abfd->tdata.aout_data->a.hdr) = *execp;
00518
00519 execp = abfd->tdata.aout_data->a.hdr;
00520
00521
00522 abfd->flags = BFD_NO_FLAGS;
00523 if (execp->a_drsize || execp->a_trsize)
00524 abfd->flags |= HAS_RELOC;
00525
00526 if (execp->a_syms)
00527 abfd->flags |= HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS;
00528 if (N_DYNAMIC(*execp))
00529 abfd->flags |= DYNAMIC;
00530
00531 if ((execp->a_info & MF_SQUEEZED) != 0)
00532
00533 {
00534 bfd_set_error (bfd_error_wrong_format);
00535 return NULL;
00536 }
00537 else if ((execp->a_info & MF_IS_SL) != 0)
00538 {
00539 bfd_set_error (bfd_error_wrong_format);
00540 return NULL;
00541 }
00542 else if (N_MAGIC (*execp) == ZMAGIC)
00543 {
00544 abfd->flags |= D_PAGED | WP_TEXT;
00545 adata (abfd).magic = z_magic;
00546 }
00547 else if (N_MAGIC (*execp) == NMAGIC)
00548 {
00549 abfd->flags |= WP_TEXT;
00550 adata (abfd).magic = n_magic;
00551 }
00552 else if (N_MAGIC (*execp) == OMAGIC)
00553 adata (abfd).magic = o_magic;
00554 else
00555 {
00556
00557
00558 abort ();
00559 }
00560
00561 bfd_get_start_address (abfd) = execp->a_entry;
00562
00563 obj_aout_symbols (abfd) = (aout_symbol_type *)NULL;
00564 bfd_get_symcount (abfd) = execp->a_syms / sizeof (struct external_nlist);
00565
00566
00567 obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
00568
00569
00570 obj_symbol_entry_size (abfd) = EXTERNAL_NLIST_SIZE;
00571
00572 obj_aout_external_syms (abfd) = NULL;
00573 obj_aout_external_strings (abfd) = NULL;
00574 obj_aout_sym_hashes (abfd) = NULL;
00575
00576 if (! NAME(aout,make_sections) (abfd))
00577 return NULL;
00578
00579 obj_datasec (abfd)->size = execp->a_data;
00580 obj_bsssec (abfd)->size = execp->a_bss;
00581
00582 obj_textsec (abfd)->flags =
00583 (execp->a_trsize != 0
00584 ? (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS | SEC_RELOC)
00585 : (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS));
00586 obj_datasec (abfd)->flags =
00587 (execp->a_drsize != 0
00588 ? (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS | SEC_RELOC)
00589 : (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS));
00590 obj_bsssec (abfd)->flags = SEC_ALLOC;
00591
00592 result = (*callback_to_real_object_p) (abfd);
00593
00594 #if defined(MACH) || defined(STAT_FOR_EXEC)
00595
00596
00597
00598
00599
00600
00601
00602
00603 {
00604 struct stat stat_buf;
00605 if (abfd->iostream != NULL
00606 && (abfd->flags & BFD_IN_MEMORY) == 0
00607 && (fstat(fileno((FILE *) (abfd->iostream)), &stat_buf) == 0)
00608 && ((stat_buf.st_mode & 0111) != 0))
00609 abfd->flags |= EXEC_P;
00610 }
00611 #else
00612
00613
00614
00615
00616
00617
00618
00619
00620 if ((execp->a_entry >= obj_textsec(abfd)->vma) &&
00621 (execp->a_entry < obj_textsec(abfd)->vma + obj_textsec(abfd)->size))
00622 abfd->flags |= EXEC_P;
00623 #endif
00624 if (result)
00625 {
00626 }
00627 else
00628 {
00629 free (rawptr);
00630 abfd->tdata.aout_data = oldrawptr;
00631 }
00632 return result;
00633 }
00634
00635 static const bfd_target *
00636 MY(object_p) (abfd)
00637 bfd *abfd;
00638 {
00639 struct external_exec exec_bytes;
00640 struct internal_exec exec;
00641 const bfd_target *target;
00642
00643 if (bfd_bread ((PTR) &exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, abfd)
00644 != EXEC_BYTES_SIZE)
00645 {
00646 if (bfd_get_error () != bfd_error_system_call)
00647 bfd_set_error (bfd_error_wrong_format);
00648 return 0;
00649 }
00650
00651 exec.a_info = H_GET_32 (abfd, exec_bytes.e_info);
00652
00653 if (N_BADMAG (exec)) return 0;
00654 #ifdef MACHTYPE_OK
00655 if (!(MACHTYPE_OK (N_MACHTYPE (exec)))) return 0;
00656 #endif
00657
00658 NAME(aout,swap_exec_header_in) (abfd, &exec_bytes, &exec);
00659
00660 target = riscix_some_aout_object_p (abfd, &exec, MY(callback));
00661
00662 return target;
00663 }
00664
00665 #include "aout-target.h"