OLD | NEW |
1 /* | 1 /* |
2 * Stabs debugging format | 2 * Stabs debugging format |
3 * | 3 * |
4 * Copyright (C) 2003-2007 Michael Urman | 4 * Copyright (C) 2003-2007 Michael Urman |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
11 * 2. Redistributions in binary form must reproduce the above copyright | 11 * 2. Redistributions in binary form must reproduce the above copyright |
12 * notice, this list of conditions and the following disclaimer in the | 12 * notice, this list of conditions and the following disclaimer in the |
13 * documentation and/or other materials provided with the distribution. | 13 * documentation and/or other materials provided with the distribution. |
14 * | 14 * |
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' | 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' |
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE | 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE |
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * POSSIBILITY OF SUCH DAMAGE. | 25 * POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 #include <util.h> | 27 #include <util.h> |
28 /*@unused@*/ RCSID("$Id: stabs-dbgfmt.c 2130 2008-10-07 05:38:11Z peter $"); | |
29 | 28 |
30 #include <libyasm.h> | 29 #include <libyasm.h> |
31 | 30 |
32 typedef enum { | 31 typedef enum { |
33 N_UNDF = 0x00, /* Undefined */ | 32 N_UNDF = 0x00, /* Undefined */ |
34 N_GSYM = 0x20, /* Global symbol */ | 33 N_GSYM = 0x20, /* Global symbol */ |
35 N_FNAME = 0x22, /* Function name (BSD Fortran) */ | 34 N_FNAME = 0x22, /* Function name (BSD Fortran) */ |
36 N_FUN = 0x24, /* Function name or Text segment variable */ | 35 N_FUN = 0x24, /* Function name or Text segment variable */ |
37 N_STSYM = 0x26, /* Data segment file-scope variable */ | 36 N_STSYM = 0x26, /* Data segment file-scope variable */ |
38 N_LCSYM = 0x28, /* BSS segment file-scope variable */ | 37 N_LCSYM = 0x28, /* BSS segment file-scope variable */ |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 } stabs_stab; | 111 } stabs_stab; |
113 | 112 |
114 /* Bytecode callback function prototypes */ | 113 /* Bytecode callback function prototypes */ |
115 | 114 |
116 static void stabs_bc_str_destroy(void *contents); | 115 static void stabs_bc_str_destroy(void *contents); |
117 static void stabs_bc_str_print(const void *contents, FILE *f, int | 116 static void stabs_bc_str_print(const void *contents, FILE *f, int |
118 indent_level); | 117 indent_level); |
119 static int stabs_bc_str_calc_len | 118 static int stabs_bc_str_calc_len |
120 (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); | 119 (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); |
121 static int stabs_bc_str_tobytes | 120 static int stabs_bc_str_tobytes |
122 (yasm_bytecode *bc, unsigned char **bufp, void *d, | 121 (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, |
123 yasm_output_value_func output_value, | 122 yasm_output_value_func output_value, |
124 /*@null@*/ yasm_output_reloc_func output_reloc); | 123 /*@null@*/ yasm_output_reloc_func output_reloc); |
125 | 124 |
126 static void stabs_bc_stab_destroy(void *contents); | 125 static void stabs_bc_stab_destroy(void *contents); |
127 static void stabs_bc_stab_print(const void *contents, FILE *f, int | 126 static void stabs_bc_stab_print(const void *contents, FILE *f, int |
128 indent_level); | 127 indent_level); |
129 static int stabs_bc_stab_calc_len | 128 static int stabs_bc_stab_calc_len |
130 (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); | 129 (yasm_bytecode *bc, yasm_bc_add_span_func add_span, void *add_span_data); |
131 static int stabs_bc_stab_tobytes | 130 static int stabs_bc_stab_tobytes |
132 (yasm_bytecode *bc, unsigned char **bufp, void *d, | 131 (yasm_bytecode *bc, unsigned char **bufp, unsigned char *bufstart, void *d, |
133 yasm_output_value_func output_value, | 132 yasm_output_value_func output_value, |
134 /*@null@*/ yasm_output_reloc_func output_reloc); | 133 /*@null@*/ yasm_output_reloc_func output_reloc); |
135 | 134 |
136 /* Bytecode callback structures */ | 135 /* Bytecode callback structures */ |
137 | 136 |
138 static const yasm_bytecode_callback stabs_bc_str_callback = { | 137 static const yasm_bytecode_callback stabs_bc_str_callback = { |
139 stabs_bc_str_destroy, | 138 stabs_bc_str_destroy, |
140 stabs_bc_str_print, | 139 stabs_bc_str_print, |
141 yasm_bc_finalize_common, | 140 yasm_bc_finalize_common, |
142 NULL, | 141 NULL, |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 stab->other = 0; | 397 stab->other = 0; |
399 if (info.stabcount > 0xffff) { | 398 if (info.stabcount > 0xffff) { |
400 yasm_warn_set(YASM_WARN_GENERAL, N_("over 65535 stabs")); | 399 yasm_warn_set(YASM_WARN_GENERAL, N_("over 65535 stabs")); |
401 yasm_errwarn_propagate(errwarns, 0); | 400 yasm_errwarn_propagate(errwarns, 0); |
402 stab->desc = 0xffff; | 401 stab->desc = 0xffff; |
403 } else | 402 } else |
404 stab->desc = (unsigned short)info.stabcount; | 403 stab->desc = (unsigned short)info.stabcount; |
405 } | 404 } |
406 | 405 |
407 static int | 406 static int |
408 stabs_bc_stab_tobytes(yasm_bytecode *bc, unsigned char **bufp, void *d, | 407 stabs_bc_stab_tobytes(yasm_bytecode *bc, unsigned char **bufp, |
| 408 unsigned char *bufstart, void *d, |
409 yasm_output_value_func output_value, | 409 yasm_output_value_func output_value, |
410 yasm_output_reloc_func output_reloc) | 410 yasm_output_reloc_func output_reloc) |
411 { | 411 { |
412 /* This entire function, essentially the core of rendering stabs to a file, | 412 /* This entire function, essentially the core of rendering stabs to a file, |
413 * needs to become endian aware. Size appears not to be an issue, as known | 413 * needs to become endian aware. Size appears not to be an issue, as known |
414 * 64-bit systems use truncated values in 32-bit fields. */ | 414 * 64-bit systems use truncated values in 32-bit fields. */ |
415 | 415 |
416 const stabs_stab *stab = (const stabs_stab *)bc->contents; | 416 const stabs_stab *stab = (const stabs_stab *)bc->contents; |
417 unsigned char *buf = *bufp; | 417 unsigned char *buf = *bufp; |
418 | 418 |
(...skipping 13 matching lines...) Expand all Loading... |
432 } | 432 } |
433 else { | 433 else { |
434 YASM_WRITE_32_L(buf, stab->value); | 434 YASM_WRITE_32_L(buf, stab->value); |
435 } | 435 } |
436 | 436 |
437 *bufp = buf; | 437 *bufp = buf; |
438 return 0; | 438 return 0; |
439 } | 439 } |
440 | 440 |
441 static int | 441 static int |
442 stabs_bc_str_tobytes(yasm_bytecode *bc, unsigned char **bufp, void *d, | 442 stabs_bc_str_tobytes(yasm_bytecode *bc, unsigned char **bufp, |
| 443 unsigned char *bufstart, void *d, |
443 yasm_output_value_func output_value, | 444 yasm_output_value_func output_value, |
444 yasm_output_reloc_func output_reloc) | 445 yasm_output_reloc_func output_reloc) |
445 { | 446 { |
446 const char *str = (const char *)bc->contents; | 447 const char *str = (const char *)bc->contents; |
447 unsigned char *buf = *bufp; | 448 unsigned char *buf = *bufp; |
448 | 449 |
449 strcpy((char *)buf, str); | 450 strcpy((char *)buf, str); |
450 buf += strlen(str)+1; | 451 buf += strlen(str)+1; |
451 | 452 |
452 *bufp = buf; | 453 *bufp = buf; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 | 502 |
502 /* Define dbgfmt structure -- see dbgfmt.h for details */ | 503 /* Define dbgfmt structure -- see dbgfmt.h for details */ |
503 yasm_dbgfmt_module yasm_stabs_LTX_dbgfmt = { | 504 yasm_dbgfmt_module yasm_stabs_LTX_dbgfmt = { |
504 "Stabs debugging format", | 505 "Stabs debugging format", |
505 "stabs", | 506 "stabs", |
506 NULL, /* no directives */ | 507 NULL, /* no directives */ |
507 stabs_dbgfmt_create, | 508 stabs_dbgfmt_create, |
508 stabs_dbgfmt_destroy, | 509 stabs_dbgfmt_destroy, |
509 stabs_dbgfmt_generate | 510 stabs_dbgfmt_generate |
510 }; | 511 }; |
OLD | NEW |