OLD | NEW |
1 /* BFD back-end for AIX on PS/2 core files. | 1 /* BFD back-end for AIX on PS/2 core files. |
2 This was based on trad-core.c, which was written by John Gilmore of | 2 This was based on trad-core.c, which was written by John Gilmore of |
3 Cygnus Support. | 3 Cygnus Support. |
4 Copyright 1988, 1989, 1991, 1992, 1993, 1994, 1996, 1998, 1999, 2000, | 4 Copyright 1988, 1989, 1991, 1992, 1993, 1994, 1996, 1998, 1999, 2000, |
5 2001, 2002, 2004, 2005, 2006, 2007, 2010, 2011 | 5 2001, 2002, 2004, 2005, 2006, 2007, 2010, 2011, 2012 |
6 Free Software Foundation, Inc. | 6 Free Software Foundation, Inc. |
7 Written by Minh Tran-Le <TRANLE@INTELLICORP.COM>. | 7 Written by Minh Tran-Le <TRANLE@INTELLICORP.COM>. |
8 Converted to back end form by Ian Lance Taylor <ian@cygnus.com>. | 8 Converted to back end form by Ian Lance Taylor <ian@cygnus.com>. |
9 | 9 |
10 This file is part of BFD, the Binary File Descriptor library. | 10 This file is part of BFD, the Binary File Descriptor library. |
11 | 11 |
12 This program is free software; you can redistribute it and/or modify | 12 This program is free software; you can redistribute it and/or modify |
13 it under the terms of the GNU General Public License as published by | 13 it under the terms of the GNU General Public License as published by |
14 the Free Software Foundation; either version 3 of the License, or | 14 the Free Software Foundation; either version 3 of the License, or |
15 (at your option) any later version. | 15 (at your option) any later version. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 #define core_hdr(bfd) \ | 52 #define core_hdr(bfd) \ |
53 (((bfd->tdata.trad_core_data))->hdr) | 53 (((bfd->tdata.trad_core_data))->hdr) |
54 #define core_section(bfd,n) \ | 54 #define core_section(bfd,n) \ |
55 (((bfd)->tdata.trad_core_data)->sections[n]) | 55 (((bfd)->tdata.trad_core_data)->sections[n]) |
56 #define core_regsec(bfd) \ | 56 #define core_regsec(bfd) \ |
57 (((bfd)->tdata.trad_core_data)->reg_section) | 57 (((bfd)->tdata.trad_core_data)->reg_section) |
58 #define core_reg2sec(bfd) \ | 58 #define core_reg2sec(bfd) \ |
59 (((bfd)->tdata.trad_core_data)->reg2_section) | 59 (((bfd)->tdata.trad_core_data)->reg2_section) |
60 | 60 |
61 /* These are stored in the bfd's tdata. */ | 61 /* These are stored in the bfd's tdata. */ |
62 struct trad_core_struct { | 62 struct trad_core_struct |
| 63 { |
63 struct corehdr *hdr; /* core file header */ | 64 struct corehdr *hdr; /* core file header */ |
64 asection *reg_section; | 65 asection *reg_section; |
65 asection *reg2_section; | 66 asection *reg2_section; |
66 asection *sections[MAX_CORE_SEGS]; | 67 asection *sections[MAX_CORE_SEGS]; |
67 }; | 68 }; |
68 | 69 |
69 static void swap_abort PARAMS ((void)); | |
70 | |
71 static const bfd_target * | 70 static const bfd_target * |
72 aix386_core_file_p (abfd) | 71 aix386_core_file_p (bfd *abfd) |
73 bfd *abfd; | |
74 { | 72 { |
75 int i, n; | 73 int i, n; |
76 unsigned char longbuf[4]; /* Raw bytes of various header fields */ | 74 unsigned char longbuf[4]; /* Raw bytes of various header fields */ |
77 bfd_size_type core_size = sizeof (struct corehdr); | 75 bfd_size_type core_size = sizeof (struct corehdr); |
78 bfd_size_type amt; | 76 bfd_size_type amt; |
79 struct corehdr *core; | 77 struct corehdr *core; |
80 struct mergem { | 78 struct mergem |
| 79 { |
81 struct trad_core_struct coredata; | 80 struct trad_core_struct coredata; |
82 struct corehdr internal_core; | 81 struct corehdr internal_core; |
83 } *mergem; | 82 } *mergem; |
84 flagword flags; | 83 flagword flags; |
85 | 84 |
86 amt = sizeof (longbuf); | 85 amt = sizeof (longbuf); |
87 if (bfd_bread ((PTR) longbuf, amt, abfd) != amt) | 86 if (bfd_bread (longbuf, amt, abfd) != amt) |
88 { | 87 { |
89 if (bfd_get_error () != bfd_error_system_call) | 88 if (bfd_get_error () != bfd_error_system_call) |
90 bfd_set_error (bfd_error_wrong_format); | 89 bfd_set_error (bfd_error_wrong_format); |
91 return 0; | 90 return 0; |
92 } | 91 } |
93 | 92 |
94 if (strncmp (longbuf, COR_MAGIC, 4)) | 93 if (strncmp (longbuf, COR_MAGIC, 4)) |
95 return 0; | 94 return 0; |
96 | 95 |
97 if (bfd_seek (abfd, (file_ptr) 0, 0) != 0) | 96 if (bfd_seek (abfd, (file_ptr) 0, 0) != 0) |
98 return 0; | 97 return 0; |
99 | 98 |
100 amt = sizeof (struct mergem); | 99 amt = sizeof (struct mergem); |
101 mergem = (struct mergem *) bfd_zalloc (abfd, amt); | 100 mergem = (struct mergem *) bfd_zalloc (abfd, amt); |
102 if (mergem == NULL) | 101 if (mergem == NULL) |
103 return 0; | 102 return 0; |
104 | 103 |
105 core = &mergem->internal_core; | 104 core = &mergem->internal_core; |
106 | 105 |
107 if ((bfd_bread ((PTR) core, core_size, abfd)) != core_size) | 106 if ((bfd_bread (core, core_size, abfd)) != core_size) |
108 { | 107 { |
109 if (bfd_get_error () != bfd_error_system_call) | 108 if (bfd_get_error () != bfd_error_system_call) |
110 bfd_set_error (bfd_error_wrong_format); | 109 bfd_set_error (bfd_error_wrong_format); |
111 loser: | 110 loser: |
112 bfd_release (abfd, (char *) mergem); | 111 bfd_release (abfd, (char *) mergem); |
113 abfd->tdata.any = NULL; | 112 abfd->tdata.any = NULL; |
114 bfd_section_list_clear (abfd); | 113 bfd_section_list_clear (abfd); |
115 return 0; | 114 return 0; |
116 } | 115 } |
117 | 116 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 core_section (abfd, n)->vma = core->cd_segs[i].cs_address; | 188 core_section (abfd, n)->vma = core->cd_segs[i].cs_address; |
190 core_section (abfd, n)->filepos = core->cd_segs[i].cs_offset; | 189 core_section (abfd, n)->filepos = core->cd_segs[i].cs_offset; |
191 core_section (abfd, n)->alignment_power = 2; | 190 core_section (abfd, n)->alignment_power = 2; |
192 n++; | 191 n++; |
193 } | 192 } |
194 | 193 |
195 return abfd->xvec; | 194 return abfd->xvec; |
196 } | 195 } |
197 | 196 |
198 static char * | 197 static char * |
199 aix386_core_file_failing_command (abfd) | 198 aix386_core_file_failing_command (bfd *abfd) |
200 bfd *abfd; | |
201 { | 199 { |
202 return core_hdr (abfd)->cd_comm; | 200 return core_hdr (abfd)->cd_comm; |
203 } | 201 } |
204 | 202 |
205 static int | 203 static int |
206 aix386_core_file_failing_signal (abfd) | 204 aix386_core_file_failing_signal (bfd *abfd) |
207 bfd *abfd; | |
208 { | 205 { |
209 return core_hdr (abfd)->cd_cursig; | 206 return core_hdr (abfd)->cd_cursig; |
210 } | 207 } |
211 | 208 |
212 #define aix386_core_file_matches_executable_p generic_core_file_matches_executab
le_p | 209 #define aix386_core_file_matches_executable_p generic_core_file_matches_executab
le_p |
213 | 210 |
214 #define aix386_core_file_pid _bfd_nocore_core_file_pid | 211 #define aix386_core_file_pid _bfd_nocore_core_file_pid |
215 | 212 |
216 /* If somebody calls any byte-swapping routines, shoot them. */ | 213 /* If somebody calls any byte-swapping routines, shoot them. */ |
217 | 214 |
218 static void | 215 static void |
219 swap_abort () | 216 swap_abort (void) |
220 { | 217 { |
221 /* This way doesn't require any declaration for ANSI to fuck up. */ | 218 /* This way doesn't require any declaration for ANSI to fuck up. */ |
222 abort (); | 219 abort (); |
223 } | 220 } |
224 | 221 |
225 #define NO_GET ((bfd_vma (*) (const void *)) swap_abort) | 222 #define NO_GET ((bfd_vma (*) (const void *)) swap_abort) |
226 #define NO_PUT ((void (*) (bfd_vma, void *)) swap_abort) | 223 #define NO_PUT ((void (*) (bfd_vma, void *)) swap_abort) |
227 #define NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort) | 224 #define NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort) |
228 #define NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort) | 225 #define NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort) |
229 #define NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort) | 226 #define NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort) |
230 #define NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort) | 227 #define NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort) |
231 | 228 |
232 const bfd_target aix386_core_vec = { | 229 const bfd_target aix386_core_vec = |
| 230 { |
233 "aix386-core", | 231 "aix386-core", |
234 bfd_target_unknown_flavour, | 232 bfd_target_unknown_flavour, |
235 BFD_ENDIAN_BIG, /* target byte order */ | 233 BFD_ENDIAN_BIG, /* target byte order */ |
236 BFD_ENDIAN_BIG, /* target headers byte order */ | 234 BFD_ENDIAN_BIG, /* target headers byte order */ |
237 (HAS_RELOC | EXEC_P | /* object flags */ | 235 (HAS_RELOC | EXEC_P | /* object flags */ |
238 HAS_LINENO | HAS_DEBUG | | 236 HAS_LINENO | HAS_DEBUG | |
239 HAS_SYMS | HAS_LOCALS | WP_TEXT), | 237 HAS_SYMS | HAS_LOCALS | WP_TEXT), |
240 | 238 |
241 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ | 239 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ |
242 0, /* leading underscore */ | 240 0, /* leading underscore */ |
(...skipping 19 matching lines...) Expand all Loading... |
262 BFD_JUMP_TABLE_CORE (aix386), | 260 BFD_JUMP_TABLE_CORE (aix386), |
263 BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive), | 261 BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive), |
264 BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols), | 262 BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols), |
265 BFD_JUMP_TABLE_RELOCS (_bfd_norelocs), | 263 BFD_JUMP_TABLE_RELOCS (_bfd_norelocs), |
266 BFD_JUMP_TABLE_WRITE (_bfd_generic), | 264 BFD_JUMP_TABLE_WRITE (_bfd_generic), |
267 BFD_JUMP_TABLE_LINK (_bfd_nolink), | 265 BFD_JUMP_TABLE_LINK (_bfd_nolink), |
268 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), | 266 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), |
269 | 267 |
270 NULL, | 268 NULL, |
271 | 269 |
272 (PTR) 0 | 270 NULL |
273 }; | 271 }; |
OLD | NEW |