unroll.c: Convert prototypes to ISO C90.
* unroll.c: Convert prototypes to ISO C90. * varasm.c: Likewise. * varray.c: Likewise. * varray.h: Likewise. * vmsdbgout.c: Likewise. * xcoffout.c: Likewise. * xcoffout.h: Likewise. From-SVN: r69007
This commit is contained in:
parent
dd486eb27c
commit
2e1eedd6bb
@ -1,3 +1,13 @@
|
||||
2003-07-06 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* unroll.c: Likewise.
|
||||
* varasm.c: Likewise.
|
||||
* varray.c: Likewise.
|
||||
* varray.h: Likewise.
|
||||
* vmsdbgout.c: Likewise.
|
||||
* xcoffout.c: Likewise.
|
||||
* xcoffout.h: Likewise.
|
||||
|
||||
2003-07-06 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* gcov-io.h: Add a local time stamp.
|
||||
|
166
gcc/unroll.c
166
gcc/unroll.c
@ -1,5 +1,6 @@
|
||||
/* Try to unroll loops, and split induction variables.
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
|
||||
2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by James E. Wilson, Cygnus Support/UC Berkeley.
|
||||
|
||||
@ -196,28 +197,26 @@ static int *splittable_regs_updates;
|
||||
|
||||
/* Forward declarations. */
|
||||
|
||||
static rtx simplify_cmp_and_jump_insns PARAMS ((enum rtx_code,
|
||||
enum machine_mode,
|
||||
rtx, rtx, rtx));
|
||||
static void init_reg_map PARAMS ((struct inline_remap *, int));
|
||||
static rtx calculate_giv_inc PARAMS ((rtx, rtx, unsigned int));
|
||||
static rtx initial_reg_note_copy PARAMS ((rtx, struct inline_remap *));
|
||||
static void final_reg_note_copy PARAMS ((rtx *, struct inline_remap *));
|
||||
static void copy_loop_body PARAMS ((struct loop *, rtx, rtx,
|
||||
struct inline_remap *, rtx, int,
|
||||
enum unroll_types, rtx, rtx, rtx, rtx));
|
||||
static int find_splittable_regs PARAMS ((const struct loop *,
|
||||
enum unroll_types, int));
|
||||
static int find_splittable_givs PARAMS ((const struct loop *,
|
||||
struct iv_class *, enum unroll_types,
|
||||
rtx, int));
|
||||
static int reg_dead_after_loop PARAMS ((const struct loop *, rtx));
|
||||
static rtx fold_rtx_mult_add PARAMS ((rtx, rtx, rtx, enum machine_mode));
|
||||
static rtx remap_split_bivs PARAMS ((struct loop *, rtx));
|
||||
static rtx find_common_reg_term PARAMS ((rtx, rtx));
|
||||
static rtx subtract_reg_term PARAMS ((rtx, rtx));
|
||||
static rtx loop_find_equiv_value PARAMS ((const struct loop *, rtx));
|
||||
static rtx ujump_to_loop_cont PARAMS ((rtx, rtx));
|
||||
static rtx simplify_cmp_and_jump_insns (enum rtx_code, enum machine_mode,
|
||||
rtx, rtx, rtx);
|
||||
static void init_reg_map (struct inline_remap *, int);
|
||||
static rtx calculate_giv_inc (rtx, rtx, unsigned int);
|
||||
static rtx initial_reg_note_copy (rtx, struct inline_remap *);
|
||||
static void final_reg_note_copy (rtx *, struct inline_remap *);
|
||||
static void copy_loop_body (struct loop *, rtx, rtx,
|
||||
struct inline_remap *, rtx, int,
|
||||
enum unroll_types, rtx, rtx, rtx, rtx);
|
||||
static int find_splittable_regs (const struct loop *, enum unroll_types,
|
||||
int);
|
||||
static int find_splittable_givs (const struct loop *, struct iv_class *,
|
||||
enum unroll_types, rtx, int);
|
||||
static int reg_dead_after_loop (const struct loop *, rtx);
|
||||
static rtx fold_rtx_mult_add (rtx, rtx, rtx, enum machine_mode);
|
||||
static rtx remap_split_bivs (struct loop *, rtx);
|
||||
static rtx find_common_reg_term (rtx, rtx);
|
||||
static rtx subtract_reg_term (rtx, rtx);
|
||||
static rtx loop_find_equiv_value (const struct loop *, rtx);
|
||||
static rtx ujump_to_loop_cont (rtx, rtx);
|
||||
|
||||
/* Try to unroll one loop and split induction variables in the loop.
|
||||
|
||||
@ -229,10 +228,7 @@ static rtx ujump_to_loop_cont PARAMS ((rtx, rtx));
|
||||
in loop.c. */
|
||||
|
||||
void
|
||||
unroll_loop (loop, insn_count, strength_reduce_p)
|
||||
struct loop *loop;
|
||||
int insn_count;
|
||||
int strength_reduce_p;
|
||||
unroll_loop (struct loop *loop, int insn_count, int strength_reduce_p)
|
||||
{
|
||||
struct loop_info *loop_info = LOOP_INFO (loop);
|
||||
struct loop_ivs *ivs = LOOP_IVS (loop);
|
||||
@ -1332,16 +1328,14 @@ unroll_loop (loop, insn_count, strength_reduce_p)
|
||||
free (map);
|
||||
}
|
||||
|
||||
/* A helper function for unroll_loop. Emit a compare and branch to
|
||||
/* A helper function for unroll_loop. Emit a compare and branch to
|
||||
satisfy (CMP OP1 OP2), but pass this through the simplifier first.
|
||||
If the branch turned out to be conditional, return it, otherwise
|
||||
return NULL. */
|
||||
|
||||
static rtx
|
||||
simplify_cmp_and_jump_insns (code, mode, op0, op1, label)
|
||||
enum rtx_code code;
|
||||
enum machine_mode mode;
|
||||
rtx op0, op1, label;
|
||||
simplify_cmp_and_jump_insns (enum rtx_code code, enum machine_mode mode,
|
||||
rtx op0, rtx op1, rtx label)
|
||||
{
|
||||
rtx t, insn;
|
||||
|
||||
@ -1387,10 +1381,9 @@ simplify_cmp_and_jump_insns (code, mode, op0, op1, label)
|
||||
reflected in RTX_COST. */
|
||||
|
||||
int
|
||||
precondition_loop_p (loop, initial_value, final_value, increment, mode)
|
||||
const struct loop *loop;
|
||||
rtx *initial_value, *final_value, *increment;
|
||||
enum machine_mode *mode;
|
||||
precondition_loop_p (const struct loop *loop, rtx *initial_value,
|
||||
rtx *final_value, rtx *increment,
|
||||
enum machine_mode *mode)
|
||||
{
|
||||
rtx loop_start = loop->start;
|
||||
struct loop_info *loop_info = LOOP_INFO (loop);
|
||||
@ -1547,9 +1540,7 @@ precondition_loop_p (loop, initial_value, final_value, increment, mode)
|
||||
modes. */
|
||||
|
||||
static void
|
||||
init_reg_map (map, maxregnum)
|
||||
struct inline_remap *map;
|
||||
int maxregnum;
|
||||
init_reg_map (struct inline_remap *map, int maxregnum)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -1574,9 +1565,7 @@ init_reg_map (map, maxregnum)
|
||||
The return value is the amount that the giv is incremented by. */
|
||||
|
||||
static rtx
|
||||
calculate_giv_inc (pattern, src_insn, regno)
|
||||
rtx pattern, src_insn;
|
||||
unsigned int regno;
|
||||
calculate_giv_inc (rtx pattern, rtx src_insn, unsigned int regno)
|
||||
{
|
||||
rtx increment;
|
||||
rtx increment_total = 0;
|
||||
@ -1697,9 +1686,7 @@ calculate_giv_inc (pattern, src_insn, regno)
|
||||
the reg_map entries can change during copying. */
|
||||
|
||||
static rtx
|
||||
initial_reg_note_copy (notes, map)
|
||||
rtx notes;
|
||||
struct inline_remap *map;
|
||||
initial_reg_note_copy (rtx notes, struct inline_remap *map)
|
||||
{
|
||||
rtx copy;
|
||||
|
||||
@ -1725,9 +1712,7 @@ initial_reg_note_copy (notes, map)
|
||||
/* Fixup insn references in copied REG_NOTES. */
|
||||
|
||||
static void
|
||||
final_reg_note_copy (notesp, map)
|
||||
rtx *notesp;
|
||||
struct inline_remap *map;
|
||||
final_reg_note_copy (rtx *notesp, struct inline_remap *map)
|
||||
{
|
||||
while (*notesp)
|
||||
{
|
||||
@ -1757,16 +1742,11 @@ final_reg_note_copy (notesp, map)
|
||||
This is very similar to a loop in expand_inline_function. */
|
||||
|
||||
static void
|
||||
copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration,
|
||||
unroll_type, start_label, loop_end, insert_before,
|
||||
copy_notes_from)
|
||||
struct loop *loop;
|
||||
rtx copy_start, copy_end;
|
||||
struct inline_remap *map;
|
||||
rtx exit_label;
|
||||
int last_iteration;
|
||||
enum unroll_types unroll_type;
|
||||
rtx start_label, loop_end, insert_before, copy_notes_from;
|
||||
copy_loop_body (struct loop *loop, rtx copy_start, rtx copy_end,
|
||||
struct inline_remap *map, rtx exit_label,
|
||||
int last_iteration, enum unroll_types unroll_type,
|
||||
rtx start_label, rtx loop_end, rtx insert_before,
|
||||
rtx copy_notes_from)
|
||||
{
|
||||
struct loop_ivs *ivs = LOOP_IVS (loop);
|
||||
rtx insn, pattern;
|
||||
@ -2326,8 +2306,7 @@ copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration,
|
||||
won't fit in the immediate field of a PLUS insns. */
|
||||
|
||||
void
|
||||
emit_unrolled_add (dest_reg, src_reg, increment)
|
||||
rtx dest_reg, src_reg, increment;
|
||||
emit_unrolled_add (rtx dest_reg, rtx src_reg, rtx increment)
|
||||
{
|
||||
rtx result;
|
||||
|
||||
@ -2347,9 +2326,7 @@ emit_unrolled_add (dest_reg, src_reg, increment)
|
||||
and uses a negligible amount of CPU time on average. */
|
||||
|
||||
int
|
||||
back_branch_in_range_p (loop, insn)
|
||||
const struct loop *loop;
|
||||
rtx insn;
|
||||
back_branch_in_range_p (const struct loop *loop, rtx insn)
|
||||
{
|
||||
rtx p, q, target_insn;
|
||||
rtx loop_start = loop->start;
|
||||
@ -2395,9 +2372,7 @@ back_branch_in_range_p (loop, insn)
|
||||
value of giv's. */
|
||||
|
||||
static rtx
|
||||
fold_rtx_mult_add (mult1, mult2, add1, mode)
|
||||
rtx mult1, mult2, add1;
|
||||
enum machine_mode mode;
|
||||
fold_rtx_mult_add (rtx mult1, rtx mult2, rtx add1, enum machine_mode mode)
|
||||
{
|
||||
rtx temp, mult_res;
|
||||
rtx result;
|
||||
@ -2444,8 +2419,7 @@ fold_rtx_mult_add (mult1, mult2, add1, mode)
|
||||
if it can be calculated. Otherwise, returns 0. */
|
||||
|
||||
rtx
|
||||
biv_total_increment (bl)
|
||||
const struct iv_class *bl;
|
||||
biv_total_increment (const struct iv_class *bl)
|
||||
{
|
||||
struct induction *v;
|
||||
rtx result;
|
||||
@ -2496,10 +2470,8 @@ biv_total_increment (bl)
|
||||
times, since multiplies by small integers (1,2,3,4) are very cheap. */
|
||||
|
||||
static int
|
||||
find_splittable_regs (loop, unroll_type, unroll_number)
|
||||
const struct loop *loop;
|
||||
enum unroll_types unroll_type;
|
||||
int unroll_number;
|
||||
find_splittable_regs (const struct loop *loop,
|
||||
enum unroll_types unroll_type, int unroll_number)
|
||||
{
|
||||
struct loop_ivs *ivs = LOOP_IVS (loop);
|
||||
struct iv_class *bl;
|
||||
@ -2655,12 +2627,9 @@ find_splittable_regs (loop, unroll_type, unroll_number)
|
||||
Return the number of instructions that set splittable registers. */
|
||||
|
||||
static int
|
||||
find_splittable_givs (loop, bl, unroll_type, increment, unroll_number)
|
||||
const struct loop *loop;
|
||||
struct iv_class *bl;
|
||||
enum unroll_types unroll_type;
|
||||
rtx increment;
|
||||
int unroll_number ATTRIBUTE_UNUSED;
|
||||
find_splittable_givs (const struct loop *loop, struct iv_class *bl,
|
||||
enum unroll_types unroll_type, rtx increment,
|
||||
int unroll_number ATTRIBUTE_UNUSED)
|
||||
{
|
||||
struct loop_ivs *ivs = LOOP_IVS (loop);
|
||||
struct induction *v, *v2;
|
||||
@ -2894,9 +2863,7 @@ find_splittable_givs (loop, bl, unroll_type, increment, unroll_number)
|
||||
it can search past if statements and other similar structures. */
|
||||
|
||||
static int
|
||||
reg_dead_after_loop (loop, reg)
|
||||
const struct loop *loop;
|
||||
rtx reg;
|
||||
reg_dead_after_loop (const struct loop *loop, rtx reg)
|
||||
{
|
||||
rtx insn, label;
|
||||
enum rtx_code code;
|
||||
@ -2966,9 +2933,7 @@ reg_dead_after_loop (loop, reg)
|
||||
the end of the loop. If we can do it, return that value. */
|
||||
|
||||
rtx
|
||||
final_biv_value (loop, bl)
|
||||
const struct loop *loop;
|
||||
struct iv_class *bl;
|
||||
final_biv_value (const struct loop *loop, struct iv_class *bl)
|
||||
{
|
||||
unsigned HOST_WIDE_INT n_iterations = LOOP_INFO (loop)->n_iterations;
|
||||
rtx increment, tem;
|
||||
@ -3040,9 +3005,7 @@ final_biv_value (loop, bl)
|
||||
the end of the loop. If we can do it, return that value. */
|
||||
|
||||
rtx
|
||||
final_giv_value (loop, v)
|
||||
const struct loop *loop;
|
||||
struct induction *v;
|
||||
final_giv_value (const struct loop *loop, struct induction *v)
|
||||
{
|
||||
struct loop_ivs *ivs = LOOP_IVS (loop);
|
||||
struct iv_class *bl;
|
||||
@ -3169,9 +3132,7 @@ final_giv_value (loop, v)
|
||||
the SET_SRC of REG. */
|
||||
|
||||
static rtx
|
||||
loop_find_equiv_value (loop, reg)
|
||||
const struct loop *loop;
|
||||
rtx reg;
|
||||
loop_find_equiv_value (const struct loop *loop, rtx reg)
|
||||
{
|
||||
rtx loop_start = loop->start;
|
||||
rtx insn, set;
|
||||
@ -3224,8 +3185,7 @@ loop_find_equiv_value (loop, reg)
|
||||
the proper form. */
|
||||
|
||||
static rtx
|
||||
subtract_reg_term (op, reg)
|
||||
rtx op, reg;
|
||||
subtract_reg_term (rtx op, rtx reg)
|
||||
{
|
||||
if (op == reg)
|
||||
return const0_rtx;
|
||||
@ -3245,8 +3205,7 @@ subtract_reg_term (op, reg)
|
||||
REG or a PLUS of a REG. */
|
||||
|
||||
static rtx
|
||||
find_common_reg_term (op0, op1)
|
||||
rtx op0, op1;
|
||||
find_common_reg_term (rtx op0, rtx op1)
|
||||
{
|
||||
if ((GET_CODE (op0) == REG || GET_CODE (op0) == PLUS)
|
||||
&& (GET_CODE (op1) == REG || GET_CODE (op1) == PLUS))
|
||||
@ -3282,8 +3241,7 @@ find_common_reg_term (op0, op1)
|
||||
be calculated, otherwise returns zero. */
|
||||
|
||||
unsigned HOST_WIDE_INT
|
||||
loop_iterations (loop)
|
||||
struct loop *loop;
|
||||
loop_iterations (struct loop *loop)
|
||||
{
|
||||
struct loop_info *loop_info = LOOP_INFO (loop);
|
||||
struct loop_ivs *ivs = LOOP_IVS (loop);
|
||||
@ -3911,9 +3869,7 @@ loop_iterations (loop)
|
||||
copying. */
|
||||
|
||||
static rtx
|
||||
remap_split_bivs (loop, x)
|
||||
struct loop *loop;
|
||||
rtx x;
|
||||
remap_split_bivs (struct loop *loop, rtx x)
|
||||
{
|
||||
struct loop_ivs *ivs = LOOP_IVS (loop);
|
||||
enum rtx_code code;
|
||||
@ -3981,12 +3937,8 @@ remap_split_bivs (loop, x)
|
||||
must dominate LAST_UID. */
|
||||
|
||||
int
|
||||
set_dominates_use (regno, first_uid, last_uid, copy_start, copy_end)
|
||||
int regno;
|
||||
int first_uid;
|
||||
int last_uid;
|
||||
rtx copy_start;
|
||||
rtx copy_end;
|
||||
set_dominates_use (int regno, int first_uid, int last_uid, rtx copy_start,
|
||||
rtx copy_end)
|
||||
{
|
||||
int passed_jump = 0;
|
||||
rtx p = NEXT_INSN (copy_start);
|
||||
@ -4033,9 +3985,7 @@ set_dominates_use (regno, first_uid, last_uid, copy_start, copy_end)
|
||||
deleted so that we execute the single iteration. */
|
||||
|
||||
static rtx
|
||||
ujump_to_loop_cont (loop_start, loop_cont)
|
||||
rtx loop_start;
|
||||
rtx loop_cont;
|
||||
ujump_to_loop_cont (rtx loop_start, rtx loop_cont)
|
||||
{
|
||||
rtx x, label, label_ref;
|
||||
|
||||
|
592
gcc/varasm.c
592
gcc/varasm.c
File diff suppressed because it is too large
Load Diff
28
gcc/varray.c
28
gcc/varray.c
@ -1,5 +1,6 @@
|
||||
/* Virtual array support.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Cygnus Solutions.
|
||||
|
||||
This file is part of GCC.
|
||||
@ -61,10 +62,8 @@ static const struct {
|
||||
/* Allocate a virtual array with NUM_ELEMENT elements, each of which is
|
||||
ELEMENT_SIZE bytes long, named NAME. Array elements are zeroed. */
|
||||
varray_type
|
||||
varray_init (num_elements, element_kind, name)
|
||||
size_t num_elements;
|
||||
enum varray_data_enum element_kind;
|
||||
const char *name;
|
||||
varray_init (size_t num_elements, enum varray_data_enum element_kind,
|
||||
const char *name)
|
||||
{
|
||||
size_t data_size = num_elements * element[element_kind].size;
|
||||
varray_type ptr;
|
||||
@ -83,9 +82,7 @@ varray_init (num_elements, element_kind, name)
|
||||
/* Grow/shrink the virtual array VA to N elements. Zero any new elements
|
||||
allocated. */
|
||||
varray_type
|
||||
varray_grow (va, n)
|
||||
varray_type va;
|
||||
size_t n;
|
||||
varray_grow (varray_type va, size_t n)
|
||||
{
|
||||
size_t old_elements = va->num_elements;
|
||||
|
||||
@ -109,8 +106,7 @@ varray_grow (va, n)
|
||||
|
||||
/* Reset a varray to its original state. */
|
||||
void
|
||||
varray_clear (va)
|
||||
varray_type va;
|
||||
varray_clear (varray_type va)
|
||||
{
|
||||
size_t data_size = element[va->type].size * va->num_elements;
|
||||
|
||||
@ -122,19 +118,15 @@ varray_clear (va)
|
||||
|
||||
#if defined ENABLE_CHECKING && (GCC_VERSION >= 2007)
|
||||
|
||||
extern void error PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1;
|
||||
extern void error (const char *, ...) ATTRIBUTE_PRINTF_1;
|
||||
|
||||
void
|
||||
varray_check_failed (va, n, file, line, function)
|
||||
varray_type va;
|
||||
size_t n;
|
||||
const char *file;
|
||||
int line;
|
||||
const char *function;
|
||||
varray_check_failed (varray_type va, size_t n, const char *file, int line,
|
||||
const char *function)
|
||||
{
|
||||
internal_error ("virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d",
|
||||
va->name, (unsigned long) va->num_elements, (unsigned long) n,
|
||||
function, trim_filename (file), line);
|
||||
function, trim_filename (file), line;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
23
gcc/varray.h
23
gcc/varray.h
@ -1,5 +1,6 @@
|
||||
/* Virtual array support.
|
||||
Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Cygnus Solutions.
|
||||
|
||||
This file is part of GCC.
|
||||
@ -56,7 +57,7 @@ struct const_equiv_data GTY(()) {
|
||||
unsigned age;
|
||||
};
|
||||
|
||||
/* Enum indicating what the varray contains.
|
||||
/* Enum indicating what the varray contains.
|
||||
If this is changed, `element' in varray.c needs to be updated. */
|
||||
|
||||
enum varray_data_enum {
|
||||
@ -120,7 +121,7 @@ typedef union varray_data_tag GTY (()) {
|
||||
struct reg_info_def *GTY ((length ("%0.num_elements"), skip (""),
|
||||
tag ("VARRAY_DATA_REG"))) reg[1];
|
||||
struct const_equiv_data GTY ((length ("%0.num_elements"),
|
||||
tag ("VARRAY_DATA_CONST_EQUIV"))) const_equiv[1];
|
||||
tag ("VARRAY_DATA_CONST_EQUIV"))) const_equiv[1];
|
||||
struct basic_block_def *GTY ((length ("%0.num_elements"), skip (""),
|
||||
tag ("VARRAY_DATA_BB"))) bb[1];
|
||||
struct elt_list *GTY ((length ("%0.num_elements"),
|
||||
@ -134,15 +135,14 @@ struct varray_head_tag GTY(()) {
|
||||
using VARRAY_PUSH/VARRAY_POP. */
|
||||
enum varray_data_enum type; /* The kind of elements in the varray. */
|
||||
const char *name; /* name of the varray for reporting errors */
|
||||
varray_data GTY ((desc ("%0.type"))) data; /* The data elements follow,
|
||||
varray_data GTY ((desc ("%0.type"))) data; /* The data elements follow,
|
||||
must be last. */
|
||||
};
|
||||
typedef struct varray_head_tag *varray_type;
|
||||
|
||||
/* Allocate a virtual array with NUM elements, each of which is SIZE bytes
|
||||
long, named NAME. Array elements are zeroed. */
|
||||
extern varray_type varray_init PARAMS ((size_t, enum varray_data_enum,
|
||||
const char *));
|
||||
extern varray_type varray_init (size_t, enum varray_data_enum, const char *);
|
||||
|
||||
#define VARRAY_CHAR_INIT(va, num, name) \
|
||||
va = varray_init (num, VARRAY_DATA_C, name)
|
||||
@ -210,7 +210,7 @@ extern varray_type varray_init PARAMS ((size_t, enum varray_data_enum,
|
||||
do { if (vp) { free (vp); vp = (varray_type) 0; } } while (0)
|
||||
|
||||
/* Grow/shrink the virtual array VA to N elements. */
|
||||
extern varray_type varray_grow PARAMS ((varray_type, size_t));
|
||||
extern varray_type varray_grow (varray_type, size_t);
|
||||
|
||||
#define VARRAY_GROW(VA, N) ((VA) = varray_grow (VA, N))
|
||||
|
||||
@ -221,16 +221,15 @@ extern varray_type varray_grow PARAMS ((varray_type, size_t));
|
||||
|
||||
#define VARRAY_CLEAR(VA) varray_clear(VA)
|
||||
|
||||
extern void varray_clear PARAMS ((varray_type));
|
||||
extern void varray_clear (varray_type);
|
||||
|
||||
/* Check for VARRAY_xxx macros being in bound. */
|
||||
#if defined ENABLE_CHECKING && (GCC_VERSION >= 2007)
|
||||
extern void varray_check_failed PARAMS ((varray_type, size_t,
|
||||
const char *, int,
|
||||
const char *)) ATTRIBUTE_NORETURN;
|
||||
extern void varray_check_failed (varray_type, size_t, const char *, int,
|
||||
const char *) ATTRIBUTE_NORETURN;
|
||||
#define VARRAY_CHECK(VA, N, T) __extension__ \
|
||||
(*({ varray_type const _va = (VA); \
|
||||
const size_t _n = (N); \
|
||||
const size_t _n = (N); \
|
||||
if (_n >= _va->num_elements) \
|
||||
varray_check_failed (_va, _n, __FILE__, __LINE__, __FUNCTION__); \
|
||||
&_va->data.T[_n]; }))
|
||||
|
219
gcc/vmsdbgout.c
219
gcc/vmsdbgout.c
@ -1,6 +1,6 @@
|
||||
/* Output VMS debug format symbol table information from GCC.
|
||||
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
Contributed by Douglas B. Rupp (rupp@gnat.com).
|
||||
|
||||
This file is part of GCC.
|
||||
@ -128,44 +128,43 @@ static unsigned int line_info_table_in_use;
|
||||
#define LINE_INFO_TABLE_INCREMENT 1024
|
||||
|
||||
/* Forward declarations for functions defined in this file. */
|
||||
static char *full_name PARAMS ((const char *));
|
||||
static unsigned int lookup_filename PARAMS ((const char *));
|
||||
static void addr_const_to_string PARAMS ((char *, rtx));
|
||||
static int write_debug_header PARAMS ((DST_HEADER *, const char *, int));
|
||||
static int write_debug_addr PARAMS ((char *, const char *, int));
|
||||
static int write_debug_data1 PARAMS ((unsigned int, const char *, int));
|
||||
static int write_debug_data2 PARAMS ((unsigned int, const char *, int));
|
||||
static int write_debug_data4 PARAMS ((unsigned long, const char *, int));
|
||||
static int write_debug_data8 PARAMS ((unsigned long long, const char *,
|
||||
int));
|
||||
static int write_debug_delta4 PARAMS ((char *, char *, const char *, int));
|
||||
static int write_debug_string PARAMS ((char *, const char *, int));
|
||||
static int write_modbeg PARAMS ((int));
|
||||
static int write_modend PARAMS ((int));
|
||||
static int write_rtnbeg PARAMS ((int, int));
|
||||
static int write_rtnend PARAMS ((int, int));
|
||||
static int write_pclines PARAMS ((int));
|
||||
static int write_srccorr PARAMS ((int, dst_file_info_entry, int));
|
||||
static int write_srccorrs PARAMS ((int));
|
||||
static char *full_name (const char *);
|
||||
static unsigned int lookup_filename (const char *);
|
||||
static void addr_const_to_string (char *, rtx);
|
||||
static int write_debug_header (DST_HEADER *, const char *, int);
|
||||
static int write_debug_addr (char *, const char *, int);
|
||||
static int write_debug_data1 (unsigned int, const char *, int);
|
||||
static int write_debug_data2 (unsigned int, const char *, int);
|
||||
static int write_debug_data4 (unsigned long, const char *, int);
|
||||
static int write_debug_data8 (unsigned long long, const char *, int);
|
||||
static int write_debug_delta4 (char *, char *, const char *, int);
|
||||
static int write_debug_string (char *, const char *, int);
|
||||
static int write_modbeg (int);
|
||||
static int write_modend (int);
|
||||
static int write_rtnbeg (int, int);
|
||||
static int write_rtnend (int, int);
|
||||
static int write_pclines (int);
|
||||
static int write_srccorr (int, dst_file_info_entry, int);
|
||||
static int write_srccorrs (int);
|
||||
|
||||
static void vmsdbgout_init PARAMS ((const char *));
|
||||
static void vmsdbgout_finish PARAMS ((const char *));
|
||||
static void vmsdbgout_define PARAMS ((unsigned int, const char *));
|
||||
static void vmsdbgout_undef PARAMS ((unsigned int, const char *));
|
||||
static void vmsdbgout_start_source_file PARAMS ((unsigned int, const char *));
|
||||
static void vmsdbgout_end_source_file PARAMS ((unsigned int));
|
||||
static void vmsdbgout_begin_block PARAMS ((unsigned int, unsigned int));
|
||||
static void vmsdbgout_end_block PARAMS ((unsigned int, unsigned int));
|
||||
static bool vmsdbgout_ignore_block PARAMS ((tree));
|
||||
static void vmsdbgout_source_line PARAMS ((unsigned int, const char *));
|
||||
static void vmsdbgout_begin_prologue PARAMS ((unsigned int, const char *));
|
||||
static void vmsdbgout_end_prologue PARAMS ((unsigned int, const char *));
|
||||
static void vmsdbgout_end_function PARAMS ((unsigned int));
|
||||
static void vmsdbgout_end_epilogue PARAMS ((unsigned int, const char *));
|
||||
static void vmsdbgout_begin_function PARAMS ((tree));
|
||||
static void vmsdbgout_decl PARAMS ((tree));
|
||||
static void vmsdbgout_global_decl PARAMS ((tree));
|
||||
static void vmsdbgout_abstract_function PARAMS ((tree));
|
||||
static void vmsdbgout_init (const char *);
|
||||
static void vmsdbgout_finish (const char *);
|
||||
static void vmsdbgout_define (unsigned int, const char *);
|
||||
static void vmsdbgout_undef (unsigned int, const char *);
|
||||
static void vmsdbgout_start_source_file (unsigned int, const char *);
|
||||
static void vmsdbgout_end_source_file (unsigned int);
|
||||
static void vmsdbgout_begin_block (unsigned int, unsigned int);
|
||||
static void vmsdbgout_end_block (unsigned int, unsigned int);
|
||||
static bool vmsdbgout_ignore_block (tree);
|
||||
static void vmsdbgout_source_line (unsigned int, const char *);
|
||||
static void vmsdbgout_begin_prologue (unsigned int, const char *);
|
||||
static void vmsdbgout_end_prologue (unsigned int, const char *);
|
||||
static void vmsdbgout_end_function (unsigned int);
|
||||
static void vmsdbgout_end_epilogue (unsigned int, const char *);
|
||||
static void vmsdbgout_begin_function (tree);
|
||||
static void vmsdbgout_decl (tree);
|
||||
static void vmsdbgout_global_decl (tree);
|
||||
static void vmsdbgout_abstract_function (tree);
|
||||
|
||||
/* The debug hooks structure. */
|
||||
|
||||
@ -382,7 +381,7 @@ static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
macro has the same effect as ASM_OUTPUT_LABELREF, but copies to
|
||||
a string rather than writing to a file. */
|
||||
#ifndef ASM_NAME_TO_STRING
|
||||
#define ASM_NAME_TO_STRING(STR, NAME) \
|
||||
#define ASM_NAME_TO_STRING(STR, NAME) \
|
||||
do \
|
||||
{ \
|
||||
if ((NAME)[0] == '*') \
|
||||
@ -403,9 +402,7 @@ static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
directly, because it writes to a file. */
|
||||
|
||||
static void
|
||||
addr_const_to_string (str, x)
|
||||
char *str;
|
||||
rtx x;
|
||||
addr_const_to_string (char *str, rtx x)
|
||||
{
|
||||
char buf1[256];
|
||||
char buf2[256];
|
||||
@ -533,10 +530,7 @@ restart:
|
||||
nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_header (header, comment, dosizeonly)
|
||||
DST_HEADER *header;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_header (DST_HEADER *header, const char *comment, int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -565,10 +559,7 @@ write_debug_header (header, comment, dosizeonly)
|
||||
nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_addr (symbol, comment, dosizeonly)
|
||||
char *symbol;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_addr (char *symbol, const char *comment, int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -586,10 +577,7 @@ write_debug_addr (symbol, comment, dosizeonly)
|
||||
nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_data1 (data1, comment, dosizeonly)
|
||||
unsigned int data1;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_data1 (unsigned int data1, const char *comment, int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -607,10 +595,7 @@ write_debug_data1 (data1, comment, dosizeonly)
|
||||
nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_data2 (data2, comment, dosizeonly)
|
||||
unsigned int data2;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_data2 (unsigned int data2, const char *comment, int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -627,10 +612,7 @@ write_debug_data2 (data2, comment, dosizeonly)
|
||||
Return the data size. Just return the size if DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_data4 (data4, comment, dosizeonly)
|
||||
unsigned long data4;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_data4 (unsigned long data4, const char *comment, int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -647,10 +629,8 @@ write_debug_data4 (data4, comment, dosizeonly)
|
||||
Return the data size. Just return the size if DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_data8 (data8, comment, dosizeonly)
|
||||
unsigned long long data8;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_data8 (unsigned long long data8, const char *comment,
|
||||
int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -668,11 +648,8 @@ write_debug_data8 (data8, comment, dosizeonly)
|
||||
DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_delta4 (label1, label2, comment, dosizeonly)
|
||||
char *label1;
|
||||
char *label2;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_delta4 (char *label1, char *label2, const char *comment,
|
||||
int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -690,10 +667,7 @@ write_debug_delta4 (label1, label2, comment, dosizeonly)
|
||||
nonzero. */
|
||||
|
||||
static int
|
||||
write_debug_string (string, comment, dosizeonly)
|
||||
char *string;
|
||||
const char *comment;
|
||||
int dosizeonly;
|
||||
write_debug_string (char *string, const char *comment, int dosizeonly)
|
||||
{
|
||||
if (!dosizeonly)
|
||||
{
|
||||
@ -710,8 +684,7 @@ write_debug_string (string, comment, dosizeonly)
|
||||
size if DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_modbeg (dosizeonly)
|
||||
int dosizeonly;
|
||||
write_modbeg (int dosizeonly)
|
||||
{
|
||||
DST_MODULE_BEGIN modbeg;
|
||||
DST_MB_TRLR mb_trlr;
|
||||
@ -774,8 +747,7 @@ write_modbeg (dosizeonly)
|
||||
the size if DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_modend (dosizeonly)
|
||||
int dosizeonly;
|
||||
write_modend (int dosizeonly)
|
||||
{
|
||||
DST_MODULE_END modend;
|
||||
int totsize = 0;
|
||||
@ -794,9 +766,7 @@ write_modend (dosizeonly)
|
||||
Just return the size if DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_rtnbeg (rtnnum, dosizeonly)
|
||||
int rtnnum;
|
||||
int dosizeonly;
|
||||
write_rtnbeg (int rtnnum, int dosizeonly)
|
||||
{
|
||||
char *rtnname;
|
||||
int rtnnamelen;
|
||||
@ -889,9 +859,7 @@ write_rtnbeg (rtnnum, dosizeonly)
|
||||
Just return the size if DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_rtnend (rtnnum, dosizeonly)
|
||||
int rtnnum;
|
||||
int dosizeonly;
|
||||
write_rtnend (int rtnnum, int dosizeonly)
|
||||
{
|
||||
DST_ROUTINE_END rtnend;
|
||||
char label1[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
@ -933,8 +901,7 @@ write_rtnend (rtnnum, dosizeonly)
|
||||
the size if DOSIZEONLY is nonzero */
|
||||
|
||||
static int
|
||||
write_pclines (dosizeonly)
|
||||
int dosizeonly;
|
||||
write_pclines (int dosizeonly)
|
||||
{
|
||||
unsigned i;
|
||||
int fn;
|
||||
@ -1064,10 +1031,8 @@ write_pclines (dosizeonly)
|
||||
nonzero. */
|
||||
|
||||
static int
|
||||
write_srccorr (fileid, file_info_entry, dosizeonly)
|
||||
int fileid;
|
||||
dst_file_info_entry file_info_entry;
|
||||
int dosizeonly;
|
||||
write_srccorr (int fileid, dst_file_info_entry file_info_entry,
|
||||
int dosizeonly)
|
||||
{
|
||||
int src_command_size;
|
||||
int linesleft = file_info_entry.max_line;
|
||||
@ -1259,8 +1224,7 @@ write_srccorr (fileid, file_info_entry, dosizeonly)
|
||||
the size if DOSIZEONLY is nonzero. */
|
||||
|
||||
static int
|
||||
write_srccorrs (dosizeonly)
|
||||
int dosizeonly;
|
||||
write_srccorrs (int dosizeonly)
|
||||
{
|
||||
unsigned int i;
|
||||
int totsize = 0;
|
||||
@ -1275,9 +1239,7 @@ write_srccorrs (dosizeonly)
|
||||
the prologue. */
|
||||
|
||||
static void
|
||||
vmsdbgout_begin_prologue (line, file)
|
||||
unsigned int line;
|
||||
const char *file;
|
||||
vmsdbgout_begin_prologue (unsigned int line, const char *file)
|
||||
{
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
|
||||
@ -1296,9 +1258,7 @@ vmsdbgout_begin_prologue (line, file)
|
||||
the prologue. */
|
||||
|
||||
static void
|
||||
vmsdbgout_end_prologue (line, file)
|
||||
unsigned int line;
|
||||
const char *file;
|
||||
vmsdbgout_end_prologue (unsigned int line, const char *file)
|
||||
{
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
|
||||
@ -1319,8 +1279,7 @@ vmsdbgout_end_prologue (line, file)
|
||||
/* No output for VMS debug, but make obligatory call to Dwarf2 debug */
|
||||
|
||||
static void
|
||||
vmsdbgout_end_function (line)
|
||||
unsigned int line;
|
||||
vmsdbgout_end_function (unsigned int line)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.end_function) (line);
|
||||
@ -1331,9 +1290,7 @@ vmsdbgout_end_function (line)
|
||||
been generated. */
|
||||
|
||||
static void
|
||||
vmsdbgout_end_epilogue (line, file)
|
||||
unsigned int line;
|
||||
const char *file;
|
||||
vmsdbgout_end_epilogue (unsigned int line, const char *file)
|
||||
{
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
|
||||
@ -1357,9 +1314,7 @@ vmsdbgout_end_epilogue (line, file)
|
||||
a lexical block. */
|
||||
|
||||
static void
|
||||
vmsdbgout_begin_block (line, blocknum)
|
||||
register unsigned line;
|
||||
register unsigned blocknum;
|
||||
vmsdbgout_begin_block (register unsigned line, register unsigned blocknum)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.begin_block) (line, blocknum);
|
||||
@ -1372,9 +1327,7 @@ vmsdbgout_begin_block (line, blocknum)
|
||||
lexical block. */
|
||||
|
||||
static void
|
||||
vmsdbgout_end_block (line, blocknum)
|
||||
register unsigned line;
|
||||
register unsigned blocknum;
|
||||
vmsdbgout_end_block (register unsigned line, register unsigned blocknum)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.end_block) (line, blocknum);
|
||||
@ -1386,8 +1339,7 @@ vmsdbgout_end_block (line, blocknum)
|
||||
/* Not implemented in VMS Debug. */
|
||||
|
||||
static bool
|
||||
vmsdbgout_ignore_block (block)
|
||||
tree block;
|
||||
vmsdbgout_ignore_block (tree block)
|
||||
{
|
||||
bool retval = 0;
|
||||
|
||||
@ -1400,8 +1352,7 @@ vmsdbgout_ignore_block (block)
|
||||
/* Add an entry for function DECL into the func_table. */
|
||||
|
||||
static void
|
||||
vmsdbgout_begin_function (decl)
|
||||
tree decl;
|
||||
vmsdbgout_begin_function (tree decl)
|
||||
{
|
||||
const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
|
||||
|
||||
@ -1425,8 +1376,7 @@ static char fullname_buff [4096];
|
||||
in VMS syntax in order to be processed by VMS Debug. */
|
||||
|
||||
static char *
|
||||
full_name (filename)
|
||||
const char *filename;
|
||||
full_name (const char *filename)
|
||||
{
|
||||
#ifdef VMS
|
||||
FILE *fp = fopen (filename, "r");
|
||||
@ -1457,8 +1407,7 @@ full_name (filename)
|
||||
all searches. */
|
||||
|
||||
static unsigned int
|
||||
lookup_filename (file_name)
|
||||
const char *file_name;
|
||||
lookup_filename (const char *file_name)
|
||||
{
|
||||
static unsigned int last_file_lookup_index = 0;
|
||||
register char *fn;
|
||||
@ -1556,9 +1505,7 @@ lookup_filename (file_name)
|
||||
'line_info_table' for later output of the .debug_line section. */
|
||||
|
||||
static void
|
||||
vmsdbgout_source_line (line, filename)
|
||||
register unsigned line;
|
||||
register const char *filename;
|
||||
vmsdbgout_source_line (register unsigned line, register const char *filename)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.source_line) (line, filename);
|
||||
@ -1593,9 +1540,7 @@ vmsdbgout_source_line (line, filename)
|
||||
At present, unimplemented. */
|
||||
|
||||
static void
|
||||
vmsdbgout_start_source_file (lineno, filename)
|
||||
unsigned int lineno;
|
||||
const char *filename;
|
||||
vmsdbgout_start_source_file (unsigned int lineno, const char *filename)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.start_source_file) (lineno, filename);
|
||||
@ -1605,8 +1550,7 @@ vmsdbgout_start_source_file (lineno, filename)
|
||||
At present, unimplemented. */
|
||||
|
||||
static void
|
||||
vmsdbgout_end_source_file (lineno)
|
||||
unsigned int lineno ATTRIBUTE_UNUSED;
|
||||
vmsdbgout_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.end_source_file) (lineno);
|
||||
@ -1615,8 +1559,7 @@ vmsdbgout_end_source_file (lineno)
|
||||
/* Set up for Debug output at the start of compilation. */
|
||||
|
||||
static void
|
||||
vmsdbgout_init (main_input_filename)
|
||||
const char *main_input_filename;
|
||||
vmsdbgout_init (const char *main_input_filename)
|
||||
{
|
||||
const char *language_string = lang_hooks.name;
|
||||
|
||||
@ -1672,9 +1615,7 @@ vmsdbgout_init (main_input_filename)
|
||||
/* Not implemented in VMS Debug. */
|
||||
|
||||
static void
|
||||
vmsdbgout_define (lineno, buffer)
|
||||
unsigned int lineno;
|
||||
const char *buffer;
|
||||
vmsdbgout_define (unsigned int lineno, const char *buffer)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.define) (lineno, buffer);
|
||||
@ -1683,9 +1624,7 @@ vmsdbgout_define (lineno, buffer)
|
||||
/* Not implemented in VMS Debug. */
|
||||
|
||||
static void
|
||||
vmsdbgout_undef (lineno, buffer)
|
||||
unsigned int lineno;
|
||||
const char *buffer;
|
||||
vmsdbgout_undef (unsigned int lineno, const char *buffer)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.undef) (lineno, buffer);
|
||||
@ -1694,8 +1633,7 @@ vmsdbgout_undef (lineno, buffer)
|
||||
/* Not implemented in VMS Debug. */
|
||||
|
||||
static void
|
||||
vmsdbgout_decl (decl)
|
||||
tree decl;
|
||||
vmsdbgout_decl (tree decl)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.function_decl) (decl);
|
||||
@ -1704,8 +1642,7 @@ vmsdbgout_decl (decl)
|
||||
/* Not implemented in VMS Debug. */
|
||||
|
||||
static void
|
||||
vmsdbgout_global_decl (decl)
|
||||
tree decl;
|
||||
vmsdbgout_global_decl (tree decl)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.global_decl) (decl);
|
||||
@ -1714,8 +1651,7 @@ vmsdbgout_global_decl (decl)
|
||||
/* Not implemented in VMS Debug. */
|
||||
|
||||
static void
|
||||
vmsdbgout_abstract_function (decl)
|
||||
tree decl;
|
||||
vmsdbgout_abstract_function (tree decl)
|
||||
{
|
||||
if (write_symbols == VMS_AND_DWARF2_DEBUG)
|
||||
(*dwarf2_debug_hooks.outlining_inline_function) (decl);
|
||||
@ -1725,8 +1661,7 @@ vmsdbgout_abstract_function (decl)
|
||||
VMS Debug debugging info. */
|
||||
|
||||
static void
|
||||
vmsdbgout_finish (main_input_filename)
|
||||
const char *main_input_filename ATTRIBUTE_UNUSED;
|
||||
vmsdbgout_finish (const char *main_input_filename ATTRIBUTE_UNUSED)
|
||||
{
|
||||
unsigned int i;
|
||||
int totsize;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Output xcoff-format symbol table information from GNU compiler.
|
||||
Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002
|
||||
Copyright (C) 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
@ -98,7 +98,7 @@ const char *xcoff_lastfile;
|
||||
? xcoff_current_include_file : main_input_filename); \
|
||||
}
|
||||
|
||||
#define ASM_OUTPUT_LFE(FILE,LINENUM) \
|
||||
#define ASM_OUTPUT_LFE(FILE,LINENUM) \
|
||||
do \
|
||||
{ \
|
||||
fprintf (FILE, "\t.ef\t%d\n", (LINENUM)); \
|
||||
@ -112,9 +112,9 @@ const char *xcoff_lastfile;
|
||||
#define ASM_OUTPUT_LBE(FILE,LINENUM,BLOCKNUM) \
|
||||
fprintf (FILE, "\t.eb\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM))
|
||||
|
||||
static void assign_type_number PARAMS ((tree, const char *, int));
|
||||
static void xcoffout_block PARAMS ((tree, int, tree));
|
||||
static void xcoffout_source_file PARAMS ((FILE *, const char *, int));
|
||||
static void assign_type_number (tree, const char *, int);
|
||||
static void xcoffout_block (tree, int, tree);
|
||||
static void xcoffout_source_file (FILE *, const char *, int);
|
||||
|
||||
/* Support routines for XCOFF debugging info. */
|
||||
|
||||
@ -122,10 +122,7 @@ static void xcoffout_source_file PARAMS ((FILE *, const char *, int));
|
||||
Search all decls in the list SYMS to find the type NAME. */
|
||||
|
||||
static void
|
||||
assign_type_number (syms, name, number)
|
||||
tree syms;
|
||||
const char *name;
|
||||
int number;
|
||||
assign_type_number (tree syms, const char *name, int number)
|
||||
{
|
||||
tree decl;
|
||||
|
||||
@ -142,8 +139,7 @@ assign_type_number (syms, name, number)
|
||||
possible. */
|
||||
|
||||
void
|
||||
xcoff_output_standard_types (syms)
|
||||
tree syms;
|
||||
xcoff_output_standard_types (tree syms)
|
||||
{
|
||||
/* Handle built-in C types here. */
|
||||
|
||||
@ -179,8 +175,7 @@ xcoff_output_standard_types (syms)
|
||||
/* Conversion routine from BSD stabs to AIX storage classes. */
|
||||
|
||||
int
|
||||
stab_to_sclass (stab)
|
||||
int stab;
|
||||
stab_to_sclass (int stab)
|
||||
{
|
||||
switch (stab)
|
||||
{
|
||||
@ -282,10 +277,7 @@ stab_to_sclass (stab)
|
||||
INLINE_P is true if this is from an inlined function. */
|
||||
|
||||
static void
|
||||
xcoffout_source_file (file, filename, inline_p)
|
||||
FILE *file;
|
||||
const char *filename;
|
||||
int inline_p;
|
||||
xcoffout_source_file (FILE *file, const char *filename, int inline_p)
|
||||
{
|
||||
if (filename
|
||||
&& (xcoff_lastfile == 0 || strcmp (filename, xcoff_lastfile)
|
||||
@ -314,9 +306,7 @@ xcoffout_source_file (file, filename, inline_p)
|
||||
/* Output a line number symbol entry for location (FILENAME, LINE). */
|
||||
|
||||
void
|
||||
xcoffout_source_line (line, filename)
|
||||
unsigned int line;
|
||||
const char *filename;
|
||||
xcoffout_source_line (unsigned int line, const char *filename)
|
||||
{
|
||||
bool inline_p = (strcmp (xcoff_current_function_file, filename) != 0
|
||||
|| (int) line < xcoff_begin_function_line);
|
||||
@ -334,10 +324,7 @@ xcoffout_source_line (line, filename)
|
||||
static int do_block = 0;
|
||||
|
||||
static void
|
||||
xcoffout_block (block, depth, args)
|
||||
tree block;
|
||||
int depth;
|
||||
tree args;
|
||||
xcoffout_block (tree block, int depth, tree args)
|
||||
{
|
||||
while (block)
|
||||
{
|
||||
@ -376,9 +363,7 @@ xcoffout_block (block, depth, args)
|
||||
if the count starts at 0 for the outermost one. */
|
||||
|
||||
void
|
||||
xcoffout_begin_block (line, n)
|
||||
unsigned int line;
|
||||
unsigned int n;
|
||||
xcoffout_begin_block (unsigned int line, unsigned int n)
|
||||
{
|
||||
tree decl = current_function_decl;
|
||||
|
||||
@ -394,9 +379,7 @@ xcoffout_begin_block (line, n)
|
||||
/* Describe the end line-number of an internal block within a function. */
|
||||
|
||||
void
|
||||
xcoffout_end_block (line, n)
|
||||
unsigned int line;
|
||||
unsigned int n;
|
||||
xcoffout_end_block (unsigned int line, unsigned int n)
|
||||
{
|
||||
if (n != 1)
|
||||
ASM_OUTPUT_LBE (asm_out_file, line, n);
|
||||
@ -406,10 +389,7 @@ xcoffout_end_block (line, n)
|
||||
Declare function as needed for debugging. */
|
||||
|
||||
void
|
||||
xcoffout_declare_function (file, decl, name)
|
||||
FILE *file;
|
||||
tree decl;
|
||||
const char *name;
|
||||
xcoffout_declare_function (FILE *file, tree decl, const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -446,9 +426,8 @@ xcoffout_declare_function (file, decl, name)
|
||||
Record the file name that this function is contained in. */
|
||||
|
||||
void
|
||||
xcoffout_begin_prologue (line, file)
|
||||
unsigned int line;
|
||||
const char *file ATTRIBUTE_UNUSED;
|
||||
xcoffout_begin_prologue (unsigned int line,
|
||||
const char *file ATTRIBUTE_UNUSED)
|
||||
{
|
||||
ASM_OUTPUT_LFB (asm_out_file, line);
|
||||
dbxout_parms (DECL_ARGUMENTS (current_function_decl));
|
||||
@ -468,8 +447,7 @@ xcoffout_begin_prologue (line, file)
|
||||
Describe end of outermost block. */
|
||||
|
||||
void
|
||||
xcoffout_end_function (last_linenum)
|
||||
unsigned int last_linenum;
|
||||
xcoffout_end_function (unsigned int last_linenum)
|
||||
{
|
||||
ASM_OUTPUT_LFE (asm_out_file, last_linenum);
|
||||
}
|
||||
@ -478,9 +456,8 @@ xcoffout_end_function (last_linenum)
|
||||
Called after the epilogue is output. */
|
||||
|
||||
void
|
||||
xcoffout_end_epilogue (line, file)
|
||||
unsigned int line ATTRIBUTE_UNUSED;
|
||||
const char *file ATTRIBUTE_UNUSED;
|
||||
xcoffout_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
|
||||
const char *file ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* We need to pass the correct function size to .function, otherwise,
|
||||
the xas assembler can't figure out the correct size for the function
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* XCOFF definitions. These are needed in dbxout.c, final.c,
|
||||
and xcoffout.h.
|
||||
Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 2000, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -181,27 +182,24 @@ extern const char *xcoff_lastfile;
|
||||
|
||||
/* Prototype functions in xcoffout.c. */
|
||||
|
||||
extern int stab_to_sclass PARAMS ((int));
|
||||
extern int stab_to_sclass (int);
|
||||
#ifdef BUFSIZ
|
||||
extern void xcoffout_begin_prologue PARAMS ((unsigned int,
|
||||
const char *));
|
||||
extern void xcoffout_begin_block PARAMS ((unsigned, unsigned));
|
||||
extern void xcoffout_end_epilogue PARAMS ((unsigned int,
|
||||
const char *));
|
||||
extern void xcoffout_end_function PARAMS ((unsigned int));
|
||||
extern void xcoffout_end_block PARAMS ((unsigned, unsigned));
|
||||
extern void xcoffout_begin_prologue (unsigned int, const char *);
|
||||
extern void xcoffout_begin_block (unsigned, unsigned);
|
||||
extern void xcoffout_end_epilogue (unsigned int, const char *);
|
||||
extern void xcoffout_end_function (unsigned int);
|
||||
extern void xcoffout_end_block (unsigned, unsigned);
|
||||
#endif /* BUFSIZ */
|
||||
|
||||
#ifdef TREE_CODE
|
||||
extern void xcoff_output_standard_types PARAMS ((tree));
|
||||
extern void xcoff_output_standard_types (tree);
|
||||
#ifdef BUFSIZ
|
||||
extern void xcoffout_declare_function PARAMS ((FILE *, tree, const char *));
|
||||
extern void xcoffout_declare_function (FILE *, tree, const char *);
|
||||
#endif /* BUFSIZ */
|
||||
#endif /* TREE_CODE */
|
||||
|
||||
#ifdef RTX_CODE
|
||||
#ifdef BUFSIZ
|
||||
extern void xcoffout_source_line PARAMS ((unsigned int,
|
||||
const char *));
|
||||
extern void xcoffout_source_line (unsigned int, const char *);
|
||||
#endif /* BUFSIZ */
|
||||
#endif /* RTX_CODE */
|
||||
|
Loading…
Reference in New Issue
Block a user